From 00ef129f8703deca91e18fc663f7ec323dd4b6cc Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Tue, 4 Apr 2017 15:36:23 -0500 Subject: [PATCH] add a `queue` function --- src/lib.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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: (),