use strum::FromRepr;
use crate::{
clock::XtalClock,
peripherals::RTC_CNTL,
rtc_cntl::{RtcCalSel, RtcClock, RtcFastClock, RtcSlowClock},
};
pub(crate) fn init() {}
pub(crate) fn configure_clock() {
assert!(matches!(
RtcClock::get_xtal_freq(),
XtalClock::RtcXtalFreq40M
));
RtcClock::set_fast_freq(RtcFastClock::RtcFastClock8m);
let cal_val = loop {
RtcClock::set_slow_freq(RtcSlowClock::RtcSlowClockRtc);
let res = RtcClock::calibrate(RtcCalSel::RtcCalRtcMux, 1024);
if res != 0 {
break res;
}
};
unsafe {
let rtc_cntl = &*RTC_CNTL::ptr();
rtc_cntl.store1().write(|w| w.bits(cal_val));
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromRepr)]
pub enum SocResetReason {
ChipPowerOn = 0x01,
CoreSw = 0x03,
CoreDeepSleep = 0x05,
CoreMwdt0 = 0x07,
CoreMwdt1 = 0x08,
CoreRtcWdt = 0x09,
CpuMwdt0 = 0x0B,
CpuSw = 0x0C,
CpuRtcWdt = 0x0D,
SysBrownOut = 0x0F,
SysRtcWdt = 0x10,
CpuMwdt1 = 0x11,
SysSuperWdt = 0x12,
SysClkGlitch = 0x13,
CoreEfuseCrc = 0x14,
CoreUsbUart = 0x15,
CoreUsbJtag = 0x16,
CorePwrGlitch = 0x17,
}