diff options
| author | Dario Nieuwenhuis <[email protected]> | 2021-05-12 01:01:08 +0200 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2021-05-17 00:57:20 +0200 |
| commit | 97b01f1c4799a66bc2af596bfc5138ccf919a6de (patch) | |
| tree | a2d705f32bf9e5abea5cdb0239ec2b2b31092c4d | |
| parent | 92be72e0e3917782aade44e5b4cdbebb2dbab46e (diff) | |
nrf/gpiote: initialize automatically
| -rw-r--r-- | embassy-nrf-examples/src/bin/gpiote_channel.rs | 5 | ||||
| -rw-r--r-- | embassy-nrf-examples/src/bin/gpiote_port.rs | 13 | ||||
| -rw-r--r-- | embassy-nrf-examples/src/bin/ppi.rs | 7 | ||||
| -rw-r--r-- | embassy-nrf/src/chips/nrf52805.rs | 1 | ||||
| -rw-r--r-- | embassy-nrf/src/chips/nrf52810.rs | 1 | ||||
| -rw-r--r-- | embassy-nrf/src/chips/nrf52811.rs | 1 | ||||
| -rw-r--r-- | embassy-nrf/src/chips/nrf52820.rs | 1 | ||||
| -rw-r--r-- | embassy-nrf/src/chips/nrf52832.rs | 1 | ||||
| -rw-r--r-- | embassy-nrf/src/chips/nrf52833.rs | 1 | ||||
| -rw-r--r-- | embassy-nrf/src/chips/nrf52840.rs | 1 | ||||
| -rw-r--r-- | embassy-nrf/src/gpiote.rs | 41 | ||||
| -rw-r--r-- | embassy-nrf/src/system.rs | 3 |
12 files changed, 21 insertions, 55 deletions
diff --git a/embassy-nrf-examples/src/bin/gpiote_channel.rs b/embassy-nrf-examples/src/bin/gpiote_channel.rs index 9e653192b..ee670acd5 100644 --- a/embassy-nrf-examples/src/bin/gpiote_channel.rs +++ b/embassy-nrf-examples/src/bin/gpiote_channel.rs | |||
| @@ -18,30 +18,25 @@ use embassy_nrf::{interrupt, Peripherals}; | |||
| 18 | #[embassy::main] | 18 | #[embassy::main] |
| 19 | async fn main(spawner: Spawner) { | 19 | async fn main(spawner: Spawner) { |
| 20 | let p = Peripherals::take().unwrap(); | 20 | let p = Peripherals::take().unwrap(); |
| 21 | let g = gpiote::initialize(p.GPIOTE, interrupt::take!(GPIOTE)); | ||
| 22 | 21 | ||
| 23 | info!("Starting!"); | 22 | info!("Starting!"); |
| 24 | 23 | ||
| 25 | let ch1 = InputChannel::new( | 24 | let ch1 = InputChannel::new( |
| 26 | g, | ||
| 27 | p.GPIOTE_CH0, | 25 | p.GPIOTE_CH0, |
| 28 | Input::new(p.P0_11, Pull::Up), | 26 | Input::new(p.P0_11, Pull::Up), |
| 29 | InputChannelPolarity::HiToLo, | 27 | InputChannelPolarity::HiToLo, |
| 30 | ); | 28 | ); |
| 31 | let ch2 = InputChannel::new( | 29 | let ch2 = InputChannel::new( |
| 32 | g, | ||
| 33 | p.GPIOTE_CH1, | 30 | p.GPIOTE_CH1, |
| 34 | Input::new(p.P0_12, Pull::Up), | 31 | Input::new(p.P0_12, Pull::Up), |
| 35 | InputChannelPolarity::LoToHi, | 32 | InputChannelPolarity::LoToHi, |
| 36 | ); | 33 | ); |
| 37 | let ch3 = InputChannel::new( | 34 | let ch3 = InputChannel::new( |
| 38 | g, | ||
| 39 | p.GPIOTE_CH2, | 35 | p.GPIOTE_CH2, |
| 40 | Input::new(p.P0_24, Pull::Up), | 36 | Input::new(p.P0_24, Pull::Up), |
| 41 | InputChannelPolarity::Toggle, | 37 | InputChannelPolarity::Toggle, |
| 42 | ); | 38 | ); |
| 43 | let ch4 = InputChannel::new( | 39 | let ch4 = InputChannel::new( |
| 44 | g, | ||
| 45 | p.GPIOTE_CH3, | 40 | p.GPIOTE_CH3, |
| 46 | Input::new(p.P0_25, Pull::Up), | 41 | Input::new(p.P0_25, Pull::Up), |
| 47 | InputChannelPolarity::Toggle, | 42 | InputChannelPolarity::Toggle, |
diff --git a/embassy-nrf-examples/src/bin/gpiote_port.rs b/embassy-nrf-examples/src/bin/gpiote_port.rs index 386806dfc..717d3398b 100644 --- a/embassy-nrf-examples/src/bin/gpiote_port.rs +++ b/embassy-nrf-examples/src/bin/gpiote_port.rs | |||
| @@ -8,12 +8,11 @@ | |||
| 8 | #[path = "../example_common.rs"] | 8 | #[path = "../example_common.rs"] |
| 9 | mod example_common; | 9 | mod example_common; |
| 10 | 10 | ||
| 11 | use core::pin::Pin; | ||
| 12 | use defmt::panic; | 11 | use defmt::panic; |
| 13 | use embassy::executor::Spawner; | 12 | use embassy::executor::Spawner; |
| 14 | use embassy::traits::gpio::{WaitForHigh, WaitForLow}; | 13 | use embassy::traits::gpio::{WaitForHigh, WaitForLow}; |
| 15 | use embassy_nrf::gpio::{AnyPin, Input, Pin as _, Pull}; | 14 | use embassy_nrf::gpio::{AnyPin, Input, Pin as _, Pull}; |
| 16 | use embassy_nrf::gpiote::{self, PortInput}; | 15 | use embassy_nrf::gpiote::PortInput; |
| 17 | use embassy_nrf::interrupt; | 16 | use embassy_nrf::interrupt; |
| 18 | use embassy_nrf::Peripherals; | 17 | use embassy_nrf::Peripherals; |
| 19 | use example_common::*; | 18 | use example_common::*; |
| @@ -32,12 +31,12 @@ async fn button_task(n: usize, mut pin: PortInput<'static, AnyPin>) { | |||
| 32 | async fn main(spawner: Spawner) { | 31 | async fn main(spawner: Spawner) { |
| 33 | let p = Peripherals::take().unwrap(); | 32 | let p = Peripherals::take().unwrap(); |
| 34 | 33 | ||
| 35 | let g = gpiote::initialize(p.GPIOTE, interrupt::take!(GPIOTE)); | 34 | info!("Starting!"); |
| 36 | 35 | ||
| 37 | let btn1 = PortInput::new(g, Input::new(p.P0_11.degrade(), Pull::Up)); | 36 | let btn1 = PortInput::new(Input::new(p.P0_11.degrade(), Pull::Up)); |
| 38 | let btn2 = PortInput::new(g, Input::new(p.P0_12.degrade(), Pull::Up)); | 37 | let btn2 = PortInput::new(Input::new(p.P0_12.degrade(), Pull::Up)); |
| 39 | let btn3 = PortInput::new(g, Input::new(p.P0_24.degrade(), Pull::Up)); | 38 | let btn3 = PortInput::new(Input::new(p.P0_24.degrade(), Pull::Up)); |
| 40 | let btn4 = PortInput::new(g, Input::new(p.P0_25.degrade(), Pull::Up)); | 39 | let btn4 = PortInput::new(Input::new(p.P0_25.degrade(), Pull::Up)); |
| 41 | 40 | ||
| 42 | spawner.spawn(button_task(1, btn1)).unwrap(); | 41 | spawner.spawn(button_task(1, btn1)).unwrap(); |
| 43 | spawner.spawn(button_task(2, btn2)).unwrap(); | 42 | spawner.spawn(button_task(2, btn2)).unwrap(); |
diff --git a/embassy-nrf-examples/src/bin/ppi.rs b/embassy-nrf-examples/src/bin/ppi.rs index aeda76f21..3c39e032e 100644 --- a/embassy-nrf-examples/src/bin/ppi.rs +++ b/embassy-nrf-examples/src/bin/ppi.rs | |||
| @@ -21,44 +21,37 @@ use gpiote::{OutputChannel, OutputChannelPolarity}; | |||
| 21 | #[embassy::main] | 21 | #[embassy::main] |
| 22 | async fn main(spawner: Spawner) { | 22 | async fn main(spawner: Spawner) { |
| 23 | let p = Peripherals::take().unwrap(); | 23 | let p = Peripherals::take().unwrap(); |
| 24 | let g = gpiote::initialize(p.GPIOTE, interrupt::take!(GPIOTE)); | ||
| 25 | 24 | ||
| 26 | info!("Starting!"); | 25 | info!("Starting!"); |
| 27 | 26 | ||
| 28 | let button1 = InputChannel::new( | 27 | let button1 = InputChannel::new( |
| 29 | g, | ||
| 30 | p.GPIOTE_CH0, | 28 | p.GPIOTE_CH0, |
| 31 | Input::new(p.P0_11, Pull::Up), | 29 | Input::new(p.P0_11, Pull::Up), |
| 32 | InputChannelPolarity::HiToLo, | 30 | InputChannelPolarity::HiToLo, |
| 33 | ); | 31 | ); |
| 34 | let button2 = InputChannel::new( | 32 | let button2 = InputChannel::new( |
| 35 | g, | ||
| 36 | p.GPIOTE_CH1, | 33 | p.GPIOTE_CH1, |
| 37 | Input::new(p.P0_12, Pull::Up), | 34 | Input::new(p.P0_12, Pull::Up), |
| 38 | InputChannelPolarity::HiToLo, | 35 | InputChannelPolarity::HiToLo, |
| 39 | ); | 36 | ); |
| 40 | let button3 = InputChannel::new( | 37 | let button3 = InputChannel::new( |
| 41 | g, | ||
| 42 | p.GPIOTE_CH2, | 38 | p.GPIOTE_CH2, |
| 43 | Input::new(p.P0_24, Pull::Up), | 39 | Input::new(p.P0_24, Pull::Up), |
| 44 | InputChannelPolarity::HiToLo, | 40 | InputChannelPolarity::HiToLo, |
| 45 | ); | 41 | ); |
| 46 | let button4 = InputChannel::new( | 42 | let button4 = InputChannel::new( |
| 47 | g, | ||
| 48 | p.GPIOTE_CH3, | 43 | p.GPIOTE_CH3, |
| 49 | Input::new(p.P0_25, Pull::Up), | 44 | Input::new(p.P0_25, Pull::Up), |
| 50 | InputChannelPolarity::HiToLo, | 45 | InputChannelPolarity::HiToLo, |
| 51 | ); | 46 | ); |
| 52 | 47 | ||
| 53 | let led1 = OutputChannel::new( | 48 | let led1 = OutputChannel::new( |
| 54 | g, | ||
| 55 | p.GPIOTE_CH4, | 49 | p.GPIOTE_CH4, |
| 56 | Output::new(p.P0_13, Level::Low, OutputDrive::Standard), | 50 | Output::new(p.P0_13, Level::Low, OutputDrive::Standard), |
| 57 | OutputChannelPolarity::Toggle, | 51 | OutputChannelPolarity::Toggle, |
| 58 | ); | 52 | ); |
| 59 | 53 | ||
| 60 | let led2 = OutputChannel::new( | 54 | let led2 = OutputChannel::new( |
| 61 | g, | ||
| 62 | p.GPIOTE_CH5, | 55 | p.GPIOTE_CH5, |
| 63 | Output::new(p.P0_14, Level::Low, OutputDrive::Standard), | 56 | Output::new(p.P0_14, Level::Low, OutputDrive::Standard), |
| 64 | OutputChannelPolarity::Toggle, | 57 | OutputChannelPolarity::Toggle, |
diff --git a/embassy-nrf/src/chips/nrf52805.rs b/embassy-nrf/src/chips/nrf52805.rs index 8b2ba7c00..272cabc06 100644 --- a/embassy-nrf/src/chips/nrf52805.rs +++ b/embassy-nrf/src/chips/nrf52805.rs | |||
| @@ -24,7 +24,6 @@ embassy_extras::peripherals! { | |||
| 24 | TIMER2, | 24 | TIMER2, |
| 25 | 25 | ||
| 26 | // GPIOTE | 26 | // GPIOTE |
| 27 | GPIOTE, | ||
| 28 | GPIOTE_CH0, | 27 | GPIOTE_CH0, |
| 29 | GPIOTE_CH1, | 28 | GPIOTE_CH1, |
| 30 | GPIOTE_CH2, | 29 | GPIOTE_CH2, |
diff --git a/embassy-nrf/src/chips/nrf52810.rs b/embassy-nrf/src/chips/nrf52810.rs index 9f3ed9cf3..2e77a2fad 100644 --- a/embassy-nrf/src/chips/nrf52810.rs +++ b/embassy-nrf/src/chips/nrf52810.rs | |||
| @@ -24,7 +24,6 @@ embassy_extras::peripherals! { | |||
| 24 | TIMER2, | 24 | TIMER2, |
| 25 | 25 | ||
| 26 | // GPIOTE | 26 | // GPIOTE |
| 27 | GPIOTE, | ||
| 28 | GPIOTE_CH0, | 27 | GPIOTE_CH0, |
| 29 | GPIOTE_CH1, | 28 | GPIOTE_CH1, |
| 30 | GPIOTE_CH2, | 29 | GPIOTE_CH2, |
diff --git a/embassy-nrf/src/chips/nrf52811.rs b/embassy-nrf/src/chips/nrf52811.rs index 6728f6a41..b3ad5817a 100644 --- a/embassy-nrf/src/chips/nrf52811.rs +++ b/embassy-nrf/src/chips/nrf52811.rs | |||
| @@ -24,7 +24,6 @@ embassy_extras::peripherals! { | |||
| 24 | TIMER2, | 24 | TIMER2, |
| 25 | 25 | ||
| 26 | // GPIOTE | 26 | // GPIOTE |
| 27 | GPIOTE, | ||
| 28 | GPIOTE_CH0, | 27 | GPIOTE_CH0, |
| 29 | GPIOTE_CH1, | 28 | GPIOTE_CH1, |
| 30 | GPIOTE_CH2, | 29 | GPIOTE_CH2, |
diff --git a/embassy-nrf/src/chips/nrf52820.rs b/embassy-nrf/src/chips/nrf52820.rs index 2f9eb5f53..d0a8b9e9a 100644 --- a/embassy-nrf/src/chips/nrf52820.rs +++ b/embassy-nrf/src/chips/nrf52820.rs | |||
| @@ -25,7 +25,6 @@ embassy_extras::peripherals! { | |||
| 25 | TIMER3, | 25 | TIMER3, |
| 26 | 26 | ||
| 27 | // GPIOTE | 27 | // GPIOTE |
| 28 | GPIOTE, | ||
| 29 | GPIOTE_CH0, | 28 | GPIOTE_CH0, |
| 30 | GPIOTE_CH1, | 29 | GPIOTE_CH1, |
| 31 | GPIOTE_CH2, | 30 | GPIOTE_CH2, |
diff --git a/embassy-nrf/src/chips/nrf52832.rs b/embassy-nrf/src/chips/nrf52832.rs index 015bc51f8..ed94430e4 100644 --- a/embassy-nrf/src/chips/nrf52832.rs +++ b/embassy-nrf/src/chips/nrf52832.rs | |||
| @@ -29,7 +29,6 @@ embassy_extras::peripherals! { | |||
| 29 | TIMER4, | 29 | TIMER4, |
| 30 | 30 | ||
| 31 | // GPIOTE | 31 | // GPIOTE |
| 32 | GPIOTE, | ||
| 33 | GPIOTE_CH0, | 32 | GPIOTE_CH0, |
| 34 | GPIOTE_CH1, | 33 | GPIOTE_CH1, |
| 35 | GPIOTE_CH2, | 34 | GPIOTE_CH2, |
diff --git a/embassy-nrf/src/chips/nrf52833.rs b/embassy-nrf/src/chips/nrf52833.rs index 404883934..080157d69 100644 --- a/embassy-nrf/src/chips/nrf52833.rs +++ b/embassy-nrf/src/chips/nrf52833.rs | |||
| @@ -30,7 +30,6 @@ embassy_extras::peripherals! { | |||
| 30 | TIMER4, | 30 | TIMER4, |
| 31 | 31 | ||
| 32 | // GPIOTE | 32 | // GPIOTE |
| 33 | GPIOTE, | ||
| 34 | GPIOTE_CH0, | 33 | GPIOTE_CH0, |
| 35 | GPIOTE_CH1, | 34 | GPIOTE_CH1, |
| 36 | GPIOTE_CH2, | 35 | GPIOTE_CH2, |
diff --git a/embassy-nrf/src/chips/nrf52840.rs b/embassy-nrf/src/chips/nrf52840.rs index 26dfc7e8f..06b508d89 100644 --- a/embassy-nrf/src/chips/nrf52840.rs +++ b/embassy-nrf/src/chips/nrf52840.rs | |||
| @@ -33,7 +33,6 @@ embassy_extras::peripherals! { | |||
| 33 | TIMER4, | 33 | TIMER4, |
| 34 | 34 | ||
| 35 | // GPIOTE | 35 | // GPIOTE |
| 36 | GPIOTE, | ||
| 37 | GPIOTE_CH0, | 36 | GPIOTE_CH0, |
| 38 | GPIOTE_CH1, | 37 | GPIOTE_CH1, |
| 39 | GPIOTE_CH2, | 38 | GPIOTE_CH2, |
diff --git a/embassy-nrf/src/gpiote.rs b/embassy-nrf/src/gpiote.rs index bfa5ba68b..f322c1694 100644 --- a/embassy-nrf/src/gpiote.rs +++ b/embassy-nrf/src/gpiote.rs | |||
| @@ -2,7 +2,7 @@ use core::convert::Infallible; | |||
| 2 | use core::future::Future; | 2 | use core::future::Future; |
| 3 | use core::marker::PhantomData; | 3 | use core::marker::PhantomData; |
| 4 | use core::task::{Context, Poll}; | 4 | use core::task::{Context, Poll}; |
| 5 | use embassy::interrupt::InterruptExt; | 5 | use embassy::interrupt::{Interrupt, InterruptExt}; |
| 6 | use embassy::traits::gpio::{WaitForAnyEdge, WaitForHigh, WaitForLow}; | 6 | use embassy::traits::gpio::{WaitForAnyEdge, WaitForHigh, WaitForLow}; |
| 7 | use embassy::util::AtomicWaker; | 7 | use embassy::util::AtomicWaker; |
| 8 | use embassy_extras::impl_unborrow; | 8 | use embassy_extras::impl_unborrow; |
| @@ -40,15 +40,7 @@ pub enum OutputChannelPolarity { | |||
| 40 | Toggle, | 40 | Toggle, |
| 41 | } | 41 | } |
| 42 | 42 | ||
| 43 | /// Token indicating GPIOTE has been correctly initialized. | 43 | pub(crate) fn init() { |
| 44 | /// | ||
| 45 | /// This is not an owned singleton, it is Copy. Drivers that make use of GPIOTE require it. | ||
| 46 | #[derive(Clone, Copy)] | ||
| 47 | pub struct Initialized { | ||
| 48 | _private: (), | ||
| 49 | } | ||
| 50 | |||
| 51 | pub fn initialize(_gpiote: peripherals::GPIOTE, irq: interrupt::GPIOTE) -> Initialized { | ||
| 52 | #[cfg(any(feature = "nrf52833", feature = "nrf52840"))] | 44 | #[cfg(any(feature = "nrf52833", feature = "nrf52840"))] |
| 53 | let ports = unsafe { &[&*pac::P0::ptr(), &*pac::P1::ptr()] }; | 45 | let ports = unsafe { &[&*pac::P0::ptr(), &*pac::P1::ptr()] }; |
| 54 | #[cfg(not(any(feature = "nrf52833", feature = "nrf52840")))] | 46 | #[cfg(not(any(feature = "nrf52833", feature = "nrf52840")))] |
| @@ -62,17 +54,18 @@ pub fn initialize(_gpiote: peripherals::GPIOTE, irq: interrupt::GPIOTE) -> Initi | |||
| 62 | } | 54 | } |
| 63 | 55 | ||
| 64 | // Enable interrupts | 56 | // Enable interrupts |
| 65 | let g = unsafe { &*pac::GPIOTE::ptr() }; | 57 | |
| 66 | g.events_port.write(|w| w); | 58 | let irq = unsafe { interrupt::GPIOTE::steal() }; |
| 67 | g.intenset.write(|w| w.port().set()); | ||
| 68 | irq.set_handler(on_irq); | ||
| 69 | irq.unpend(); | 59 | irq.unpend(); |
| 70 | irq.enable(); | 60 | irq.enable(); |
| 71 | 61 | ||
| 72 | Initialized { _private: () } | 62 | let g = unsafe { &*pac::GPIOTE::ptr() }; |
| 63 | g.events_port.write(|w| w); | ||
| 64 | g.intenset.write(|w| w.port().set()); | ||
| 73 | } | 65 | } |
| 74 | 66 | ||
| 75 | unsafe fn on_irq(_ctx: *mut ()) { | 67 | #[interrupt] |
| 68 | unsafe fn GPIOTE() { | ||
| 76 | let g = &*pac::GPIOTE::ptr(); | 69 | let g = &*pac::GPIOTE::ptr(); |
| 77 | 70 | ||
| 78 | for i in 0..CHANNEL_COUNT { | 71 | for i in 0..CHANNEL_COUNT { |
| @@ -133,12 +126,7 @@ impl<'d, C: Channel, T: GpioPin> Drop for InputChannel<'d, C, T> { | |||
| 133 | } | 126 | } |
| 134 | 127 | ||
| 135 | impl<'d, C: Channel, T: GpioPin> InputChannel<'d, C, T> { | 128 | impl<'d, C: Channel, T: GpioPin> InputChannel<'d, C, T> { |
| 136 | pub fn new( | 129 | pub fn new(ch: C, pin: Input<'d, T>, polarity: InputChannelPolarity) -> Self { |
| 137 | _init: Initialized, | ||
| 138 | ch: C, | ||
| 139 | pin: Input<'d, T>, | ||
| 140 | polarity: InputChannelPolarity, | ||
| 141 | ) -> Self { | ||
| 142 | let g = unsafe { &*pac::GPIOTE::ptr() }; | 130 | let g = unsafe { &*pac::GPIOTE::ptr() }; |
| 143 | let num = ch.number(); | 131 | let num = ch.number(); |
| 144 | 132 | ||
| @@ -217,12 +205,7 @@ impl<'d, C: Channel, T: GpioPin> Drop for OutputChannel<'d, C, T> { | |||
| 217 | } | 205 | } |
| 218 | 206 | ||
| 219 | impl<'d, C: Channel, T: GpioPin> OutputChannel<'d, C, T> { | 207 | impl<'d, C: Channel, T: GpioPin> OutputChannel<'d, C, T> { |
| 220 | pub fn new( | 208 | pub fn new(ch: C, pin: Output<'d, T>, polarity: OutputChannelPolarity) -> Self { |
| 221 | _init: Initialized, | ||
| 222 | ch: C, | ||
| 223 | pin: Output<'d, T>, | ||
| 224 | polarity: OutputChannelPolarity, | ||
| 225 | ) -> Self { | ||
| 226 | let g = unsafe { &*pac::GPIOTE::ptr() }; | 209 | let g = unsafe { &*pac::GPIOTE::ptr() }; |
| 227 | let num = ch.number(); | 210 | let num = ch.number(); |
| 228 | 211 | ||
| @@ -297,7 +280,7 @@ pub struct PortInput<'d, T: GpioPin> { | |||
| 297 | impl<'d, T: GpioPin> Unpin for PortInput<'d, T> {} | 280 | impl<'d, T: GpioPin> Unpin for PortInput<'d, T> {} |
| 298 | 281 | ||
| 299 | impl<'d, T: GpioPin> PortInput<'d, T> { | 282 | impl<'d, T: GpioPin> PortInput<'d, T> { |
| 300 | pub fn new(_init: Initialized, pin: Input<'d, T>) -> Self { | 283 | pub fn new(pin: Input<'d, T>) -> Self { |
| 301 | Self { pin } | 284 | Self { pin } |
| 302 | } | 285 | } |
| 303 | } | 286 | } |
diff --git a/embassy-nrf/src/system.rs b/embassy-nrf/src/system.rs index 5d36e66fa..e358d2c38 100644 --- a/embassy-nrf/src/system.rs +++ b/embassy-nrf/src/system.rs | |||
| @@ -73,4 +73,7 @@ pub unsafe fn configure(config: Config) { | |||
| 73 | r.events_lfclkstarted.write(|w| unsafe { w.bits(0) }); | 73 | r.events_lfclkstarted.write(|w| unsafe { w.bits(0) }); |
| 74 | r.tasks_lfclkstart.write(|w| unsafe { w.bits(1) }); | 74 | r.tasks_lfclkstart.write(|w| unsafe { w.bits(1) }); |
| 75 | while r.events_lfclkstarted.read().bits() == 0 {} | 75 | while r.events_lfclkstarted.read().bits() == 0 {} |
| 76 | |||
| 77 | // Init GPIOTE | ||
| 78 | crate::gpiote::init(); | ||
| 76 | } | 79 | } |
