aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2025-05-21 17:31:37 +0200
committerGitHub <[email protected]>2025-05-21 17:31:37 +0200
commit9409afb02e7fd46d0c3b2257a938a8bc88244f5b (patch)
tree5917df65062d4228ec9fd4fe07132f843ed41015
parent7134e1a3a5b858958e2b4c6911036e4a86dcb095 (diff)
parent7a600fe9256a4c7c25501320da1de1fce8e1b39e (diff)
Merge pull request #4222 from felipebalbi/fix-ostimer
timer: ostimer: wait for match write ready
-rw-r--r--embassy-imxrt/src/time_driver.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/embassy-imxrt/src/time_driver.rs b/embassy-imxrt/src/time_driver.rs
index c68679d3e..f127609c8 100644
--- a/embassy-imxrt/src/time_driver.rs
+++ b/embassy-imxrt/src/time_driver.rs
@@ -336,6 +336,10 @@ impl OsTimer {
336 let alarm = self.alarms.borrow(cs); 336 let alarm = self.alarms.borrow(cs);
337 alarm.timestamp.set(timestamp); 337 alarm.timestamp.set(timestamp);
338 338
339 // Wait until we're allowed to write to MATCH_L/MATCH_H
340 // registers
341 while os().osevent_ctrl().read().match_wr_rdy().bit_is_set() {}
342
339 let t = self.now(); 343 let t = self.now();
340 if timestamp <= t { 344 if timestamp <= t {
341 os().osevent_ctrl().modify(|_, w| w.ostimer_intena().clear_bit()); 345 os().osevent_ctrl().modify(|_, w| w.ostimer_intena().clear_bit());
@@ -366,7 +370,8 @@ impl OsTimer {
366 fn on_interrupt(&self) { 370 fn on_interrupt(&self) {
367 critical_section::with(|cs| { 371 critical_section::with(|cs| {
368 if os().osevent_ctrl().read().ostimer_intrflag().bit_is_set() { 372 if os().osevent_ctrl().read().ostimer_intrflag().bit_is_set() {
369 os().osevent_ctrl().modify(|_, w| w.ostimer_intena().clear_bit()); 373 os().osevent_ctrl()
374 .modify(|_, w| w.ostimer_intena().clear_bit().ostimer_intrflag().set_bit());
370 self.trigger_alarm(cs); 375 self.trigger_alarm(cs);
371 } 376 }
372 }); 377 });