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
This commit is contained in:
Caleb Jamison 2024-09-11 19:44:11 -04:00 committed by GitHub
parent 7648d42b7f
commit 3d6a270f30
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -846,12 +846,12 @@ pub(crate) trait SealedPin: Sized {
#[inline] #[inline]
fn _pin(&self) -> u8 { fn _pin(&self) -> u8 {
self.pin_bank() & 0x1f self.pin_bank() & 0x7f
} }
#[inline] #[inline]
fn _bank(&self) -> Bank { fn _bank(&self) -> Bank {
match self.pin_bank() >> 5 { match self.pin_bank() >> 7 {
#[cfg(feature = "qspi-as-gpio")] #[cfg(feature = "qspi-as-gpio")]
1 => Bank::Qspi, 1 => Bank::Qspi,
_ => Bank::Bank0, _ => Bank::Bank0,
@ -880,15 +880,27 @@ pub(crate) trait SealedPin: Sized {
} }
fn sio_out(&self) -> pac::sio::Gpio { fn sio_out(&self) -> pac::sio::Gpio {
SIO.gpio_out(self._bank() as _) if cfg!(feature = "rp2040") {
SIO.gpio_out(self._bank() as _)
} else {
SIO.gpio_out((self._pin() / 32) as _)
}
} }
fn sio_oe(&self) -> pac::sio::Gpio { fn sio_oe(&self) -> pac::sio::Gpio {
SIO.gpio_oe(self._bank() as _) if cfg!(feature = "rp2040") {
SIO.gpio_oe(self._bank() as _)
} else {
SIO.gpio_oe((self._pin() / 32) as _)
}
} }
fn sio_in(&self) -> Reg<u32, RW> { fn sio_in(&self) -> Reg<u32, RW> {
SIO.gpio_in(self._bank() as _) if cfg!(feature = "rp2040") {
SIO.gpio_in(self._bank() as _)
} else {
SIO.gpio_in((self._pin() / 32) as _)
}
} }
fn int_proc(&self) -> pac::io::Int { fn int_proc(&self) -> pac::io::Int {
@ -953,7 +965,7 @@ macro_rules! impl_pin {
impl SealedPin for peripherals::$name { impl SealedPin for peripherals::$name {
#[inline] #[inline]
fn pin_bank(&self) -> u8 { fn pin_bank(&self) -> u8 {
($bank as u8) * 32 + $pin_num ($bank as u8) * 128 + $pin_num
} }
} }