aboutsummaryrefslogtreecommitdiff
path: root/embassy-rp/src/timer.rs
diff options
context:
space:
mode:
authorivmarkov <[email protected]>2022-10-24 11:10:59 +0300
committerivmarkov <[email protected]>2022-10-24 11:10:59 +0300
commitf78c706b89feed71a7e0a3eaf332f55813698c7f (patch)
tree391d9421741a988c461335876eaa4a51e0225c8b /embassy-rp/src/timer.rs
parent4d5550070fe5e80ff2296a71239c568c774b9ceb (diff)
Address review feedback
Diffstat (limited to 'embassy-rp/src/timer.rs')
-rw-r--r--embassy-rp/src/timer.rs20
1 files changed, 12 insertions, 8 deletions
diff --git a/embassy-rp/src/timer.rs b/embassy-rp/src/timer.rs
index 8f280f550..80efd779f 100644
--- a/embassy-rp/src/timer.rs
+++ b/embassy-rp/src/timer.rs
@@ -71,13 +71,6 @@ impl Driver for TimerDriver {
71 fn set_alarm(&self, alarm: AlarmHandle, timestamp: u64) -> bool { 71 fn set_alarm(&self, alarm: AlarmHandle, timestamp: u64) -> bool {
72 let n = alarm.id() as usize; 72 let n = alarm.id() as usize;
73 critical_section::with(|cs| { 73 critical_section::with(|cs| {
74 let now = self.now();
75
76 // If alarm timestamp has passed don't set the alarm and return `false` to indicate that.
77 if timestamp <= now {
78 return false;
79 }
80
81 let alarm = &self.alarms.borrow(cs)[n]; 74 let alarm = &self.alarms.borrow(cs)[n];
82 alarm.timestamp.set(timestamp); 75 alarm.timestamp.set(timestamp);
83 76
@@ -87,7 +80,18 @@ impl Driver for TimerDriver {
87 // it is checked if the alarm time has passed. 80 // it is checked if the alarm time has passed.
88 unsafe { pac::TIMER.alarm(n).write_value(timestamp as u32) }; 81 unsafe { pac::TIMER.alarm(n).write_value(timestamp as u32) };
89 82
90 true 83 let now = self.now();
84 if timestamp <= now {
85 // If alarm timestamp has passed the alarm will not fire.
86 // Disarm the alarm and return `false` to indicate that.
87 unsafe { pac::TIMER.armed().write(|w| w.set_armed(1 << n)) }
88
89 alarm.timestamp.set(u64::MAX);
90
91 false
92 } else {
93 true
94 }
91 }) 95 })
92 } 96 }
93} 97}