Skip to content

Commit 265a493

Browse files
committed
extend input pull test
also check the input state of the pin configured in pull up/down mode
1 parent 3da4ff6 commit 265a493

File tree

1 file changed

+33
-9
lines changed

1 file changed

+33
-9
lines changed

nrf52840-hal-tests/tests/gpio-input-pull.rs

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use nrf52840_hal::gpio::{Floating, Input, Pin};
1414

1515
struct State {
1616
input_pin: Pin<Input<Floating>>,
17-
pull_pin: Option<Pin<Input<Floating>>>,
17+
puller_pin: Option<Pin<Input<Floating>>>,
1818
}
1919

2020
#[defmt_test::tests]
@@ -31,33 +31,57 @@ mod tests {
3131
let port0 = p0::Parts::new(p.P0);
3232

3333
let input_pin = port0.p0_28.into_floating_input().degrade();
34-
let pull_pin = Some(port0.p0_29.into_floating_input().degrade());
34+
let puller_pin = Some(port0.p0_29.into_floating_input().degrade());
3535

3636
State {
3737
input_pin,
38-
pull_pin,
38+
puller_pin,
3939
}
4040
}
4141

4242
#[test]
4343
fn pulldown_is_low(state: &mut State) {
44-
let pull_pin = unwrap!(state.pull_pin.take());
44+
let puller_pin = unwrap!(state.puller_pin.take());
4545

46-
let pulldown_pin = pull_pin.into_pulldown_input();
46+
let pulldown_pin = puller_pin.into_pulldown_input();
47+
// GPIO re-configuration is not instantaneous so a delay is needed
48+
asm::delay(100);
49+
assert!(pulldown_pin.is_low().unwrap());
50+
51+
state.puller_pin = Some(pulldown_pin.into_floating_input());
52+
}
53+
54+
#[test]
55+
fn pulldown_drives_low(state: &mut State) {
56+
let puller_pin = unwrap!(state.puller_pin.take());
57+
58+
let pulldown_pin = puller_pin.into_pulldown_input();
4759
assert!(state.input_pin.is_low().unwrap());
4860

49-
state.pull_pin = Some(pulldown_pin.into_floating_input());
61+
state.puller_pin = Some(pulldown_pin.into_floating_input());
5062
}
5163

5264
#[test]
5365
fn pullup_is_high(state: &mut State) {
54-
let pull_pin = unwrap!(state.pull_pin.take());
66+
let puller_pin = unwrap!(state.puller_pin.take());
67+
68+
let pullup_pin = puller_pin.into_pullup_input();
69+
// GPIO re-configuration is not instantaneous so a delay is needed
70+
asm::delay(100);
71+
assert!(pullup_pin.is_high().unwrap());
72+
73+
state.puller_pin = Some(pullup_pin.into_floating_input());
74+
}
75+
76+
#[test]
77+
fn pullup_drives_high(state: &mut State) {
78+
let puller_pin = unwrap!(state.puller_pin.take());
5579

56-
let pullup_pin = pull_pin.into_pullup_input();
80+
let pullup_pin = puller_pin.into_pullup_input();
5781
// GPIO re-configuration is not instantaneous so a delay is needed
5882
asm::delay(100);
5983
assert!(state.input_pin.is_high().unwrap());
6084

61-
state.pull_pin = Some(pullup_pin.into_floating_input());
85+
state.puller_pin = Some(pullup_pin.into_floating_input());
6286
}
6387
}

0 commit comments

Comments
 (0)