esp-hal/esp32c3-hal/src/rtc_cntl.rs
2022-03-01 14:25:36 +01:00

50 lines
1.2 KiB
Rust

use crate::pac::RTC_CNTL;
pub struct RtcCntl {
rtc_cntl: RTC_CNTL,
}
impl RtcCntl {
pub fn new(rtc_cntl: RTC_CNTL) -> Self {
Self { rtc_cntl }
}
pub fn set_super_wdt_enable(&mut self, enable: bool) {
self.set_swd_write_protection(false);
self.rtc_cntl
.swd_conf
.write(|w| w.swd_auto_feed_en().bit(!enable));
self.set_swd_write_protection(true);
}
fn set_swd_write_protection(&mut self, enable: bool) {
let wkey = if enable { 0u32 } else { 0x8F1D_312A };
self.rtc_cntl
.swd_wprotect
.write(|w| unsafe { w.swd_wkey().bits(wkey) });
}
pub fn set_wdt_enable(&mut self, enable: bool) {
self.set_wdt_write_protection(false);
if !enable {
self.rtc_cntl.wdtconfig0.write(|w| unsafe { w.bits(0) });
} else {
self.rtc_cntl.wdtconfig0.write(|w| w.wdt_en().bit(enable));
}
self.set_wdt_write_protection(true);
}
fn set_wdt_write_protection(&mut self, enable: bool) {
let wkey = if enable { 0u32 } else { 0x50D8_3AA1 };
self.rtc_cntl
.wdtwprotect
.write(|w| unsafe { w.wdt_wkey().bits(wkey) });
}
}