timeout_trait/
utils.rs

1use super::fugit::KilohertzU32;
2use core::cell::Cell;
3
4/// Can be used as a static holder.
5/// You can use `AtomicU32` or `AtomicCell` instead.
6pub struct FrequencyHolder {
7    frequency: Cell<KilohertzU32>,
8}
9
10unsafe impl Sync for FrequencyHolder {}
11
12impl FrequencyHolder {
13    pub const fn new(frequency: KilohertzU32) -> Self {
14        Self {
15            frequency: Cell::new(frequency),
16        }
17    }
18
19    pub fn set(&self, frequency: KilohertzU32) {
20        critical_section::with(|_| {
21            self.frequency.set(frequency);
22        })
23    }
24
25    pub fn get(&self) -> KilohertzU32 {
26        self.frequency.get()
27    }
28}