From 5cafe9dd0bfc24b4243cc5e5d6be6b7c7556f3a3 Mon Sep 17 00:00:00 2001 From: Finomnis Date: Fri, 5 Jul 2024 18:19:51 +0200 Subject: Fix STM32 Monotonic for peripherals with only two Clock Compare modules (#960) * Update dependencies of stm32g0 timer example * Replace obsolete probe-run with probe-rs run * Modify stm32 monotonic to work with timers that have only 2 compare modules * Add changelog * Fix typo --- rtic-monotonics/src/rp2040.rs | 2 +- rtic-monotonics/src/stm32.rs | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'rtic-monotonics/src') 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!"); } -- cgit v1.2.3