diff --git a/rp2040-hal/src/timer.rs b/rp2040-hal/src/timer.rs index 395cbe6..cf3f9dd 100644 --- a/rp2040-hal/src/timer.rs +++ b/rp2040-hal/src/timer.rs @@ -13,9 +13,6 @@ pub struct Timer { alarms: [bool; 4], } -// Safety: All access is read-only. -unsafe impl Sync for Timer {} - impl Timer { /// Create a new [`Timer`] pub fn new(timer: TIMER, resets: &mut RESETS) -> Self { @@ -55,42 +52,50 @@ impl Timer { /// Retrieve a reference to alarm 0. Will only return a value the first time this is called pub fn alarm_0(&mut self) -> Option { - if self.alarms[0] { - self.alarms[0] = false; - Some(Alarm0(PhantomData)) - } else { - None - } + cortex_m::interrupt::free(|_| { + if self.alarms[0] { + self.alarms[0] = false; + Some(Alarm0(PhantomData)) + } else { + None + } + }) } /// Retrieve a reference to alarm 1. Will only return a value the first time this is called pub fn alarm_1(&mut self) -> Option { - if self.alarms[1] { - self.alarms[1] = false; - Some(Alarm1(PhantomData)) - } else { - None - } + cortex_m::interrupt::free(|_| { + if self.alarms[1] { + self.alarms[1] = false; + Some(Alarm1(PhantomData)) + } else { + None + } + }) } /// Retrieve a reference to alarm 2. Will only return a value the first time this is called pub fn alarm_2(&mut self) -> Option { - if self.alarms[2] { - self.alarms[2] = false; - Some(Alarm2(PhantomData)) - } else { - None - } + cortex_m::interrupt::free(|_| { + if self.alarms[2] { + self.alarms[2] = false; + Some(Alarm2(PhantomData)) + } else { + None + } + }) } /// Retrieve a reference to alarm 3. Will only return a value the first time this is called pub fn alarm_3(&mut self) -> Option { - if self.alarms[3] { - self.alarms[3] = false; - Some(Alarm3(PhantomData)) - } else { - None - } + cortex_m::interrupt::free(|_| { + if self.alarms[3] { + self.alarms[3] = false; + Some(Alarm3(PhantomData)) + } else { + None + } + }) } }