aboutsummaryrefslogtreecommitdiff
path: root/embassy-nrf/src
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2023-06-01 02:22:46 +0200
committerDario Nieuwenhuis <[email protected]>2023-06-01 03:25:19 +0200
commit404aa292890503806a32eac5ae518dbeeadd60eb (patch)
treeb02ef548d1a95999a05655dbee4938327d487238 /embassy-nrf/src
parent2a435e53b761182dabf9496963052f8323125f3a (diff)
cortex-m: remove owned interrupts.
Diffstat (limited to 'embassy-nrf/src')
-rw-r--r--embassy-nrf/src/buffered_uarte.rs8
-rw-r--r--embassy-nrf/src/gpiote.rs56
-rw-r--r--embassy-nrf/src/i2s.rs5
-rw-r--r--embassy-nrf/src/lib.rs2
-rw-r--r--embassy-nrf/src/pdm.rs6
-rw-r--r--embassy-nrf/src/qdec.rs7
-rw-r--r--embassy-nrf/src/qspi.rs6
-rw-r--r--embassy-nrf/src/rng.rs7
-rw-r--r--embassy-nrf/src/saadc.rs6
-rw-r--r--embassy-nrf/src/spim.rs6
-rw-r--r--embassy-nrf/src/spis.rs6
-rw-r--r--embassy-nrf/src/temp.rs7
-rw-r--r--embassy-nrf/src/time_driver.rs7
-rw-r--r--embassy-nrf/src/twim.rs6
-rw-r--r--embassy-nrf/src/twis.rs6
-rw-r--r--embassy-nrf/src/uarte.rs14
-rw-r--r--embassy-nrf/src/usb/mod.rs6
-rw-r--r--embassy-nrf/src/usb/vbus_detect.rs6
18 files changed, 79 insertions, 88 deletions
diff --git a/embassy-nrf/src/buffered_uarte.rs b/embassy-nrf/src/buffered_uarte.rs
index 4d053c023..b4fe2d874 100644
--- a/embassy-nrf/src/buffered_uarte.rs
+++ b/embassy-nrf/src/buffered_uarte.rs
@@ -24,7 +24,7 @@ pub use pac::uarte0::{baudrate::BAUDRATE_A as Baudrate, config::PARITY_A as Pari
24 24
25use crate::gpio::sealed::Pin; 25use crate::gpio::sealed::Pin;
26use crate::gpio::{self, AnyPin, Pin as GpioPin, PselBits}; 26use crate::gpio::{self, AnyPin, Pin as GpioPin, PselBits};
27use crate::interrupt::{self, InterruptExt}; 27use crate::interrupt::{self};
28use crate::ppi::{ 28use crate::ppi::{
29 self, AnyConfigurableChannel, AnyGroup, Channel, ConfigurableChannel, Event, Group, Ppi, PpiGroup, Task, 29 self, AnyConfigurableChannel, AnyGroup, Channel, ConfigurableChannel, Event, Group, Ppi, PpiGroup, Task,
30}; 30};
@@ -362,8 +362,8 @@ impl<'d, U: UarteInstance, T: TimerInstance> BufferedUarte<'d, U, T> {
362 ppi_ch2.disable(); 362 ppi_ch2.disable();
363 ppi_group.add_channel(&ppi_ch2); 363 ppi_group.add_channel(&ppi_ch2);
364 364
365 unsafe { U::Interrupt::steal() }.pend(); 365 U::Interrupt::pend();
366 unsafe { U::Interrupt::steal() }.enable(); 366 unsafe { U::Interrupt::enable() };
367 367
368 Self { 368 Self {
369 _peri: peri, 369 _peri: peri,
@@ -375,7 +375,7 @@ impl<'d, U: UarteInstance, T: TimerInstance> BufferedUarte<'d, U, T> {
375 } 375 }
376 376
377 fn pend_irq() { 377 fn pend_irq() {
378 unsafe { <U::Interrupt as Interrupt>::steal() }.pend() 378 U::Interrupt::pend()
379 } 379 }
380 380
381 /// Adjust the baud rate to the provided value. 381 /// Adjust the baud rate to the provided value.
diff --git a/embassy-nrf/src/gpiote.rs b/embassy-nrf/src/gpiote.rs
index 66c682b43..2ec5220a7 100644
--- a/embassy-nrf/src/gpiote.rs
+++ b/embassy-nrf/src/gpiote.rs
@@ -9,7 +9,7 @@ use embassy_sync::waitqueue::AtomicWaker;
9 9
10use crate::gpio::sealed::Pin as _; 10use crate::gpio::sealed::Pin as _;
11use crate::gpio::{AnyPin, Flex, Input, Output, Pin as GpioPin}; 11use crate::gpio::{AnyPin, Flex, Input, Output, Pin as GpioPin};
12use crate::interrupt::{Interrupt, InterruptExt}; 12use crate::interrupt::Interrupt;
13use crate::ppi::{Event, Task}; 13use crate::ppi::{Event, Task};
14use crate::{interrupt, pac, peripherals}; 14use crate::{interrupt, pac, peripherals};
15 15
@@ -74,42 +74,38 @@ pub(crate) fn init(irq_prio: crate::interrupt::Priority) {
74 } 74 }
75 75
76 // Enable interrupts 76 // Enable interrupts
77 cfg_if::cfg_if! { 77 #[cfg(any(feature = "nrf5340-app-s", feature = "nrf9160-s"))]
78 if #[cfg(any(feature="nrf5340-app-s", feature="nrf9160-s"))] { 78 type Irq = interrupt::GPIOTE0;
79 let irq = unsafe { interrupt::GPIOTE0::steal() }; 79 #[cfg(any(feature = "nrf5340-app-ns", feature = "nrf9160-ns"))]
80 } else if #[cfg(any(feature="nrf5340-app-ns", feature="nrf9160-ns"))] { 80 type Irq = interrupt::GPIOTE1;
81 let irq = unsafe { interrupt::GPIOTE1::steal() }; 81 #[cfg(any(feature = "_nrf52", feature = "nrf5340-net"))]
82 } else { 82 type Irq = interrupt::GPIOTE;
83 let irq = unsafe { interrupt::GPIOTE::steal() };
84 }
85 }
86 83
87 irq.unpend(); 84 Irq::unpend();
88 irq.set_priority(irq_prio); 85 Irq::set_priority(irq_prio);
89 irq.enable(); 86 unsafe { Irq::enable() };
90 87
91 let g = regs(); 88 let g = regs();
92 g.events_port.write(|w| w); 89 g.events_port.write(|w| w);
93 g.intenset.write(|w| w.port().set()); 90 g.intenset.write(|w| w.port().set());
94} 91}
95 92
96cfg_if::cfg_if! { 93#[cfg(any(feature = "nrf5340-app-s", feature = "nrf9160-s"))]
97 if #[cfg(any(feature="nrf5340-app-s", feature="nrf9160-s"))] { 94#[interrupt]
98 #[interrupt] 95fn GPIOTE0() {
99 fn GPIOTE0() { 96 unsafe { handle_gpiote_interrupt() };
100 unsafe { handle_gpiote_interrupt() }; 97}
101 } 98
102 } else if #[cfg(any(feature="nrf5340-app-ns", feature="nrf9160-ns"))] { 99#[cfg(any(feature = "nrf5340-app-ns", feature = "nrf9160-ns"))]
103 #[interrupt] 100#[interrupt]
104 fn GPIOTE1() { 101fn GPIOTE1() {
105 unsafe { handle_gpiote_interrupt() }; 102 unsafe { handle_gpiote_interrupt() };
106 } 103}
107 } else { 104
108 #[interrupt] 105#[cfg(any(feature = "_nrf52", feature = "nrf5340-net"))]
109 fn GPIOTE() { 106#[interrupt]
110 unsafe { handle_gpiote_interrupt() }; 107fn GPIOTE() {
111 } 108 unsafe { handle_gpiote_interrupt() };
112 }
113} 109}
114 110
115unsafe fn handle_gpiote_interrupt() { 111unsafe fn handle_gpiote_interrupt() {
diff --git a/embassy-nrf/src/i2s.rs b/embassy-nrf/src/i2s.rs
index 8a1188ce4..13db77d3b 100644
--- a/embassy-nrf/src/i2s.rs
+++ b/embassy-nrf/src/i2s.rs
@@ -9,7 +9,6 @@ use core::ops::{Deref, DerefMut};
9use core::sync::atomic::{compiler_fence, Ordering}; 9use core::sync::atomic::{compiler_fence, Ordering};
10use core::task::Poll; 10use core::task::Poll;
11 11
12use embassy_cortex_m::interrupt::InterruptExt;
13use embassy_hal_common::drop::OnDrop; 12use embassy_hal_common::drop::OnDrop;
14use embassy_hal_common::{into_ref, PeripheralRef}; 13use embassy_hal_common::{into_ref, PeripheralRef};
15 14
@@ -564,8 +563,8 @@ impl<'d, T: Instance> I2S<'d, T> {
564 } 563 }
565 564
566 fn setup_interrupt(&self) { 565 fn setup_interrupt(&self) {
567 unsafe { T::Interrupt::steal() }.unpend(); 566 T::Interrupt::unpend();
568 unsafe { T::Interrupt::steal() }.enable(); 567 unsafe { T::Interrupt::enable() };
569 568
570 let device = Device::<T>::new(); 569 let device = Device::<T>::new();
571 device.disable_tx_ptr_interrupt(); 570 device.disable_tx_ptr_interrupt();
diff --git a/embassy-nrf/src/lib.rs b/embassy-nrf/src/lib.rs
index d4d7a1cad..6b57c2545 100644
--- a/embassy-nrf/src/lib.rs
+++ b/embassy-nrf/src/lib.rs
@@ -96,7 +96,7 @@ mod chip;
96pub mod interrupt { 96pub mod interrupt {
97 //! Interrupt definitions and macros to bind them. 97 //! Interrupt definitions and macros to bind them.
98 pub use cortex_m::interrupt::{CriticalSection, Mutex}; 98 pub use cortex_m::interrupt::{CriticalSection, Mutex};
99 pub use embassy_cortex_m::interrupt::{Binding, Handler, Interrupt, InterruptExt, Priority}; 99 pub use embassy_cortex_m::interrupt::{Binding, Handler, Interrupt, Priority};
100 100
101 pub use crate::chip::irqs::*; 101 pub use crate::chip::irqs::*;
102 102
diff --git a/embassy-nrf/src/pdm.rs b/embassy-nrf/src/pdm.rs
index 8815bb316..9df685a26 100644
--- a/embassy-nrf/src/pdm.rs
+++ b/embassy-nrf/src/pdm.rs
@@ -14,7 +14,7 @@ use futures::future::poll_fn;
14use crate::chip::EASY_DMA_SIZE; 14use crate::chip::EASY_DMA_SIZE;
15use crate::gpio::sealed::Pin; 15use crate::gpio::sealed::Pin;
16use crate::gpio::{AnyPin, Pin as GpioPin}; 16use crate::gpio::{AnyPin, Pin as GpioPin};
17use crate::interrupt::{self, InterruptExt}; 17use crate::interrupt::{self};
18use crate::Peripheral; 18use crate::Peripheral;
19 19
20/// Interrupt handler. 20/// Interrupt handler.
@@ -94,8 +94,8 @@ impl<'d, T: Instance> Pdm<'d, T> {
94 r.gainr.write(|w| w.gainr().default_gain()); 94 r.gainr.write(|w| w.gainr().default_gain());
95 95
96 // IRQ 96 // IRQ
97 unsafe { T::Interrupt::steal() }.unpend(); 97 T::Interrupt::unpend();
98 unsafe { T::Interrupt::steal() }.enable(); 98 unsafe { T::Interrupt::enable() };
99 99
100 r.enable.write(|w| w.enable().set_bit()); 100 r.enable.write(|w| w.enable().set_bit());
101 101
diff --git a/embassy-nrf/src/qdec.rs b/embassy-nrf/src/qdec.rs
index c845492fc..5761d04e1 100644
--- a/embassy-nrf/src/qdec.rs
+++ b/embassy-nrf/src/qdec.rs
@@ -6,12 +6,11 @@ use core::future::poll_fn;
6use core::marker::PhantomData; 6use core::marker::PhantomData;
7use core::task::Poll; 7use core::task::Poll;
8 8
9use embassy_cortex_m::interrupt::Interrupt;
10use embassy_hal_common::{into_ref, PeripheralRef}; 9use embassy_hal_common::{into_ref, PeripheralRef};
11 10
12use crate::gpio::sealed::Pin as _; 11use crate::gpio::sealed::Pin as _;
13use crate::gpio::{AnyPin, Pin as GpioPin}; 12use crate::gpio::{AnyPin, Pin as GpioPin};
14use crate::interrupt::InterruptExt; 13use crate::interrupt::Interrupt;
15use crate::{interrupt, Peripheral}; 14use crate::{interrupt, Peripheral};
16 15
17/// Quadrature decoder driver. 16/// Quadrature decoder driver.
@@ -134,8 +133,8 @@ impl<'d, T: Instance> Qdec<'d, T> {
134 SamplePeriod::_131ms => w.sampleper()._131ms(), 133 SamplePeriod::_131ms => w.sampleper()._131ms(),
135 }); 134 });
136 135
137 unsafe { T::Interrupt::steal() }.unpend(); 136 T::Interrupt::unpend();
138 unsafe { T::Interrupt::steal() }.enable(); 137 unsafe { T::Interrupt::enable() };
139 138
140 // Enable peripheral 139 // Enable peripheral
141 r.enable.write(|w| w.enable().set_bit()); 140 r.enable.write(|w| w.enable().set_bit());
diff --git a/embassy-nrf/src/qspi.rs b/embassy-nrf/src/qspi.rs
index 2e16c2ff5..3f48568b3 100644
--- a/embassy-nrf/src/qspi.rs
+++ b/embassy-nrf/src/qspi.rs
@@ -12,7 +12,7 @@ use embassy_hal_common::{into_ref, PeripheralRef};
12use embedded_storage::nor_flash::{ErrorType, NorFlash, NorFlashError, NorFlashErrorKind, ReadNorFlash}; 12use embedded_storage::nor_flash::{ErrorType, NorFlash, NorFlashError, NorFlashErrorKind, ReadNorFlash};
13 13
14use crate::gpio::{self, Pin as GpioPin}; 14use crate::gpio::{self, Pin as GpioPin};
15use crate::interrupt::{self, Interrupt, InterruptExt}; 15use crate::interrupt::{self, Interrupt};
16pub use crate::pac::qspi::ifconfig0::{ 16pub use crate::pac::qspi::ifconfig0::{
17 ADDRMODE_A as AddressMode, PPSIZE_A as WritePageSize, READOC_A as ReadOpcode, WRITEOC_A as WriteOpcode, 17 ADDRMODE_A as AddressMode, PPSIZE_A as WritePageSize, READOC_A as ReadOpcode, WRITEOC_A as WriteOpcode,
18}; 18};
@@ -207,8 +207,8 @@ impl<'d, T: Instance> Qspi<'d, T> {
207 w 207 w
208 }); 208 });
209 209
210 unsafe { T::Interrupt::steal() }.unpend(); 210 T::Interrupt::unpend();
211 unsafe { T::Interrupt::steal() }.enable(); 211 unsafe { T::Interrupt::enable() };
212 212
213 // Enable it 213 // Enable it
214 r.enable.write(|w| w.enable().enabled()); 214 r.enable.write(|w| w.enable().enabled());
diff --git a/embassy-nrf/src/rng.rs b/embassy-nrf/src/rng.rs
index a5602248d..7e9b35481 100644
--- a/embassy-nrf/src/rng.rs
+++ b/embassy-nrf/src/rng.rs
@@ -8,12 +8,11 @@ use core::ptr;
8use core::sync::atomic::{AtomicPtr, Ordering}; 8use core::sync::atomic::{AtomicPtr, Ordering};
9use core::task::Poll; 9use core::task::Poll;
10 10
11use embassy_cortex_m::interrupt::Interrupt;
12use embassy_hal_common::drop::OnDrop; 11use embassy_hal_common::drop::OnDrop;
13use embassy_hal_common::{into_ref, PeripheralRef}; 12use embassy_hal_common::{into_ref, PeripheralRef};
14use embassy_sync::waitqueue::AtomicWaker; 13use embassy_sync::waitqueue::AtomicWaker;
15 14
16use crate::interrupt::InterruptExt; 15use crate::interrupt::Interrupt;
17use crate::{interrupt, Peripheral}; 16use crate::{interrupt, Peripheral};
18 17
19/// Interrupt handler. 18/// Interrupt handler.
@@ -99,8 +98,8 @@ impl<'d, T: Instance> Rng<'d, T> {
99 this.stop(); 98 this.stop();
100 this.disable_irq(); 99 this.disable_irq();
101 100
102 unsafe { T::Interrupt::steal() }.unpend(); 101 T::Interrupt::unpend();
103 unsafe { T::Interrupt::steal() }.enable(); 102 unsafe { T::Interrupt::enable() };
104 103
105 this 104 this
106 } 105 }
diff --git a/embassy-nrf/src/saadc.rs b/embassy-nrf/src/saadc.rs
index 8aff7df16..39764e380 100644
--- a/embassy-nrf/src/saadc.rs
+++ b/embassy-nrf/src/saadc.rs
@@ -6,7 +6,7 @@ use core::future::poll_fn;
6use core::sync::atomic::{compiler_fence, Ordering}; 6use core::sync::atomic::{compiler_fence, Ordering};
7use core::task::Poll; 7use core::task::Poll;
8 8
9use embassy_cortex_m::interrupt::{Interrupt, InterruptExt}; 9use embassy_cortex_m::interrupt::Interrupt;
10use embassy_hal_common::drop::OnDrop; 10use embassy_hal_common::drop::OnDrop;
11use embassy_hal_common::{impl_peripheral, into_ref, PeripheralRef}; 11use embassy_hal_common::{impl_peripheral, into_ref, PeripheralRef};
12use embassy_sync::waitqueue::AtomicWaker; 12use embassy_sync::waitqueue::AtomicWaker;
@@ -189,8 +189,8 @@ impl<'d, const N: usize> Saadc<'d, N> {
189 // Disable all events interrupts 189 // Disable all events interrupts
190 r.intenclr.write(|w| unsafe { w.bits(0x003F_FFFF) }); 190 r.intenclr.write(|w| unsafe { w.bits(0x003F_FFFF) });
191 191
192 unsafe { interrupt::SAADC::steal() }.unpend(); 192 interrupt::SAADC::unpend();
193 unsafe { interrupt::SAADC::steal() }.enable(); 193 unsafe { interrupt::SAADC::enable() };
194 194
195 Self { _p: saadc } 195 Self { _p: saadc }
196 } 196 }
diff --git a/embassy-nrf/src/spim.rs b/embassy-nrf/src/spim.rs
index 89cbdfee9..bb9cda323 100644
--- a/embassy-nrf/src/spim.rs
+++ b/embassy-nrf/src/spim.rs
@@ -15,7 +15,7 @@ pub use pac::spim0::frequency::FREQUENCY_A as Frequency;
15use crate::chip::FORCE_COPY_BUFFER_SIZE; 15use crate::chip::FORCE_COPY_BUFFER_SIZE;
16use crate::gpio::sealed::Pin as _; 16use crate::gpio::sealed::Pin as _;
17use crate::gpio::{self, AnyPin, Pin as GpioPin, PselBits}; 17use crate::gpio::{self, AnyPin, Pin as GpioPin, PselBits};
18use crate::interrupt::{self, Interrupt, InterruptExt}; 18use crate::interrupt::{self, Interrupt};
19use crate::util::{slice_in_ram_or, slice_ptr_parts, slice_ptr_parts_mut}; 19use crate::util::{slice_in_ram_or, slice_ptr_parts, slice_ptr_parts_mut};
20use crate::{pac, Peripheral}; 20use crate::{pac, Peripheral};
21 21
@@ -207,8 +207,8 @@ impl<'d, T: Instance> Spim<'d, T> {
207 // Disable all events interrupts 207 // Disable all events interrupts
208 r.intenclr.write(|w| unsafe { w.bits(0xFFFF_FFFF) }); 208 r.intenclr.write(|w| unsafe { w.bits(0xFFFF_FFFF) });
209 209
210 unsafe { T::Interrupt::steal() }.unpend(); 210 T::Interrupt::unpend();
211 unsafe { T::Interrupt::steal() }.enable(); 211 unsafe { T::Interrupt::enable() };
212 212
213 Self { _p: spim } 213 Self { _p: spim }
214 } 214 }
diff --git a/embassy-nrf/src/spis.rs b/embassy-nrf/src/spis.rs
index 55b5e060e..a1d6803ed 100644
--- a/embassy-nrf/src/spis.rs
+++ b/embassy-nrf/src/spis.rs
@@ -13,7 +13,7 @@ pub use embedded_hal_02::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MO
13use crate::chip::FORCE_COPY_BUFFER_SIZE; 13use crate::chip::FORCE_COPY_BUFFER_SIZE;
14use crate::gpio::sealed::Pin as _; 14use crate::gpio::sealed::Pin as _;
15use crate::gpio::{self, AnyPin, Pin as GpioPin}; 15use crate::gpio::{self, AnyPin, Pin as GpioPin};
16use crate::interrupt::{self, Interrupt, InterruptExt}; 16use crate::interrupt::{self, Interrupt};
17use crate::util::{slice_in_ram_or, slice_ptr_parts, slice_ptr_parts_mut}; 17use crate::util::{slice_in_ram_or, slice_ptr_parts, slice_ptr_parts_mut};
18use crate::{pac, Peripheral}; 18use crate::{pac, Peripheral};
19 19
@@ -214,8 +214,8 @@ impl<'d, T: Instance> Spis<'d, T> {
214 // Disable all events interrupts. 214 // Disable all events interrupts.
215 r.intenclr.write(|w| unsafe { w.bits(0xFFFF_FFFF) }); 215 r.intenclr.write(|w| unsafe { w.bits(0xFFFF_FFFF) });
216 216
217 unsafe { T::Interrupt::steal() }.unpend(); 217 T::Interrupt::unpend();
218 unsafe { T::Interrupt::steal() }.enable(); 218 unsafe { T::Interrupt::enable() };
219 219
220 Self { _p: spis } 220 Self { _p: spis }
221 } 221 }
diff --git a/embassy-nrf/src/temp.rs b/embassy-nrf/src/temp.rs
index 0653710af..8a127efc5 100644
--- a/embassy-nrf/src/temp.rs
+++ b/embassy-nrf/src/temp.rs
@@ -3,13 +3,12 @@
3use core::future::poll_fn; 3use core::future::poll_fn;
4use core::task::Poll; 4use core::task::Poll;
5 5
6use embassy_cortex_m::interrupt::Interrupt;
7use embassy_hal_common::drop::OnDrop; 6use embassy_hal_common::drop::OnDrop;
8use embassy_hal_common::{into_ref, PeripheralRef}; 7use embassy_hal_common::{into_ref, PeripheralRef};
9use embassy_sync::waitqueue::AtomicWaker; 8use embassy_sync::waitqueue::AtomicWaker;
10use fixed::types::I30F2; 9use fixed::types::I30F2;
11 10
12use crate::interrupt::InterruptExt; 11use crate::interrupt::Interrupt;
13use crate::peripherals::TEMP; 12use crate::peripherals::TEMP;
14use crate::{interrupt, pac, Peripheral}; 13use crate::{interrupt, pac, Peripheral};
15 14
@@ -42,8 +41,8 @@ impl<'d> Temp<'d> {
42 into_ref!(_peri); 41 into_ref!(_peri);
43 42
44 // Enable interrupt that signals temperature values 43 // Enable interrupt that signals temperature values
45 unsafe { interrupt::TEMP::steal() }.unpend(); 44 interrupt::TEMP::unpend();
46 unsafe { interrupt::TEMP::steal() }.enable(); 45 unsafe { interrupt::TEMP::enable() };
47 46
48 Self { _peri } 47 Self { _peri }
49 } 48 }
diff --git a/embassy-nrf/src/time_driver.rs b/embassy-nrf/src/time_driver.rs
index c82c238cc..4feff8a75 100644
--- a/embassy-nrf/src/time_driver.rs
+++ b/embassy-nrf/src/time_driver.rs
@@ -7,7 +7,7 @@ use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
7use embassy_sync::blocking_mutex::CriticalSectionMutex as Mutex; 7use embassy_sync::blocking_mutex::CriticalSectionMutex as Mutex;
8use embassy_time::driver::{AlarmHandle, Driver}; 8use embassy_time::driver::{AlarmHandle, Driver};
9 9
10use crate::interrupt::{Interrupt, InterruptExt}; 10use crate::interrupt::Interrupt;
11use crate::{interrupt, pac}; 11use crate::{interrupt, pac};
12 12
13fn rtc() -> &'static pac::rtc0::RegisterBlock { 13fn rtc() -> &'static pac::rtc0::RegisterBlock {
@@ -142,9 +142,8 @@ impl RtcDriver {
142 // Wait for clear 142 // Wait for clear
143 while r.counter.read().bits() != 0 {} 143 while r.counter.read().bits() != 0 {}
144 144
145 let irq = unsafe { interrupt::RTC1::steal() }; 145 interrupt::RTC1::set_priority(irq_prio);
146 irq.set_priority(irq_prio); 146 unsafe { interrupt::RTC1::enable() };
147 irq.enable();
148 } 147 }
149 148
150 fn on_interrupt(&self) { 149 fn on_interrupt(&self) {
diff --git a/embassy-nrf/src/twim.rs b/embassy-nrf/src/twim.rs
index cab36884f..dea398a67 100644
--- a/embassy-nrf/src/twim.rs
+++ b/embassy-nrf/src/twim.rs
@@ -16,7 +16,7 @@ use embassy_time::{Duration, Instant};
16 16
17use crate::chip::{EASY_DMA_SIZE, FORCE_COPY_BUFFER_SIZE}; 17use crate::chip::{EASY_DMA_SIZE, FORCE_COPY_BUFFER_SIZE};
18use crate::gpio::Pin as GpioPin; 18use crate::gpio::Pin as GpioPin;
19use crate::interrupt::{self, Interrupt, InterruptExt}; 19use crate::interrupt::{self, Interrupt};
20use crate::util::{slice_in_ram, slice_in_ram_or}; 20use crate::util::{slice_in_ram, slice_in_ram_or};
21use crate::{gpio, pac, Peripheral}; 21use crate::{gpio, pac, Peripheral};
22 22
@@ -174,8 +174,8 @@ impl<'d, T: Instance> Twim<'d, T> {
174 // Disable all events interrupts 174 // Disable all events interrupts
175 r.intenclr.write(|w| unsafe { w.bits(0xFFFF_FFFF) }); 175 r.intenclr.write(|w| unsafe { w.bits(0xFFFF_FFFF) });
176 176
177 unsafe { T::Interrupt::steal() }.unpend(); 177 T::Interrupt::unpend();
178 unsafe { T::Interrupt::steal() }.enable(); 178 unsafe { T::Interrupt::enable() };
179 179
180 Self { _p: twim } 180 Self { _p: twim }
181 } 181 }
diff --git a/embassy-nrf/src/twis.rs b/embassy-nrf/src/twis.rs
index f68a9940a..752a8c046 100644
--- a/embassy-nrf/src/twis.rs
+++ b/embassy-nrf/src/twis.rs
@@ -15,7 +15,7 @@ use embassy_time::{Duration, Instant};
15 15
16use crate::chip::{EASY_DMA_SIZE, FORCE_COPY_BUFFER_SIZE}; 16use crate::chip::{EASY_DMA_SIZE, FORCE_COPY_BUFFER_SIZE};
17use crate::gpio::Pin as GpioPin; 17use crate::gpio::Pin as GpioPin;
18use crate::interrupt::{self, Interrupt, InterruptExt}; 18use crate::interrupt::{self, Interrupt};
19use crate::util::slice_in_ram_or; 19use crate::util::slice_in_ram_or;
20use crate::{gpio, pac, Peripheral}; 20use crate::{gpio, pac, Peripheral};
21 21
@@ -204,8 +204,8 @@ impl<'d, T: Instance> Twis<'d, T> {
204 // Generate suspend on read event 204 // Generate suspend on read event
205 r.shorts.write(|w| w.read_suspend().enabled()); 205 r.shorts.write(|w| w.read_suspend().enabled());
206 206
207 unsafe { T::Interrupt::steal() }.unpend(); 207 T::Interrupt::unpend();
208 unsafe { T::Interrupt::steal() }.enable(); 208 unsafe { T::Interrupt::enable() };
209 209
210 Self { _p: twis } 210 Self { _p: twis }
211 } 211 }
diff --git a/embassy-nrf/src/uarte.rs b/embassy-nrf/src/uarte.rs
index 032089635..6c6941ee8 100644
--- a/embassy-nrf/src/uarte.rs
+++ b/embassy-nrf/src/uarte.rs
@@ -27,7 +27,7 @@ pub use pac::uarte0::{baudrate::BAUDRATE_A as Baudrate, config::PARITY_A as Pari
27use crate::chip::{EASY_DMA_SIZE, FORCE_COPY_BUFFER_SIZE}; 27use crate::chip::{EASY_DMA_SIZE, FORCE_COPY_BUFFER_SIZE};
28use crate::gpio::sealed::Pin as _; 28use crate::gpio::sealed::Pin as _;
29use crate::gpio::{self, AnyPin, Pin as GpioPin, PselBits}; 29use crate::gpio::{self, AnyPin, Pin as GpioPin, PselBits};
30use crate::interrupt::{self, Interrupt, InterruptExt}; 30use crate::interrupt::{self, Interrupt};
31use crate::ppi::{AnyConfigurableChannel, ConfigurableChannel, Event, Ppi, Task}; 31use crate::ppi::{AnyConfigurableChannel, ConfigurableChannel, Event, Ppi, Task};
32use crate::timer::{Frequency, Instance as TimerInstance, Timer}; 32use crate::timer::{Frequency, Instance as TimerInstance, Timer};
33use crate::util::slice_in_ram_or; 33use crate::util::slice_in_ram_or;
@@ -168,8 +168,8 @@ impl<'d, T: Instance> Uarte<'d, T> {
168 } 168 }
169 r.psel.rts.write(|w| unsafe { w.bits(rts.psel_bits()) }); 169 r.psel.rts.write(|w| unsafe { w.bits(rts.psel_bits()) });
170 170
171 unsafe { T::Interrupt::steal() }.unpend(); 171 T::Interrupt::unpend();
172 unsafe { T::Interrupt::steal() }.enable(); 172 unsafe { T::Interrupt::enable() };
173 173
174 let hardware_flow_control = match (rts.is_some(), cts.is_some()) { 174 let hardware_flow_control = match (rts.is_some(), cts.is_some()) {
175 (false, false) => false, 175 (false, false) => false,
@@ -358,8 +358,8 @@ impl<'d, T: Instance> UarteTx<'d, T> {
358 let hardware_flow_control = cts.is_some(); 358 let hardware_flow_control = cts.is_some();
359 configure(r, config, hardware_flow_control); 359 configure(r, config, hardware_flow_control);
360 360
361 unsafe { T::Interrupt::steal() }.unpend(); 361 T::Interrupt::unpend();
362 unsafe { T::Interrupt::steal() }.enable(); 362 unsafe { T::Interrupt::enable() };
363 363
364 let s = T::state(); 364 let s = T::state();
365 s.tx_rx_refcount.store(1, Ordering::Relaxed); 365 s.tx_rx_refcount.store(1, Ordering::Relaxed);
@@ -551,8 +551,8 @@ impl<'d, T: Instance> UarteRx<'d, T> {
551 r.psel.txd.write(|w| w.connect().disconnected()); 551 r.psel.txd.write(|w| w.connect().disconnected());
552 r.psel.cts.write(|w| w.connect().disconnected()); 552 r.psel.cts.write(|w| w.connect().disconnected());
553 553
554 unsafe { T::Interrupt::steal() }.unpend(); 554 T::Interrupt::unpend();
555 unsafe { T::Interrupt::steal() }.enable(); 555 unsafe { T::Interrupt::enable() };
556 556
557 let hardware_flow_control = rts.is_some(); 557 let hardware_flow_control = rts.is_some();
558 configure(r, config, hardware_flow_control); 558 configure(r, config, hardware_flow_control);
diff --git a/embassy-nrf/src/usb/mod.rs b/embassy-nrf/src/usb/mod.rs
index c1f3f48cb..3c62b4452 100644
--- a/embassy-nrf/src/usb/mod.rs
+++ b/embassy-nrf/src/usb/mod.rs
@@ -18,7 +18,7 @@ use embassy_usb_driver::{Direction, EndpointAddress, EndpointError, EndpointInfo
18use pac::usbd::RegisterBlock; 18use pac::usbd::RegisterBlock;
19 19
20use self::vbus_detect::VbusDetect; 20use self::vbus_detect::VbusDetect;
21use crate::interrupt::{self, Interrupt, InterruptExt}; 21use crate::interrupt::{self, Interrupt};
22use crate::util::slice_in_ram; 22use crate::util::slice_in_ram;
23use crate::{pac, Peripheral}; 23use crate::{pac, Peripheral};
24 24
@@ -103,8 +103,8 @@ impl<'d, T: Instance, V: VbusDetect> Driver<'d, T, V> {
103 ) -> Self { 103 ) -> Self {
104 into_ref!(usb); 104 into_ref!(usb);
105 105
106 unsafe { T::Interrupt::steal() }.unpend(); 106 T::Interrupt::unpend();
107 unsafe { T::Interrupt::steal() }.enable(); 107 unsafe { T::Interrupt::enable() };
108 108
109 Self { 109 Self {
110 _p: usb, 110 _p: usb,
diff --git a/embassy-nrf/src/usb/vbus_detect.rs b/embassy-nrf/src/usb/vbus_detect.rs
index cecd4c595..a6a959905 100644
--- a/embassy-nrf/src/usb/vbus_detect.rs
+++ b/embassy-nrf/src/usb/vbus_detect.rs
@@ -7,7 +7,7 @@ use core::task::Poll;
7use embassy_sync::waitqueue::AtomicWaker; 7use embassy_sync::waitqueue::AtomicWaker;
8 8
9use super::BUS_WAKER; 9use super::BUS_WAKER;
10use crate::interrupt::{self, Interrupt, InterruptExt}; 10use crate::interrupt::{self, Interrupt};
11use crate::pac; 11use crate::pac;
12 12
13/// Trait for detecting USB VBUS power. 13/// Trait for detecting USB VBUS power.
@@ -80,8 +80,8 @@ impl HardwareVbusDetect {
80 pub fn new(_irq: impl interrupt::Binding<UsbRegIrq, InterruptHandler> + 'static) -> Self { 80 pub fn new(_irq: impl interrupt::Binding<UsbRegIrq, InterruptHandler> + 'static) -> Self {
81 let regs = unsafe { &*UsbRegPeri::ptr() }; 81 let regs = unsafe { &*UsbRegPeri::ptr() };
82 82
83 unsafe { UsbRegIrq::steal() }.unpend(); 83 UsbRegIrq::unpend();
84 unsafe { UsbRegIrq::steal() }.enable(); 84 unsafe { UsbRegIrq::enable() };
85 85
86 regs.intenset 86 regs.intenset
87 .write(|w| w.usbdetected().set().usbremoved().set().usbpwrrdy().set()); 87 .write(|w| w.usbdetected().set().usbremoved().set().usbpwrrdy().set());