diff options
| author | ivmarkov <[email protected]> | 2022-10-24 11:10:59 +0300 |
|---|---|---|
| committer | ivmarkov <[email protected]> | 2022-10-24 11:10:59 +0300 |
| commit | f78c706b89feed71a7e0a3eaf332f55813698c7f (patch) | |
| tree | 391d9421741a988c461335876eaa4a51e0225c8b /embassy-rp/src/timer.rs | |
| parent | 4d5550070fe5e80ff2296a71239c568c774b9ceb (diff) | |
Address review feedback
Diffstat (limited to 'embassy-rp/src/timer.rs')
| -rw-r--r-- | embassy-rp/src/timer.rs | 20 |
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 | } |
