diff options
Diffstat (limited to 'rtic-monotonics/src/systick.rs')
| -rw-r--r-- | rtic-monotonics/src/systick.rs | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/rtic-monotonics/src/systick.rs b/rtic-monotonics/src/systick.rs index 265ca9a..9bd056c 100644 --- a/rtic-monotonics/src/systick.rs +++ b/rtic-monotonics/src/systick.rs @@ -40,11 +40,11 @@ use cortex_m::peripheral::SYST; pub use fugit; cfg_if::cfg_if! { if #[cfg(feature = "systick-64bit")] { - pub use fugit::ExtU64; + pub use fugit::{ExtU64, ExtU64Ceil}; use atomic_polyfill::AtomicU64; static SYSTICK_CNT: AtomicU64 = AtomicU64::new(0); } else { - pub use fugit::ExtU32; + pub use fugit::{ExtU32, ExtU32Ceil}; use atomic_polyfill::AtomicU32; static SYSTICK_CNT: AtomicU32 = AtomicU32::new(0); } @@ -156,6 +156,7 @@ impl Monotonic for Systick { } const ZERO: Self::Instant = Self::Instant::from_ticks(0); + const TICK_PERIOD: Self::Duration = Self::Duration::from_ticks(1); fn now() -> Self::Instant { if Self::systick().has_wrapped() { @@ -188,27 +189,17 @@ impl Monotonic for Systick { fn disable_timer() {} } -#[cfg(feature = "embedded-hal-async")] -impl embedded_hal_async::delay::DelayUs for Systick { - async fn delay_us(&mut self, us: u32) { - #[cfg(feature = "systick-64bit")] - let us = u64::from(us); - Self::delay(us.micros()).await; - } +cfg_if::cfg_if! { + if #[cfg(feature = "systick-64bit")] { + rtic_time::embedded_hal_delay_impl_fugit64!(Systick); - async fn delay_ms(&mut self, ms: u32) { - #[cfg(feature = "systick-64bit")] - let ms = u64::from(ms); - Self::delay(ms.millis()).await; - } -} + #[cfg(feature = "embedded-hal-async")] + rtic_time::embedded_hal_async_delay_impl_fugit64!(Systick); + } else { + rtic_time::embedded_hal_delay_impl_fugit32!(Systick); -impl embedded_hal::delay::DelayUs for Systick { - fn delay_us(&mut self, us: u32) { - #[cfg(feature = "systick-64bit")] - let us = u64::from(us); - let done = Self::now() + us.micros(); - while Self::now() < done {} + #[cfg(feature = "embedded-hal-async")] + rtic_time::embedded_hal_async_delay_impl_fugit32!(Systick); } } |
