Skip to content

Commit 0da9989

Browse files
Jonas Schievinkjamesmunns
authored andcommitted
Make GPIOs start in a Disconnected state
1 parent 7cfed3c commit 0da9989

File tree

2 files changed

+79
-68
lines changed

2 files changed

+79
-68
lines changed

nrf-hal-common/src/gpio.rs

Lines changed: 52 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
use core::marker::PhantomData;
22

3+
/// Disconnected pin in input mode (type state, reset value).
4+
pub struct Disconnected;
5+
36
/// Input mode (type state).
47
pub struct Input<MODE> {
58
_mode: PhantomData<MODE>,
@@ -328,6 +331,7 @@ macro_rules! gpio {
328331
Port,
329332

330333
Floating,
334+
Disconnected,
331335
Input,
332336
Level,
333337
OpenDrain,
@@ -548,58 +552,58 @@ macro_rules! gpio {
548552
// 32-bit GPIO port (P0)
549553
// ===========================================================================
550554
gpio!(P0, p0, p0, Port::Port0, [
551-
P0_00: (p0_00, 0, Input<Floating>),
552-
P0_01: (p0_01, 1, Input<Floating>),
553-
P0_02: (p0_02, 2, Input<Floating>),
554-
P0_03: (p0_03, 3, Input<Floating>),
555-
P0_04: (p0_04, 4, Input<Floating>),
556-
P0_05: (p0_05, 5, Input<Floating>),
557-
P0_06: (p0_06, 6, Input<Floating>),
558-
P0_07: (p0_07, 7, Input<Floating>),
559-
P0_08: (p0_08, 8, Input<Floating>),
560-
P0_09: (p0_09, 9, Input<Floating>),
561-
P0_10: (p0_10, 10, Input<Floating>),
562-
P0_11: (p0_11, 11, Input<Floating>),
563-
P0_12: (p0_12, 12, Input<Floating>),
564-
P0_13: (p0_13, 13, Input<Floating>),
565-
P0_14: (p0_14, 14, Input<Floating>),
566-
P0_15: (p0_15, 15, Input<Floating>),
567-
P0_16: (p0_16, 16, Input<Floating>),
568-
P0_17: (p0_17, 17, Input<Floating>),
569-
P0_18: (p0_18, 18, Input<Floating>),
570-
P0_19: (p0_19, 19, Input<Floating>),
571-
P0_20: (p0_20, 20, Input<Floating>),
572-
P0_21: (p0_21, 21, Input<Floating>),
573-
P0_22: (p0_22, 22, Input<Floating>),
574-
P0_23: (p0_23, 23, Input<Floating>),
575-
P0_24: (p0_24, 24, Input<Floating>),
576-
P0_25: (p0_25, 25, Input<Floating>),
577-
P0_26: (p0_26, 26, Input<Floating>),
578-
P0_27: (p0_27, 27, Input<Floating>),
579-
P0_28: (p0_28, 28, Input<Floating>),
580-
P0_29: (p0_29, 29, Input<Floating>),
581-
P0_30: (p0_30, 30, Input<Floating>),
582-
P0_31: (p0_31, 31, Input<Floating>),
555+
P0_00: (p0_00, 0, Input<Disconnected>),
556+
P0_01: (p0_01, 1, Input<Disconnected>),
557+
P0_02: (p0_02, 2, Input<Disconnected>),
558+
P0_03: (p0_03, 3, Input<Disconnected>),
559+
P0_04: (p0_04, 4, Input<Disconnected>),
560+
P0_05: (p0_05, 5, Input<Disconnected>),
561+
P0_06: (p0_06, 6, Input<Disconnected>),
562+
P0_07: (p0_07, 7, Input<Disconnected>),
563+
P0_08: (p0_08, 8, Input<Disconnected>),
564+
P0_09: (p0_09, 9, Input<Disconnected>),
565+
P0_10: (p0_10, 10, Input<Disconnected>),
566+
P0_11: (p0_11, 11, Input<Disconnected>),
567+
P0_12: (p0_12, 12, Input<Disconnected>),
568+
P0_13: (p0_13, 13, Input<Disconnected>),
569+
P0_14: (p0_14, 14, Input<Disconnected>),
570+
P0_15: (p0_15, 15, Input<Disconnected>),
571+
P0_16: (p0_16, 16, Input<Disconnected>),
572+
P0_17: (p0_17, 17, Input<Disconnected>),
573+
P0_18: (p0_18, 18, Input<Disconnected>),
574+
P0_19: (p0_19, 19, Input<Disconnected>),
575+
P0_20: (p0_20, 20, Input<Disconnected>),
576+
P0_21: (p0_21, 21, Input<Disconnected>),
577+
P0_22: (p0_22, 22, Input<Disconnected>),
578+
P0_23: (p0_23, 23, Input<Disconnected>),
579+
P0_24: (p0_24, 24, Input<Disconnected>),
580+
P0_25: (p0_25, 25, Input<Disconnected>),
581+
P0_26: (p0_26, 26, Input<Disconnected>),
582+
P0_27: (p0_27, 27, Input<Disconnected>),
583+
P0_28: (p0_28, 28, Input<Disconnected>),
584+
P0_29: (p0_29, 29, Input<Disconnected>),
585+
P0_30: (p0_30, 30, Input<Disconnected>),
586+
P0_31: (p0_31, 31, Input<Disconnected>),
583587
]);
584588

585589
// The p1 types are present in the p0 module generated from the
586590
// svd, but we want to export them in a p1 module from this crate.
587591
#[cfg(any(feature = "52833", feature = "52840"))]
588592
gpio!(P1, p0, p1, Port::Port1, [
589-
P1_00: (p1_00, 0, Input<Floating>),
590-
P1_01: (p1_01, 1, Input<Floating>),
591-
P1_02: (p1_02, 2, Input<Floating>),
592-
P1_03: (p1_03, 3, Input<Floating>),
593-
P1_04: (p1_04, 4, Input<Floating>),
594-
P1_05: (p1_05, 5, Input<Floating>),
595-
P1_06: (p1_06, 6, Input<Floating>),
596-
P1_07: (p1_07, 7, Input<Floating>),
597-
P1_08: (p1_08, 8, Input<Floating>),
598-
P1_09: (p1_09, 9, Input<Floating>),
599-
P1_10: (p1_10, 10, Input<Floating>),
600-
P1_11: (p1_11, 11, Input<Floating>),
601-
P1_12: (p1_12, 12, Input<Floating>),
602-
P1_13: (p1_13, 13, Input<Floating>),
603-
P1_14: (p1_14, 14, Input<Floating>),
604-
P1_15: (p1_15, 15, Input<Floating>),
593+
P1_00: (p1_00, 0, Input<Disconnected>),
594+
P1_01: (p1_01, 1, Input<Disconnected>),
595+
P1_02: (p1_02, 2, Input<Disconnected>),
596+
P1_03: (p1_03, 3, Input<Disconnected>),
597+
P1_04: (p1_04, 4, Input<Disconnected>),
598+
P1_05: (p1_05, 5, Input<Disconnected>),
599+
P1_06: (p1_06, 6, Input<Disconnected>),
600+
P1_07: (p1_07, 7, Input<Disconnected>),
601+
P1_08: (p1_08, 8, Input<Disconnected>),
602+
P1_09: (p1_09, 9, Input<Disconnected>),
603+
P1_10: (p1_10, 10, Input<Disconnected>),
604+
P1_11: (p1_11, 11, Input<Disconnected>),
605+
P1_12: (p1_12, 12, Input<Disconnected>),
606+
P1_13: (p1_13, 13, Input<Disconnected>),
607+
P1_14: (p1_14, 14, Input<Disconnected>),
608+
P1_15: (p1_15, 15, Input<Disconnected>),
605609
]);

nrf-hal-common/src/saadc.rs

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ use crate::pac::{saadc_ns as saadc, SAADC_NS as SAADC};
3232
#[cfg(not(feature = "9160"))]
3333
use crate::pac::{saadc, SAADC};
3434

35-
use crate::gpio::{Floating, Input};
3635
use core::{
3736
hint::unreachable_unchecked,
3837
sync::atomic::{compiler_fence, Ordering::SeqCst},
@@ -217,9 +216,9 @@ where
217216
}
218217

219218
macro_rules! channel_mappings {
220-
($($n:expr => $pin:path),*) => {
219+
( $($n:expr => $pin:ident,)*) => {
221220
$(
222-
impl Channel<Saadc> for $pin {
221+
impl<STATE> Channel<Saadc> for crate::gpio::p0::$pin<STATE> {
223222
type ID = u8;
224223

225224
fn channel() -> <Self as embedded_hal::adc::Channel<Saadc>>::ID {
@@ -232,27 +231,35 @@ macro_rules! channel_mappings {
232231

233232
#[cfg(feature = "9160")]
234233
channel_mappings! {
235-
0 => crate::gpio::p0::P0_13<Input<Floating>>,
236-
1 => crate::gpio::p0::P0_14<Input<Floating>>,
237-
2 => crate::gpio::p0::P0_15<Input<Floating>>,
238-
3 => crate::gpio::p0::P0_16<Input<Floating>>,
239-
4 => crate::gpio::p0::P0_17<Input<Floating>>,
240-
5 => crate::gpio::p0::P0_18<Input<Floating>>,
241-
6 => crate::gpio::p0::P0_19<Input<Floating>>,
242-
7 => crate::gpio::p0::P0_20<Input<Floating>>
234+
0 => P0_13,
235+
1 => P0_14,
236+
2 => P0_15,
237+
3 => P0_16,
238+
4 => P0_17,
239+
5 => P0_18,
240+
6 => P0_19,
241+
7 => P0_20,
243242
}
244243

245244
#[cfg(not(feature = "9160"))]
246245
channel_mappings! {
247-
0 => crate::gpio::p0::P0_02<Input<Floating>>,
248-
1 => crate::gpio::p0::P0_03<Input<Floating>>,
249-
2 => crate::gpio::p0::P0_04<Input<Floating>>,
250-
3 => crate::gpio::p0::P0_05<Input<Floating>>,
251-
4 => crate::gpio::p0::P0_28<Input<Floating>>,
252-
5 => crate::gpio::p0::P0_29<Input<Floating>>,
253-
6 => crate::gpio::p0::P0_30<Input<Floating>>,
254-
7 => crate::gpio::p0::P0_31<Input<Floating>>,
255-
8 => InternalVdd
246+
0 => P0_02,
247+
1 => P0_03,
248+
2 => P0_04,
249+
3 => P0_05,
250+
4 => P0_28,
251+
5 => P0_29,
252+
6 => P0_30,
253+
7 => P0_31,
254+
}
255+
256+
#[cfg(not(feature = "9160"))]
257+
impl Channel<Saadc> for InternalVdd {
258+
type ID = u8;
259+
260+
fn channel() -> <Self as embedded_hal::adc::Channel<Saadc>>::ID {
261+
8
262+
}
256263
}
257264

258265
#[cfg(not(feature = "9160"))]

0 commit comments

Comments
 (0)