aboutsummaryrefslogtreecommitdiff
path: root/embassy-nxp/src/gpio/lpc55.rs
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-nxp/src/gpio/lpc55.rs')
-rw-r--r--embassy-nxp/src/gpio/lpc55.rs93
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
1use embassy_hal_internal::{PeripheralType, impl_peripheral}; 3use embassy_hal_internal::{PeripheralType, impl_peripheral};
2 4
5use crate::Peri;
3use crate::pac::common::{RW, Reg}; 6use crate::pac::common::{RW, Reg};
4use crate::pac::iocon::vals::{PioDigimode, PioMode}; 7use crate::pac::iocon::vals::{PioDigimode, PioMode};
5use crate::pac::{GPIO, IOCON, SYSCON, iocon}; 8use crate::pac::{GPIO, IOCON, SYSCON, iocon};
6use crate::{Peri, peripherals};
7 9
8pub(crate) fn init() { 10pub(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)]
41pub enum Bank { 43pub 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.
256pub struct AnyPin { 258pub 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
261impl AnyPin { 263impl AnyPin {
@@ -285,12 +287,12 @@ impl SealedPin for AnyPin {
285} 287}
286 288
287macro_rules! impl_pin { 289macro_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
313impl_pin!(PIO0_0, Bank::Bank0, 0);
314impl_pin!(PIO0_1, Bank::Bank0, 1);
315impl_pin!(PIO0_2, Bank::Bank0, 2);
316impl_pin!(PIO0_3, Bank::Bank0, 3);
317impl_pin!(PIO0_4, Bank::Bank0, 4);
318impl_pin!(PIO0_5, Bank::Bank0, 5);
319impl_pin!(PIO0_6, Bank::Bank0, 6);
320impl_pin!(PIO0_7, Bank::Bank0, 7);
321impl_pin!(PIO0_8, Bank::Bank0, 8);
322impl_pin!(PIO0_9, Bank::Bank0, 9);
323impl_pin!(PIO0_10, Bank::Bank0, 10);
324impl_pin!(PIO0_11, Bank::Bank0, 11);
325impl_pin!(PIO0_12, Bank::Bank0, 12);
326impl_pin!(PIO0_13, Bank::Bank0, 13);
327impl_pin!(PIO0_14, Bank::Bank0, 14);
328impl_pin!(PIO0_15, Bank::Bank0, 15);
329impl_pin!(PIO0_16, Bank::Bank0, 16);
330impl_pin!(PIO0_17, Bank::Bank0, 17);
331impl_pin!(PIO0_18, Bank::Bank0, 18);
332impl_pin!(PIO0_19, Bank::Bank0, 19);
333impl_pin!(PIO0_20, Bank::Bank0, 20);
334impl_pin!(PIO0_21, Bank::Bank0, 21);
335impl_pin!(PIO0_22, Bank::Bank0, 22);
336impl_pin!(PIO0_23, Bank::Bank0, 23);
337impl_pin!(PIO0_24, Bank::Bank0, 24);
338impl_pin!(PIO0_25, Bank::Bank0, 25);
339impl_pin!(PIO0_26, Bank::Bank0, 26);
340impl_pin!(PIO0_27, Bank::Bank0, 27);
341impl_pin!(PIO0_28, Bank::Bank0, 28);
342impl_pin!(PIO0_29, Bank::Bank0, 29);
343impl_pin!(PIO0_30, Bank::Bank0, 30);
344impl_pin!(PIO0_31, Bank::Bank0, 31);
345impl_pin!(PIO1_0, Bank::Bank1, 0);
346impl_pin!(PIO1_1, Bank::Bank1, 1);
347impl_pin!(PIO1_2, Bank::Bank1, 2);
348impl_pin!(PIO1_3, Bank::Bank1, 3);
349impl_pin!(PIO1_4, Bank::Bank1, 4);
350impl_pin!(PIO1_5, Bank::Bank1, 5);
351impl_pin!(PIO1_6, Bank::Bank1, 6);
352impl_pin!(PIO1_7, Bank::Bank1, 7);
353impl_pin!(PIO1_8, Bank::Bank1, 8);
354impl_pin!(PIO1_9, Bank::Bank1, 9);
355impl_pin!(PIO1_10, Bank::Bank1, 10);
356impl_pin!(PIO1_11, Bank::Bank1, 11);
357impl_pin!(PIO1_12, Bank::Bank1, 12);
358impl_pin!(PIO1_13, Bank::Bank1, 13);
359impl_pin!(PIO1_14, Bank::Bank1, 14);
360impl_pin!(PIO1_15, Bank::Bank1, 15);
361impl_pin!(PIO1_16, Bank::Bank1, 16);
362impl_pin!(PIO1_17, Bank::Bank1, 17);
363impl_pin!(PIO1_18, Bank::Bank1, 18);
364impl_pin!(PIO1_19, Bank::Bank1, 19);
365impl_pin!(PIO1_20, Bank::Bank1, 20);
366impl_pin!(PIO1_21, Bank::Bank1, 21);
367impl_pin!(PIO1_22, Bank::Bank1, 22);
368impl_pin!(PIO1_23, Bank::Bank1, 23);
369impl_pin!(PIO1_24, Bank::Bank1, 24);
370impl_pin!(PIO1_25, Bank::Bank1, 25);
371impl_pin!(PIO1_26, Bank::Bank1, 26);
372impl_pin!(PIO1_27, Bank::Bank1, 27);
373impl_pin!(PIO1_28, Bank::Bank1, 28);
374impl_pin!(PIO1_29, Bank::Bank1, 29);
375impl_pin!(PIO1_30, Bank::Bank1, 30);
376impl_pin!(PIO1_31, Bank::Bank1, 31);