diff options
Diffstat (limited to 'embassy-nxp/src/gpio/lpc55.rs')
| -rw-r--r-- | embassy-nxp/src/gpio/lpc55.rs | 93 |
1 files changed, 16 insertions, 77 deletions
diff --git a/embassy-nxp/src/gpio/lpc55.rs b/embassy-nxp/src/gpio/lpc55.rs index 6039d8ca8..6be405463 100644 --- a/embassy-nxp/src/gpio/lpc55.rs +++ b/embassy-nxp/src/gpio/lpc55.rs | |||
| @@ -1,9 +1,11 @@ | |||
| 1 | #![macro_use] | ||
| 2 | |||
| 1 | use embassy_hal_internal::{PeripheralType, impl_peripheral}; | 3 | use embassy_hal_internal::{PeripheralType, impl_peripheral}; |
| 2 | 4 | ||
| 5 | use crate::Peri; | ||
| 3 | use crate::pac::common::{RW, Reg}; | 6 | use crate::pac::common::{RW, Reg}; |
| 4 | use crate::pac::iocon::vals::{PioDigimode, PioMode}; | 7 | use crate::pac::iocon::vals::{PioDigimode, PioMode}; |
| 5 | use crate::pac::{GPIO, IOCON, SYSCON, iocon}; | 8 | use crate::pac::{GPIO, IOCON, SYSCON, iocon}; |
| 6 | use crate::{Peri, peripherals}; | ||
| 7 | 9 | ||
| 8 | pub(crate) fn init() { | 10 | pub(crate) fn init() { |
| 9 | // Enable clocks for GPIO, PINT, and IOCON | 11 | // Enable clocks for GPIO, PINT, and IOCON |
| @@ -39,8 +41,8 @@ pub enum Pull { | |||
| 39 | /// The LPC55 boards have two GPIO banks, each with 32 pins. This enum represents the two banks. | 41 | /// The LPC55 boards have two GPIO banks, each with 32 pins. This enum represents the two banks. |
| 40 | #[derive(Debug, Eq, PartialEq, Clone, Copy)] | 42 | #[derive(Debug, Eq, PartialEq, Clone, Copy)] |
| 41 | pub enum Bank { | 43 | pub enum Bank { |
| 42 | Bank0 = 0, | 44 | Gpio0 = 0, |
| 43 | Bank1 = 1, | 45 | Gpio1 = 1, |
| 44 | } | 46 | } |
| 45 | 47 | ||
| 46 | /// GPIO output driver. Internally, this is a specialized [Flex] pin. | 48 | /// GPIO output driver. Internally, this is a specialized [Flex] pin. |
| @@ -228,8 +230,8 @@ pub(crate) trait SealedPin: Sized { | |||
| 228 | #[inline] | 230 | #[inline] |
| 229 | fn pio(&self) -> Reg<iocon::regs::Pio, RW> { | 231 | fn pio(&self) -> Reg<iocon::regs::Pio, RW> { |
| 230 | match self.pin_bank() { | 232 | match self.pin_bank() { |
| 231 | Bank::Bank0 => IOCON.pio0(self.pin_number() as usize), | 233 | Bank::Gpio0 => IOCON.pio0(self.pin_number() as usize), |
| 232 | Bank::Bank1 => IOCON.pio1(self.pin_number() as usize), | 234 | Bank::Gpio1 => IOCON.pio1(self.pin_number() as usize), |
| 233 | } | 235 | } |
| 234 | } | 236 | } |
| 235 | } | 237 | } |
| @@ -254,8 +256,8 @@ pub trait Pin: PeripheralType + Into<AnyPin> + SealedPin + Sized + 'static { | |||
| 254 | 256 | ||
| 255 | /// Type-erased GPIO pin. | 257 | /// Type-erased GPIO pin. |
| 256 | pub struct AnyPin { | 258 | pub struct AnyPin { |
| 257 | pin_bank: Bank, | 259 | pub(crate) pin_bank: Bank, |
| 258 | pin_number: u8, | 260 | pub(crate) pin_number: u8, |
| 259 | } | 261 | } |
| 260 | 262 | ||
| 261 | impl AnyPin { | 263 | impl AnyPin { |
| @@ -285,12 +287,12 @@ impl SealedPin for AnyPin { | |||
| 285 | } | 287 | } |
| 286 | 288 | ||
| 287 | macro_rules! impl_pin { | 289 | macro_rules! impl_pin { |
| 288 | ($name:ident, $bank:expr, $pin_num:expr) => { | 290 | ($name:ident, $bank:ident, $pin_num:expr) => { |
| 289 | impl Pin for peripherals::$name {} | 291 | impl crate::gpio::Pin for peripherals::$name {} |
| 290 | impl SealedPin for peripherals::$name { | 292 | impl crate::gpio::SealedPin for peripherals::$name { |
| 291 | #[inline] | 293 | #[inline] |
| 292 | fn pin_bank(&self) -> Bank { | 294 | fn pin_bank(&self) -> crate::gpio::Bank { |
| 293 | $bank | 295 | crate::gpio::Bank::$bank |
| 294 | } | 296 | } |
| 295 | 297 | ||
| 296 | #[inline] | 298 | #[inline] |
| @@ -301,6 +303,8 @@ macro_rules! impl_pin { | |||
| 301 | 303 | ||
| 302 | impl From<peripherals::$name> for crate::gpio::AnyPin { | 304 | impl From<peripherals::$name> for crate::gpio::AnyPin { |
| 303 | fn from(val: peripherals::$name) -> Self { | 305 | fn from(val: peripherals::$name) -> Self { |
| 306 | use crate::gpio::SealedPin; | ||
| 307 | |||
| 304 | Self { | 308 | Self { |
| 305 | pin_bank: val.pin_bank(), | 309 | pin_bank: val.pin_bank(), |
| 306 | pin_number: val.pin_number(), | 310 | pin_number: val.pin_number(), |
| @@ -309,68 +313,3 @@ macro_rules! impl_pin { | |||
| 309 | } | 313 | } |
| 310 | }; | 314 | }; |
| 311 | } | 315 | } |
| 312 | |||
| 313 | impl_pin!(PIO0_0, Bank::Bank0, 0); | ||
| 314 | impl_pin!(PIO0_1, Bank::Bank0, 1); | ||
| 315 | impl_pin!(PIO0_2, Bank::Bank0, 2); | ||
| 316 | impl_pin!(PIO0_3, Bank::Bank0, 3); | ||
| 317 | impl_pin!(PIO0_4, Bank::Bank0, 4); | ||
| 318 | impl_pin!(PIO0_5, Bank::Bank0, 5); | ||
| 319 | impl_pin!(PIO0_6, Bank::Bank0, 6); | ||
| 320 | impl_pin!(PIO0_7, Bank::Bank0, 7); | ||
| 321 | impl_pin!(PIO0_8, Bank::Bank0, 8); | ||
| 322 | impl_pin!(PIO0_9, Bank::Bank0, 9); | ||
| 323 | impl_pin!(PIO0_10, Bank::Bank0, 10); | ||
| 324 | impl_pin!(PIO0_11, Bank::Bank0, 11); | ||
| 325 | impl_pin!(PIO0_12, Bank::Bank0, 12); | ||
| 326 | impl_pin!(PIO0_13, Bank::Bank0, 13); | ||
| 327 | impl_pin!(PIO0_14, Bank::Bank0, 14); | ||
| 328 | impl_pin!(PIO0_15, Bank::Bank0, 15); | ||
| 329 | impl_pin!(PIO0_16, Bank::Bank0, 16); | ||
| 330 | impl_pin!(PIO0_17, Bank::Bank0, 17); | ||
| 331 | impl_pin!(PIO0_18, Bank::Bank0, 18); | ||
| 332 | impl_pin!(PIO0_19, Bank::Bank0, 19); | ||
| 333 | impl_pin!(PIO0_20, Bank::Bank0, 20); | ||
| 334 | impl_pin!(PIO0_21, Bank::Bank0, 21); | ||
| 335 | impl_pin!(PIO0_22, Bank::Bank0, 22); | ||
| 336 | impl_pin!(PIO0_23, Bank::Bank0, 23); | ||
| 337 | impl_pin!(PIO0_24, Bank::Bank0, 24); | ||
| 338 | impl_pin!(PIO0_25, Bank::Bank0, 25); | ||
| 339 | impl_pin!(PIO0_26, Bank::Bank0, 26); | ||
| 340 | impl_pin!(PIO0_27, Bank::Bank0, 27); | ||
| 341 | impl_pin!(PIO0_28, Bank::Bank0, 28); | ||
| 342 | impl_pin!(PIO0_29, Bank::Bank0, 29); | ||
| 343 | impl_pin!(PIO0_30, Bank::Bank0, 30); | ||
| 344 | impl_pin!(PIO0_31, Bank::Bank0, 31); | ||
| 345 | impl_pin!(PIO1_0, Bank::Bank1, 0); | ||
| 346 | impl_pin!(PIO1_1, Bank::Bank1, 1); | ||
| 347 | impl_pin!(PIO1_2, Bank::Bank1, 2); | ||
| 348 | impl_pin!(PIO1_3, Bank::Bank1, 3); | ||
| 349 | impl_pin!(PIO1_4, Bank::Bank1, 4); | ||
| 350 | impl_pin!(PIO1_5, Bank::Bank1, 5); | ||
| 351 | impl_pin!(PIO1_6, Bank::Bank1, 6); | ||
| 352 | impl_pin!(PIO1_7, Bank::Bank1, 7); | ||
| 353 | impl_pin!(PIO1_8, Bank::Bank1, 8); | ||
| 354 | impl_pin!(PIO1_9, Bank::Bank1, 9); | ||
| 355 | impl_pin!(PIO1_10, Bank::Bank1, 10); | ||
| 356 | impl_pin!(PIO1_11, Bank::Bank1, 11); | ||
| 357 | impl_pin!(PIO1_12, Bank::Bank1, 12); | ||
| 358 | impl_pin!(PIO1_13, Bank::Bank1, 13); | ||
| 359 | impl_pin!(PIO1_14, Bank::Bank1, 14); | ||
| 360 | impl_pin!(PIO1_15, Bank::Bank1, 15); | ||
| 361 | impl_pin!(PIO1_16, Bank::Bank1, 16); | ||
| 362 | impl_pin!(PIO1_17, Bank::Bank1, 17); | ||
| 363 | impl_pin!(PIO1_18, Bank::Bank1, 18); | ||
| 364 | impl_pin!(PIO1_19, Bank::Bank1, 19); | ||
| 365 | impl_pin!(PIO1_20, Bank::Bank1, 20); | ||
| 366 | impl_pin!(PIO1_21, Bank::Bank1, 21); | ||
| 367 | impl_pin!(PIO1_22, Bank::Bank1, 22); | ||
| 368 | impl_pin!(PIO1_23, Bank::Bank1, 23); | ||
| 369 | impl_pin!(PIO1_24, Bank::Bank1, 24); | ||
| 370 | impl_pin!(PIO1_25, Bank::Bank1, 25); | ||
| 371 | impl_pin!(PIO1_26, Bank::Bank1, 26); | ||
| 372 | impl_pin!(PIO1_27, Bank::Bank1, 27); | ||
| 373 | impl_pin!(PIO1_28, Bank::Bank1, 28); | ||
| 374 | impl_pin!(PIO1_29, Bank::Bank1, 29); | ||
| 375 | impl_pin!(PIO1_30, Bank::Bank1, 30); | ||
| 376 | impl_pin!(PIO1_31, Bank::Bank1, 31); | ||
