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]
fn _pin(&self) -> u8 {
self.pin_bank() & 0x1f
self.pin_bank() & 0x7f
}
#[inline]
fn _bank(&self) -> Bank {
match self.pin_bank() >> 5 {
match self.pin_bank() >> 7 {
#[cfg(feature = "qspi-as-gpio")]
1 => Bank::Qspi,
_ => Bank::Bank0,
@ -880,15 +880,27 @@ pub(crate) trait SealedPin: Sized {
}
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 {
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> {
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 {
@ -953,7 +965,7 @@ macro_rules! impl_pin {
impl SealedPin for peripherals::$name {
#[inline]
fn pin_bank(&self) -> u8 {
($bank as u8) * 32 + $pin_num
($bank as u8) * 128 + $pin_num
}
}