diff options
| author | Caleb Jamison <[email protected]> | 2024-09-11 19:44:11 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-09-12 01:44:11 +0200 |
| commit | 3d6a270f30c45eaf394c8eb8bf182dd1a7ec2d7b (patch) | |
| tree | 04137db1ec5a973ba6083acbf9cd1547a7e9974b | |
| parent | 7648d42b7f23a2caad29ed6e16123b088ccdc8b5 (diff) | |
rp: Fix indexing for pins >31 on rp235xb (#3330)
* Fix indexing for pins >31 on rp235xb
* fixup knowing that 1<<7 is 128 not 64
| -rw-r--r-- | embassy-rp/src/gpio.rs | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/embassy-rp/src/gpio.rs b/embassy-rp/src/gpio.rs index d0bb7e574..31397172c 100644 --- a/embassy-rp/src/gpio.rs +++ b/embassy-rp/src/gpio.rs | |||
| @@ -846,12 +846,12 @@ pub(crate) trait SealedPin: Sized { | |||
| 846 | 846 | ||
| 847 | #[inline] | 847 | #[inline] |
| 848 | fn _pin(&self) -> u8 { | 848 | fn _pin(&self) -> u8 { |
| 849 | self.pin_bank() & 0x1f | 849 | self.pin_bank() & 0x7f |
| 850 | } | 850 | } |
| 851 | 851 | ||
| 852 | #[inline] | 852 | #[inline] |
| 853 | fn _bank(&self) -> Bank { | 853 | fn _bank(&self) -> Bank { |
| 854 | match self.pin_bank() >> 5 { | 854 | match self.pin_bank() >> 7 { |
| 855 | #[cfg(feature = "qspi-as-gpio")] | 855 | #[cfg(feature = "qspi-as-gpio")] |
| 856 | 1 => Bank::Qspi, | 856 | 1 => Bank::Qspi, |
| 857 | _ => Bank::Bank0, | 857 | _ => Bank::Bank0, |
| @@ -880,15 +880,27 @@ pub(crate) trait SealedPin: Sized { | |||
| 880 | } | 880 | } |
| 881 | 881 | ||
| 882 | fn sio_out(&self) -> pac::sio::Gpio { | 882 | fn sio_out(&self) -> pac::sio::Gpio { |
| 883 | SIO.gpio_out(self._bank() as _) | 883 | if cfg!(feature = "rp2040") { |
| 884 | SIO.gpio_out(self._bank() as _) | ||
| 885 | } else { | ||
| 886 | SIO.gpio_out((self._pin() / 32) as _) | ||
| 887 | } | ||
| 884 | } | 888 | } |
| 885 | 889 | ||
| 886 | fn sio_oe(&self) -> pac::sio::Gpio { | 890 | fn sio_oe(&self) -> pac::sio::Gpio { |
| 887 | SIO.gpio_oe(self._bank() as _) | 891 | if cfg!(feature = "rp2040") { |
| 892 | SIO.gpio_oe(self._bank() as _) | ||
| 893 | } else { | ||
| 894 | SIO.gpio_oe((self._pin() / 32) as _) | ||
| 895 | } | ||
| 888 | } | 896 | } |
| 889 | 897 | ||
| 890 | fn sio_in(&self) -> Reg<u32, RW> { | 898 | fn sio_in(&self) -> Reg<u32, RW> { |
| 891 | SIO.gpio_in(self._bank() as _) | 899 | if cfg!(feature = "rp2040") { |
| 900 | SIO.gpio_in(self._bank() as _) | ||
| 901 | } else { | ||
| 902 | SIO.gpio_in((self._pin() / 32) as _) | ||
| 903 | } | ||
| 892 | } | 904 | } |
| 893 | 905 | ||
| 894 | fn int_proc(&self) -> pac::io::Int { | 906 | fn int_proc(&self) -> pac::io::Int { |
| @@ -953,7 +965,7 @@ macro_rules! impl_pin { | |||
| 953 | impl SealedPin for peripherals::$name { | 965 | impl SealedPin for peripherals::$name { |
| 954 | #[inline] | 966 | #[inline] |
| 955 | fn pin_bank(&self) -> u8 { | 967 | fn pin_bank(&self) -> u8 { |
| 956 | ($bank as u8) * 32 + $pin_num | 968 | ($bank as u8) * 128 + $pin_num |
| 957 | } | 969 | } |
| 958 | } | 970 | } |
| 959 | 971 | ||
