63 lines
1.6 KiB
Rust
63 lines
1.6 KiB
Rust
use crate::time::Hertz;
|
|
|
|
pub const HBO_FREQ: Hertz = Hertz::from_raw(20_000_000);
|
|
|
|
/// Frozen clock frequencies
|
|
///
|
|
/// The existence of this value indicates that the clock configuration can no longer be changed.
|
|
/// The [self] module documentation gives some more information on how to retrieve an instance
|
|
/// of this structure.
|
|
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
|
|
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
|
pub struct Clocks {
|
|
sysclk: Hertz,
|
|
apb1: Hertz,
|
|
apb2: Hertz,
|
|
#[cfg(not(feature = "va41628"))]
|
|
adc_clk: Hertz,
|
|
}
|
|
|
|
impl Clocks {
|
|
#[doc(hidden)]
|
|
pub fn __new(final_sysclk: Hertz, #[cfg(not(feature = "va41628"))] adc_clk: Hertz) -> Self {
|
|
Self {
|
|
sysclk: final_sysclk,
|
|
apb1: final_sysclk / 2,
|
|
apb2: final_sysclk / 4,
|
|
#[cfg(not(feature = "va41628"))]
|
|
adc_clk,
|
|
}
|
|
}
|
|
|
|
/// Returns the frequency of the HBO clock
|
|
pub const fn hbo(&self) -> Hertz {
|
|
HBO_FREQ
|
|
}
|
|
|
|
/// Returns the frequency of the APB0 which is equal to the system clock.
|
|
pub const fn apb0(&self) -> Hertz {
|
|
self.sysclk()
|
|
}
|
|
|
|
/// Returns system clock divied by 2.
|
|
pub const fn apb1(&self) -> Hertz {
|
|
self.apb1
|
|
}
|
|
|
|
/// Returns system clock divied by 4.
|
|
pub const fn apb2(&self) -> Hertz {
|
|
self.apb2
|
|
}
|
|
|
|
/// Returns the system (core) frequency
|
|
pub const fn sysclk(&self) -> Hertz {
|
|
self.sysclk
|
|
}
|
|
|
|
/// Returns the ADC clock frequency which has a separate divider.
|
|
#[cfg(not(feature = "va41628"))]
|
|
pub const fn adc_clk(&self) -> Hertz {
|
|
self.adc_clk
|
|
}
|
|
}
|