tinyboot_ch32_hal/pfic/rv2.rs
1/// Jump to an absolute address. Does not return.
2pub fn jump(addr: u32) -> ! {
3 let f: unsafe extern "C" fn() -> ! = unsafe { core::mem::transmute(addr as usize) };
4 unsafe { f() }
5}
6
7pub fn system_reset() -> ! {
8 // Clear reset status flags (RMVF) — required for boot mode transition
9 ch32_metapac::RCC.rstsckr().write(|w| w.0 = 1 << 24);
10 ch32_metapac::PFIC.cfgr().write(|w| {
11 w.set_keycode(0xBEEF);
12 w.set_resetsys(true);
13 });
14 loop {
15 core::hint::spin_loop();
16 }
17}