use gd32vf103_pac::CTIMER;
pub struct CoreTimer {
ctimer: CTIMER,
}
impl CoreTimer {
pub fn new(ctimer: CTIMER) -> Self {
CoreTimer { ctimer }
}
pub fn free(self) -> CTIMER {
self.ctimer
}
#[doc(hidden)]
pub fn get_value(&self) -> u64 {
let hi: u32 = self.ctimer.mtime_hi.read().bits();
let lo: u32 = self.ctimer.mtime_lo.read().bits();
if hi == self.ctimer.mtime_hi.read().bits() {
(hi as u64) << 32 | (lo as u64)
} else {
(self.ctimer.mtime_hi.read().bits() as u64) << 32
| (self.ctimer.mtime_lo.read().bits() as u64)
}
}
#[inline]
pub fn mtime_hi(&self) -> u32 {
self.ctimer.mtime_hi.read().bits()
}
#[inline]
pub fn mtime_lo(&self) -> u32 {
self.ctimer.mtime_lo.read().bits()
}
}