crate::unstable_module! {
pub mod clocks;
}
pub(crate) mod regi2c;
pub(crate) use esp32c61 as pac;
#[cfg(i2s_driver_supported)]
#[cfg_attr(not(feature = "unstable"), allow(unused))]
pub(crate) fn i2s_sclk_frequency() -> u32 {
clocks::pll_f160m_frequency()
}
#[cfg(feature = "rt")]
pub(crate) fn riscv_preinit() {}
pub(crate) fn pre_init() {
for m in crate::peripherals::TEE::regs().m_mode_ctrl_iter() {
m.reset();
}
crate::peripherals::GPIO::regs().enable().reset();
crate::peripherals::PCR::regs()
.reset_event_bypass()
.modify(|_, w| w.reset_event_bypass().clear_bit());
}
pub(crate) fn enable_branch_predictor() {
const MHCR_RS: u32 = 1 << 4; const MHCR_BFE: u32 = 1 << 5; const MHCR_BTB: u32 = 1 << 12; unsafe {
core::arch::asm!("csrrs x0, 0x7c1, {0}", in(reg) MHCR_RS | MHCR_BFE | MHCR_BTB);
}
}
#[doc(hidden)]
#[crate::ram]
pub unsafe fn cache_writeback_addr(addr: u32, size: u32) {
unsafe extern "C" {
fn Cache_WriteBack_Addr(addr: u32, size: u32);
}
unsafe {
Cache_WriteBack_Addr(addr, size);
}
}
#[doc(hidden)]
#[crate::ram]
pub unsafe fn cache_invalidate_addr(addr: u32, size: u32) {
unsafe extern "C" {
fn Cache_Invalidate_Addr(addr: u32, size: u32);
}
unsafe {
Cache_Invalidate_Addr(addr, size);
}
}