From dc4639b2f01b68b37ca53c38fd01c1a6200061e4 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 2 May 2022 16:23:19 +0200 Subject: [PATCH] some timer extensions --- src/timer.rs | 12 +++++++++--- src/utility.rs | 5 +++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/timer.rs b/src/timer.rs index 99d0c80..653c50d 100644 --- a/src/timer.rs +++ b/src/timer.rs @@ -21,7 +21,7 @@ use crate::{ private::Sealed, time::Hertz, timer, - utility::unmask_irq, + utility::{mask_irq, unmask_irq}, }; use core::cell::Cell; use cortex_m::interrupt::Mutex; @@ -576,6 +576,12 @@ impl CountDownTimer { #[inline(always)] pub fn disable(&mut self) { self.tim.reg().ctrl.modify(|_, w| w.enable().clear_bit()); + if let Some(irq_cfg) = self.irq_cfg { + self.disable_interrupt(); + if irq_cfg.enable { + mask_irq(irq_cfg.irq); + } + } } /// Disable the counter, setting both enable and active bit to 0 @@ -742,9 +748,9 @@ pub fn set_up_ms_timer( sys_cfg: &mut pac::SYSCONFIG, irq_sel: Option<&mut pac::IRQSEL>, sys_clk: impl Into, - tim0: TIM, + tim: TIM, ) -> CountDownTimer { - let mut ms_timer = CountDownTimer::new(sys_cfg, sys_clk, tim0); + let mut ms_timer = CountDownTimer::new(sys_cfg, sys_clk, tim); ms_timer.listen(timer::Event::TimeOut, irq_cfg, irq_sel, Some(sys_cfg)); ms_timer.start(1000.hz()); ms_timer diff --git a/src/utility.rs b/src/utility.rs index 2f8a609..cde1475 100644 --- a/src/utility.rs +++ b/src/utility.rs @@ -142,3 +142,8 @@ pub fn port_mux( pub(crate) fn unmask_irq(irq: pac::Interrupt) { unsafe { cortex_m::peripheral::NVIC::unmask(irq) }; } + +#[inline] +pub(crate) fn mask_irq(irq: pac::Interrupt) { + cortex_m::peripheral::NVIC::mask(irq); +}