Skip to main content

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}