use core::time::Duration;
use crate::sys_ctrl::ClockConfig;
use cortex_m::peripheral::{DCB, DWT};
#[derive(Clone, Copy)]
pub struct MonoTimer {
freq: u32,
}
impl MonoTimer {
pub fn new(mut dwt: DWT, mut dcb: DCB, clocks: ClockConfig) -> Self {
dcb.enable_trace();
dwt.enable_cycle_counter();
Self {
freq: clocks.sys_freq(),
}
}
pub const fn frequency(self) -> u32 {
self.freq
}
pub fn now(self) -> Instant {
Instant {
now: DWT::cycle_count(),
}
}
}
#[derive(Clone, Copy)]
pub struct Instant {
now: u32,
}
impl Instant {
pub fn elapsed(self) -> u32 {
DWT::cycle_count().wrapping_sub(self.now)
}
}