use crate::register::Register;
use bit_field::BitField;
#[repr(C)]
struct WatchdogRegs {
stctrlh: Register<u16>,
stctrll: Register<u16>,
tovalh: Register<u16>,
tovall: Register<u16>,
winh: Register<u16>,
winl: Register<u16>,
refresh: Register<u16>,
unlock: Register<u16>,
tmrouth: Register<u16>,
tmroutl: Register<u16>,
rstcnt: Register<u16>,
presc: Register<u16>,
}
pub struct Watchdog {
regs: &'static mut WatchdogRegs,
}
impl Watchdog {
pub unsafe fn get() -> Watchdog {
let regs = &mut *(0x4005_2000 as *mut _);
Watchdog { regs }
}
pub fn disable(&mut self) {
self.unlock();
self.regs.stctrlh.update(|ctrl| {
ctrl.set_bit(0, false);
});
}
fn unlock(&mut self) {
self.regs.unlock.write(0xC520);
self.regs.unlock.write(0xD928);
unsafe {
let mut dummy: u32 = 0;
core::ptr::write_volatile(&mut dummy, 0);
}
}
}