From 91d9972fd8d0e32bce27c454c4014f955e6fef2d Mon Sep 17 00:00:00 2001
From: Victor <victor@xirion.net>
Date: Tue, 7 Mar 2023 09:54:03 +0100
Subject: [PATCH] Check if rtc compare event has triggered before waiting for
interrupt
---
src/time.rs | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/src/time.rs b/src/time.rs
index 846fa2a..296a5e0 100644
--- a/src/time.rs
+++ b/src/time.rs
@@ -4,6 +4,7 @@ use core::sync::atomic::{AtomicBool, AtomicU32, Ordering};
use core::time::Duration;
use nrf51_pac::interrupt;
+use crate::led::Led;
use crate::mutex::Mutex;
use crate::once_cell::OnceCell;
/// Delay for a number of CPU cycles. Very inaccurate
@@ -181,6 +182,14 @@ unsafe fn RTC0() {
/// Wait for the next interrupt configured by `set_interrupt_frequency`.
pub fn wait_for_next_tick() {
+ RTC.modify(|rtc| {
+ if rtc.is_event_triggered(RtcInterrupt::Compare0) {
+ // the compare register has already triggered
+ TIMER_FLAG.store(false, Ordering::SeqCst);
+ return;
+ }
+ });
+
while !TIMER_FLAG.load(Ordering::SeqCst) {
cortex_m::asm::wfi();
}
--
GitLab