aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 });