use crate::ral::{self, ccm::CCM};
#[inline(always)]
pub fn set_divider(ccm: &mut CCM, divider: u32) {
let podf = divider.clamp(1, 8) - 1;
ral::modify_reg!(ral::ccm, ccm, CBCDR, AHB_PODF: podf);
super::wait_handshake(ccm);
}
#[inline(always)]
pub fn divider(ccm: &CCM) -> u32 {
ral::read_reg!(ral::ccm, ccm, CBCDR, AHB_PODF) + 1
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u32)]
pub enum Selection {
PrePeriphClkSel = 0,
PeriphClk2Sel = 1,
}
#[inline(always)]
pub fn set_selection(ccm: &mut CCM, selection: Selection) {
ral::modify_reg!(ral::ccm, ccm, CBCDR, PERIPH_CLK_SEL: selection as u32);
super::wait_handshake(ccm);
}
#[inline(always)]
pub fn selection(ccm: &CCM) -> Selection {
match ral::read_reg!(ral::ccm, ccm, CBCDR, PERIPH_CLK_SEL) {
0 => Selection::PrePeriphClkSel,
1 => Selection::PeriphClk2Sel,
_ => unreachable!(),
}
}