aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-rp/src/gpio.rs32
1 files changed, 22 insertions, 10 deletions
diff --git a/embassy-rp/src/gpio.rs b/embassy-rp/src/gpio.rs
index a28bae96b..f79f592b4 100644
--- a/embassy-rp/src/gpio.rs
+++ b/embassy-rp/src/gpio.rs
@@ -599,12 +599,12 @@ pub(crate) mod sealed {
599 fn pin_bank(&self) -> u8; 599 fn pin_bank(&self) -> u8;
600 600
601 #[inline] 601 #[inline]
602 fn pin(&self) -> u8 { 602 fn _pin(&self) -> u8 {
603 self.pin_bank() & 0x1f 603 self.pin_bank() & 0x1f
604 } 604 }
605 605
606 #[inline] 606 #[inline]
607 fn bank(&self) -> Bank { 607 fn _bank(&self) -> Bank {
608 if self.pin_bank() & 0x20 == 0 { 608 if self.pin_bank() & 0x20 == 0 {
609 Bank::Bank0 609 Bank::Bank0
610 } else { 610 } else {
@@ -613,35 +613,35 @@ pub(crate) mod sealed {
613 } 613 }
614 614
615 fn io(&self) -> pac::io::Gpio { 615 fn io(&self) -> pac::io::Gpio {
616 let block = match self.bank() { 616 let block = match self._bank() {
617 Bank::Bank0 => crate::pac::IO_BANK0, 617 Bank::Bank0 => crate::pac::IO_BANK0,
618 Bank::Qspi => crate::pac::IO_QSPI, 618 Bank::Qspi => crate::pac::IO_QSPI,
619 }; 619 };
620 block.gpio(self.pin() as _) 620 block.gpio(self._pin() as _)
621 } 621 }
622 622
623 fn pad_ctrl(&self) -> Reg<pac::pads::regs::GpioCtrl, RW> { 623 fn pad_ctrl(&self) -> Reg<pac::pads::regs::GpioCtrl, RW> {
624 let block = match self.bank() { 624 let block = match self._bank() {
625 Bank::Bank0 => crate::pac::PADS_BANK0, 625 Bank::Bank0 => crate::pac::PADS_BANK0,
626 Bank::Qspi => crate::pac::PADS_QSPI, 626 Bank::Qspi => crate::pac::PADS_QSPI,
627 }; 627 };
628 block.gpio(self.pin() as _) 628 block.gpio(self._pin() as _)
629 } 629 }
630 630
631 fn sio_out(&self) -> pac::sio::Gpio { 631 fn sio_out(&self) -> pac::sio::Gpio {
632 SIO.gpio_out(self.bank() as _) 632 SIO.gpio_out(self._bank() as _)
633 } 633 }
634 634
635 fn sio_oe(&self) -> pac::sio::Gpio { 635 fn sio_oe(&self) -> pac::sio::Gpio {
636 SIO.gpio_oe(self.bank() as _) 636 SIO.gpio_oe(self._bank() as _)
637 } 637 }
638 638
639 fn sio_in(&self) -> Reg<u32, RW> { 639 fn sio_in(&self) -> Reg<u32, RW> {
640 SIO.gpio_in(self.bank() as _) 640 SIO.gpio_in(self._bank() as _)
641 } 641 }
642 642
643 fn int_proc(&self) -> pac::io::Int { 643 fn int_proc(&self) -> pac::io::Int {
644 let io_block = match self.bank() { 644 let io_block = match self._bank() {
645 Bank::Bank0 => crate::pac::IO_BANK0, 645 Bank::Bank0 => crate::pac::IO_BANK0,
646 Bank::Qspi => crate::pac::IO_QSPI, 646 Bank::Qspi => crate::pac::IO_QSPI,
647 }; 647 };
@@ -658,6 +658,18 @@ pub trait Pin: Peripheral<P = Self> + Into<AnyPin> + sealed::Pin + Sized + 'stat
658 pin_bank: self.pin_bank(), 658 pin_bank: self.pin_bank(),
659 } 659 }
660 } 660 }
661
662 /// Returns the pin number within a bank
663 #[inline]
664 fn pin(&self) -> u8 {
665 self._pin()
666 }
667
668 /// Returns the bank of this pin
669 #[inline]
670 fn bank(&self) -> Bank {
671 self._bank()
672 }
661} 673}
662 674
663pub struct AnyPin { 675pub struct AnyPin {