aboutsummaryrefslogtreecommitdiff
path: root/rtic-monotonics
diff options
context:
space:
mode:
Diffstat (limited to 'rtic-monotonics')
-rw-r--r--rtic-monotonics/CHANGELOG.md4
-rw-r--r--rtic-monotonics/src/rp2040.rs2
-rw-r--r--rtic-monotonics/src/stm32.rs10
3 files changed, 10 insertions, 6 deletions
diff --git a/rtic-monotonics/CHANGELOG.md b/rtic-monotonics/CHANGELOG.md
index 3000f88..105f577 100644
--- a/rtic-monotonics/CHANGELOG.md
+++ b/rtic-monotonics/CHANGELOG.md
@@ -7,6 +7,10 @@ For each category, *Added*, *Changed*, *Fixed* add new entries at the top!
## Unreleased
+### Fixed
+
+- Fix `stm32` monotonic for timer peripherals with only two clock compare modules
+
## v2.0.1 - 2024-06-02
### Changed
diff --git a/rtic-monotonics/src/rp2040.rs b/rtic-monotonics/src/rp2040.rs
index 47146b4..c8afa2e 100644
--- a/rtic-monotonics/src/rp2040.rs
+++ b/rtic-monotonics/src/rp2040.rs
@@ -94,7 +94,7 @@ impl TimerQueueBackend for TimerBackend {
// Since the timer may or may not overflow based on the requested compare val, we check
// how many ticks are left.
- // `wrapping_sup` takes care of the u64 integer overflow special case.
+ // `wrapping_sub` takes care of the u64 integer overflow special case.
let val = if instant.wrapping_sub(now) <= MAX {
instant & MAX
} else {
diff --git a/rtic-monotonics/src/stm32.rs b/rtic-monotonics/src/stm32.rs
index 6b3e4c9..bc24b83 100644
--- a/rtic-monotonics/src/stm32.rs
+++ b/rtic-monotonics/src/stm32.rs
@@ -240,8 +240,8 @@ macro_rules! make_timer {
$timer.dier().modify(|r| r.set_uie(true));
// Configure and enable half-period interrupt
- $timer.ccr(2).write(|r| r.set_ccr(($bits::MAX - ($bits::MAX >> 1)).into()));
- $timer.dier().modify(|r| r.set_ccie(2, true));
+ $timer.ccr(0).write(|r| r.set_ccr(($bits::MAX - ($bits::MAX >> 1)).into()));
+ $timer.dier().modify(|r| r.set_ccie(0, true));
// Trigger an update event to load the prescaler value to the clock.
$timer.egr().write(|r| r.set_ug(true));
@@ -282,7 +282,7 @@ macro_rules! make_timer {
let now = Self::now();
// Since the timer may or may not overflow based on the requested compare val, we check how many ticks are left.
- // `wrapping_sup` takes care of the u64 integer overflow special case.
+ // `wrapping_sub` takes care of the u64 integer overflow special case.
let val = if instant.wrapping_sub(now) <= ($bits::MAX as u64) {
instant as $bits
} else {
@@ -317,8 +317,8 @@ macro_rules! make_timer {
assert!(prev % 2 == 1, "Monotonic must have missed an interrupt!");
}
// Half period
- if $timer.sr().read().ccif(2) {
- $timer.sr().modify(|r| r.set_ccif(2, false));
+ if $timer.sr().read().ccif(0) {
+ $timer.sr().modify(|r| r.set_ccif(0, false));
let prev = $overflow.fetch_add(1, Ordering::Relaxed);
assert!(prev % 2 == 0, "Monotonic must have missed an interrupt!");
}