aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmil Fresk <emil.fresk@gmail.com>2023-01-24 12:34:11 +0100
committerHenrik Tjäder <henrik@tjaders.com>2023-03-01 00:33:32 +0100
commitbdf577c30800aedb0ab6b27768e228c057e18fb5 (patch)
treed1d35bd0f32b4caffc3a0c7b8fef0ce7e3dc259c
parent143cd136eeeb2856d06a1b83e3ef5682f720c251 (diff)
Systick runs at 1 kHz
-rw-r--r--rtic-monotonics/src/systick_monotonic.rs25
1 files changed, 13 insertions, 12 deletions
diff --git a/rtic-monotonics/src/systick_monotonic.rs b/rtic-monotonics/src/systick_monotonic.rs
index 7c713b6..af17f93 100644
--- a/rtic-monotonics/src/systick_monotonic.rs
+++ b/rtic-monotonics/src/systick_monotonic.rs
@@ -10,11 +10,12 @@ use cortex_m::peripheral::SYST;
use embedded_hal_async::delay::DelayUs;
use fugit::ExtU32;
-/// Systick implementing `rtic_monotonic::Monotonic` which runs at a
-/// settable rate using the `TIMER_HZ` parameter.
-pub struct Systick<const TIMER_HZ: u32>;
+const TIMER_HZ: u32 = 1_000;
-impl<const TIMER_HZ: u32> Systick<TIMER_HZ> {
+/// Systick implementing `rtic_monotonic::Monotonic` which runs at 1 kHz.
+pub struct Systick;
+
+impl Systick {
/// Start a `Monotonic` based on SysTick.
///
/// The `sysclk` parameter is the speed at which SysTick runs at. This value should come from
@@ -49,7 +50,7 @@ impl<const TIMER_HZ: u32> Systick<TIMER_HZ> {
static SYSTICK_CNT: AtomicU32 = AtomicU32::new(0);
-impl<const TIMER_HZ: u32> Monotonic for Systick<TIMER_HZ> {
+impl Monotonic for Systick {
type Instant = fugit::TimerInstantU32<TIMER_HZ>;
type Duration = fugit::TimerDurationU32<TIMER_HZ>;
@@ -87,17 +88,17 @@ impl<const TIMER_HZ: u32> Monotonic for Systick<TIMER_HZ> {
}
/// Timer queue wrapper to implement traits on
-pub struct SystickTimerQueue<const TIMER_HZ: u32>(TimerQueue<Systick<TIMER_HZ>>);
+pub struct SystickTimerQueue(TimerQueue<Systick>);
-impl<const TIMER_HZ: u32> SystickTimerQueue<TIMER_HZ> {
+impl SystickTimerQueue {
/// Create a new timer queue.
pub const fn new() -> Self {
Self(TimerQueue::new())
}
}
-impl<const TIMER_HZ: u32> Deref for SystickTimerQueue<TIMER_HZ> {
- type Target = TimerQueue<Systick<TIMER_HZ>>;
+impl Deref for SystickTimerQueue {
+ type Target = TimerQueue<Systick>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
@@ -105,7 +106,7 @@ impl<const TIMER_HZ: u32> Deref for SystickTimerQueue<TIMER_HZ> {
}
}
-impl<const TIMER_HZ: u32> DelayUs for SystickTimerQueue<TIMER_HZ> {
+impl DelayUs for SystickTimerQueue {
type Error = core::convert::Infallible;
async fn delay_us(&mut self, us: u32) -> Result<(), Self::Error> {
@@ -122,8 +123,8 @@ impl<const TIMER_HZ: u32> DelayUs for SystickTimerQueue<TIMER_HZ> {
/// Register the Systick interrupt and crate a timer queue with a specific name and speed.
#[macro_export]
macro_rules! make_systick_timer_queue {
- ($timer_queue_name:ident, $systick_speed:expr) => {
- static $timer_queue_name: SystickTimerQueue<$systick_speed> = SystickTimerQueue::new();
+ ($timer_queue_name:ident) => {
+ static $timer_queue_name: SystickTimerQueue = SystickTimerQueue::new();
#[no_mangle]
#[allow(non_snake_case)]