diff --git a/src/lib.rs b/src/lib.rs index 898bccc47d..d23b334f5c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,7 +11,7 @@ extern crate cortex_m; use cortex_m::ctxt::Context; -use cortex_m::interrupt::CriticalSection; +use cortex_m::interrupt::{CriticalSection, Nr}; use cortex_m::peripheral::{Peripheral, NVIC, SCB}; use cortex_m::register::{basepri, basepri_max}; @@ -362,6 +362,16 @@ pub fn logical(priority: u8) -> u8 { ((1 << PRIORITY_BITS) - priority) << (8 - PRIORITY_BITS) } +/// Puts `interrupt` in the "to execute" queue +/// +/// This function has no effect if the interrupt was already queued +pub fn queue(interrupt: I) where I: Nr { + unsafe { + // NOTE(safe) atomic write + (*NVIC.get()).set_pending(interrupt) + } +} + /// Fake ceiling, indicates that the resource is shared by cooperative tasks pub struct C0 { _0: (),