aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaleb Jamison <[email protected]>2024-09-11 19:44:11 -0400
committerGitHub <[email protected]>2024-09-12 01:44:11 +0200
commit3d6a270f30c45eaf394c8eb8bf182dd1a7ec2d7b (patch)
tree04137db1ec5a973ba6083acbf9cd1547a7e9974b
parent7648d42b7f23a2caad29ed6e16123b088ccdc8b5 (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.rs24
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