diff options
| author | Joël Schulz-Ansres <[email protected]> | 2024-05-15 12:54:30 +0200 |
|---|---|---|
| committer | Joël Schulz-Ansres <[email protected]> | 2024-05-15 12:54:30 +0200 |
| commit | db56c4fe6fb919e89edda37fc5acb2fb05f45745 (patch) | |
| tree | 63d0449b5423dd66dd6ad4fdb1a566470c1a2c11 /embassy-stm32/src/gpio.rs | |
| parent | ea70b440cd1035f28c3f332a2f72d7fa42ac995d (diff) | |
Add miso pullup to spi configuration, add input as field for speed
Diffstat (limited to 'embassy-stm32/src/gpio.rs')
| -rw-r--r-- | embassy-stm32/src/gpio.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/embassy-stm32/src/gpio.rs b/embassy-stm32/src/gpio.rs index 214813a42..d2db0a257 100644 --- a/embassy-stm32/src/gpio.rs +++ b/embassy-stm32/src/gpio.rs | |||
| @@ -265,6 +265,7 @@ impl From<Pull> for vals::Pupdr { | |||
| 265 | #[derive(Debug, Copy, Clone)] | 265 | #[derive(Debug, Copy, Clone)] |
| 266 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | 266 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] |
| 267 | pub enum Speed { | 267 | pub enum Speed { |
| 268 | Input, | ||
| 268 | Low, | 269 | Low, |
| 269 | Medium, | 270 | Medium, |
| 270 | #[cfg(not(any(syscfg_f0, gpio_v1)))] | 271 | #[cfg(not(any(syscfg_f0, gpio_v1)))] |
| @@ -278,6 +279,7 @@ impl From<Speed> for vals::Mode { | |||
| 278 | use Speed::*; | 279 | use Speed::*; |
| 279 | 280 | ||
| 280 | match speed { | 281 | match speed { |
| 282 | Input => vals::Mode::INPUT, | ||
| 281 | Low => vals::Mode::OUTPUT2MHZ, | 283 | Low => vals::Mode::OUTPUT2MHZ, |
| 282 | Medium => vals::Mode::OUTPUT10MHZ, | 284 | Medium => vals::Mode::OUTPUT10MHZ, |
| 283 | VeryHigh => vals::Mode::OUTPUT50MHZ, | 285 | VeryHigh => vals::Mode::OUTPUT50MHZ, |
| @@ -291,6 +293,7 @@ impl From<Speed> for vals::Ospeedr { | |||
| 291 | use Speed::*; | 293 | use Speed::*; |
| 292 | 294 | ||
| 293 | match speed { | 295 | match speed { |
| 296 | Input => vals::Ospeedr::LOWSPEED, | ||
| 294 | Low => vals::Ospeedr::LOWSPEED, | 297 | Low => vals::Ospeedr::LOWSPEED, |
| 295 | Medium => vals::Ospeedr::MEDIUMSPEED, | 298 | Medium => vals::Ospeedr::MEDIUMSPEED, |
| 296 | #[cfg(not(syscfg_f0))] | 299 | #[cfg(not(syscfg_f0))] |
| @@ -676,6 +679,39 @@ pub(crate) trait SealedPin { | |||
| 676 | #[cfg(gpio_v2)] | 679 | #[cfg(gpio_v2)] |
| 677 | self.block().ospeedr().modify(|w| w.set_ospeedr(pin, speed.into())); | 680 | self.block().ospeedr().modify(|w| w.set_ospeedr(pin, speed.into())); |
| 678 | } | 681 | } |
| 682 | |||
| 683 | |||
| 684 | /// Get the pull-up configuration. | ||
| 685 | #[inline] | ||
| 686 | fn pull(&self) -> Pull { | ||
| 687 | critical_section::with(|_| { | ||
| 688 | let r = self.block(); | ||
| 689 | let n = self._pin() as usize; | ||
| 690 | #[cfg(gpio_v1)] | ||
| 691 | { | ||
| 692 | let crlh = if n < 8 { 0 } else { 1 }; | ||
| 693 | match r.cr(crlh).cnf(n % 8) { | ||
| 694 | vals::CnfIn::FLOATING => Pull::None, | ||
| 695 | _ => if r.bsrr().read().bs(n % 8) { | ||
| 696 | Pull::Up | ||
| 697 | } else if r.bsrr().read().br(n % 8) { | ||
| 698 | Pull::Down | ||
| 699 | } else { | ||
| 700 | Pull::None | ||
| 701 | } | ||
| 702 | } | ||
| 703 | } | ||
| 704 | #[cfg(gpio_v2)] | ||
| 705 | { | ||
| 706 | match r.pupdr().read().pupdr(n % 8) { | ||
| 707 | vals::Pupdr::FLOATING => Pull::None, | ||
| 708 | vals::Pupdr::PULLDOWN => Pull::Down, | ||
| 709 | vals::Pupdr::PULLUP => Pull::Up, | ||
| 710 | vals::Pupdr::_RESERVED_3 => Pull::None, | ||
| 711 | } | ||
| 712 | } | ||
| 713 | }) | ||
| 714 | } | ||
| 679 | } | 715 | } |
| 680 | 716 | ||
| 681 | /// GPIO pin trait. | 717 | /// GPIO pin trait. |
