use crate::peripherals::CldoCrg;
use crate::system::{Clocks, System};
pub struct ClockControl<'d> {
cldo_crg: CldoCrg<'d>,
}
impl<'d> ClockControl<'d> {
pub fn configure_system(system: System<'d>) -> Self {
Self { cldo_crg: system.cldo_crg }
}
pub fn freeze(self) -> Clocks {
Clocks::default()
}
pub fn enable_uart(&self, uart_idx: usize) {
let cken = self.cldo_crg.register_block();
let bits = cken.cken_ctl1().read();
let bit = match uart_idx {
0 => 18,
1 => 19,
2 => 20,
_ => unreachable!(),
};
cken.cken_ctl1().write(|w| unsafe { w.bits(bits.bits() | (1 << bit)) });
}
pub fn enable_i2c(&self, i2c_idx: usize) {
let cken = self.cldo_crg.register_block();
let bits = cken.cken_ctl0().read();
let bit = match i2c_idx {
0 => 18,
1 => 19,
_ => unreachable!(),
};
cken.cken_ctl0().write(|w| unsafe { w.bits(bits.bits() | (1 << bit)) });
}
pub fn enable_spi(&self) {
let cken = self.cldo_crg.register_block();
let bits = cken.cken_ctl1().read();
cken.cken_ctl1().write(|w| unsafe { w.bits(bits.bits() | (1 << 25)) });
}
pub fn enable_pwm(&self) {
let cken = self.cldo_crg.register_block();
let bits = cken.cken_ctl0().read();
cken.cken_ctl0().write(|w| unsafe { w.bits(bits.bits() | (0x1FF << 2)) });
}
pub fn enable_timer(&self) {
let cken = self.cldo_crg.register_block();
let bits0 = cken.cken_ctl0().read();
cken.cken_ctl0().write(|w| unsafe { w.bits(bits0.bits() | (1 << 21)) });
}
}