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