1use critical_section::CriticalSection;
2
3mod clock;
4pub use clock::*;
5
6mod clock_configure;
7pub use clock_configure::*;
8
9use crate::time::Hertz;
10
11pub(crate) trait SealedRccEnableReset {
13 fn rcc_enable() {}
14
15 fn rcc_disable() {}
16
17 fn rcc_reset() {}
18}
19#[allow(private_bounds)]
20pub trait RccEnableReset: SealedRccEnableReset + 'static {}
21
22pub(crate) trait SealedRccGetFreq {
23 fn get_freq() -> Option<Hertz>;
26}
27
28#[allow(private_bounds)]
29pub trait RccGetFreq: SealedRccGetFreq + 'static {
30 fn frequency() -> Option<Hertz> {
33 Self::get_freq()
34 }
35}
36
37pub fn enable_with_cs<T: RccEnableReset>(_cs: CriticalSection) {
44 T::rcc_enable();
45}
46
47pub fn enable<T: RccEnableReset>() {
54 critical_section::with(|cs| enable_with_cs::<T>(cs));
55}
56
57pub fn enable_and_reset_with_cs<T: RccEnableReset>(_cs: CriticalSection) {
64 T::rcc_enable();
65 T::rcc_reset();
66}
67
68
69pub fn enable_and_reset<T: RccEnableReset>() {
76 critical_section::with(|cs| enable_and_reset_with_cs::<T>(cs));
77}
78
79pub fn disable_with_cs<T: RccEnableReset>(_cs: CriticalSection) {
86 T::rcc_disable();
87}
88
89pub fn disable<T: RccEnableReset>() {
96 critical_section::with(|cs| disable_with_cs::<T>(cs));
97}