Add Clock trait

This commit is contained in:
Dario Nieuwenhuis
2020-09-25 23:38:42 +02:00
parent cf1d604749
commit 19a89b5c14
5 changed files with 44 additions and 19 deletions

View File

@ -2,6 +2,8 @@ use core::cell::Cell;
use core::ops::Deref;
use core::sync::atomic::{AtomicU32, Ordering};
use embassy::time::Clock;
use crate::interrupt;
use crate::interrupt::{CriticalSection, Mutex};
use crate::pac::{rtc0, Interrupt, RTC0, RTC1};
@ -100,12 +102,6 @@ impl<T: Instance> RTC<T> {
interrupt::enable(T::INTERRUPT);
}
pub fn now(&self) -> u64 {
let counter = self.rtc.counter.read().bits();
let period = self.period.load(Ordering::Relaxed);
calc_now(period, counter)
}
fn on_interrupt(&self) {
if self.rtc.events_ovrflw.read().bits() == 1 {
self.rtc.events_ovrflw.write(|w| w);
@ -203,6 +199,14 @@ impl<T: Instance> RTC<T> {
}
}
impl<T: Instance> embassy::time::Clock for RTC<T> {
fn now(&self) -> u64 {
let counter = self.rtc.counter.read().bits();
let period = self.period.load(Ordering::Relaxed);
calc_now(period, counter)
}
}
pub struct Alarm<T: Instance> {
n: usize,
rtc: &'static RTC<T>,