use critical_section::CriticalSection;
mod clock;
pub use clock::*;
mod clock_configure;
pub use clock_configure::*;
use crate::time::Hertz;
pub(crate) trait SealedRccEnableReset {
fn rcc_enable() {}
fn rcc_disable() {}
fn rcc_reset() {}
}
#[allow(private_bounds)]
pub trait RccEnableReset: SealedRccEnableReset + 'static {}
pub(crate) trait SealedRccGetFreq {
fn get_freq() -> Option<Hertz>;
}
#[allow(private_bounds)]
pub trait RccGetFreq: SealedRccGetFreq + 'static {
fn frequency() -> Option<Hertz> {
Self::get_freq()
}
}
pub fn enable_with_cs<T: RccEnableReset>(_cs: CriticalSection) {
T::rcc_enable();
}
pub fn enable<T: RccEnableReset>() {
critical_section::with(|cs| enable_with_cs::<T>(cs));
}
pub fn enable_and_reset_with_cs<T: RccEnableReset>(_cs: CriticalSection) {
T::rcc_enable();
T::rcc_reset();
}
pub fn enable_and_reset<T: RccEnableReset>() {
critical_section::with(|cs| enable_and_reset_with_cs::<T>(cs));
}
pub fn disable_with_cs<T: RccEnableReset>(_cs: CriticalSection) {
T::rcc_disable();
}
pub fn disable<T: RccEnableReset>() {
critical_section::with(|cs| disable_with_cs::<T>(cs));
}