aboutsummaryrefslogtreecommitdiff
path: root/embassy-cortex-m
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2023-02-26 22:42:22 +0100
committerDario Nieuwenhuis <[email protected]>2023-03-06 00:17:51 +0100
commit42c13c8c3d9514866c2842009f76e88e8cb01b22 (patch)
tree88fff15dd26e850f6ca41a9fec0e591466c08101 /embassy-cortex-m
parenta054891263cbd17315cdf85ecdcc6359313063bc (diff)
nrf: add new interrupt binding traits and macro.
Diffstat (limited to 'embassy-cortex-m')
-rw-r--r--embassy-cortex-m/src/interrupt.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/embassy-cortex-m/src/interrupt.rs b/embassy-cortex-m/src/interrupt.rs
index ead9d52fe..3a82726df 100644
--- a/embassy-cortex-m/src/interrupt.rs
+++ b/embassy-cortex-m/src/interrupt.rs
@@ -13,6 +13,36 @@ pub mod _export {
13 pub use embassy_macros::{cortex_m_interrupt as interrupt, cortex_m_interrupt_declare as declare}; 13 pub use embassy_macros::{cortex_m_interrupt as interrupt, cortex_m_interrupt_declare as declare};
14} 14}
15 15
16/// Interrupt handler trait.
17///
18/// Drivers that need to handle interrupts implement this trait.
19/// The user must ensure `on_interrupt()` is called every time the interrupt fires.
20/// Drivers must use use [`Binding`] to assert at compile time that the user has done so.
21pub trait Handler<I: Interrupt> {
22 /// Interrupt handler function.
23 ///
24 /// Must be called every time the `I` interrupt fires, synchronously from
25 /// the interrupt handler context.
26 ///
27 /// # Safety
28 ///
29 /// This function must ONLY be called from the interrupt handler for `I`.
30 unsafe fn on_interrupt();
31}
32
33/// Compile-time assertion that an interrupt has been bound to a handler.
34///
35/// For the vast majority of cases, you should use the `bind_interrupts!`
36/// macro instead of writing `unsafe impl`s of this trait.
37///
38/// # Safety
39///
40/// By implementing this trait, you are asserting that you have arranged for `H::on_interrupt()`
41/// to be called every time the `I` interrupt fires.
42///
43/// This allows drivers to check bindings at compile-time.
44pub unsafe trait Binding<I: Interrupt, H: Handler<I>> {}
45
16/// Implementation detail, do not use outside embassy crates. 46/// Implementation detail, do not use outside embassy crates.
17#[doc(hidden)] 47#[doc(hidden)]
18pub struct DynHandler { 48pub struct DynHandler {