pub use crate::common::ccm::Output;
pub mod clko1 {
pub use crate::chip::config::ccm::clko::Clko1Selection as Selection;
use crate::ral::{self, ccm::CCM};
#[inline]
pub fn is_enabled(ccm: &CCM) -> bool {
ral::read_reg!(ral::ccm, ccm, CCOSR, CLKO1_EN == 1)
}
#[inline]
pub fn enable(ccm: &mut CCM, enable: bool) {
ral::modify_reg!(ral::ccm, ccm, CCOSR, CLKO1_EN: enable as u32);
}
#[inline]
pub fn set_selection(ccm: &mut CCM, selection: Selection) {
ral::modify_reg!(ral::ccm, ccm, CCOSR, CLKO1_SEL: selection as u32);
}
#[inline]
pub fn set_divider(ccm: &mut CCM, divider: u32) {
let divider = divider.clamp(1, 8) - 1;
ral::modify_reg!(ral::ccm, ccm, CCOSR, CLKO1_DIV: divider);
}
#[inline]
pub fn divider(ccm: &CCM) -> u32 {
ral::read_reg!(ral::ccm, ccm, CCOSR, CLKO1_DIV) + 1
}
#[repr(u32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Output {
Clko1 = 0,
Clko2 = 1,
}
#[inline]
pub fn set_output(ccm: &mut CCM, output: Output) {
ral::modify_reg!(ral::ccm, ccm, CCOSR, CLK_OUT_SEL: output as u32)
}
}
pub mod clko2 {
pub use crate::chip::config::ccm::clko::Clko2Selection as Selection;
use crate::ral::{self, ccm::CCM};
#[inline]
pub fn is_enabled(ccm: &CCM) -> bool {
ral::read_reg!(ral::ccm, ccm, CCOSR, CLKO2_EN == 1)
}
#[inline]
pub fn enable(ccm: &mut CCM, enable: bool) {
ral::modify_reg!(ral::ccm, ccm, CCOSR, CLKO2_EN: enable as u32);
}
#[inline]
pub fn set_selection(ccm: &mut CCM, selection: Selection) {
ral::modify_reg!(ral::ccm, ccm, CCOSR, CLKO2_SEL: selection as u32);
}
#[inline]
pub fn set_divider(ccm: &mut CCM, divider: u32) {
let divider = divider.clamp(1, 8) - 1;
ral::modify_reg!(ral::ccm, ccm, CCOSR, CLKO2_DIV: divider);
}
#[inline]
pub fn divider(ccm: &CCM) -> u32 {
ral::read_reg!(ral::ccm, ccm, CCOSR, CLKO2_DIV) + 1
}
}