tinyboot-ch32-hal 0.2.1

Hardware abstraction layer for tinyboot on CH32 microcontrollers
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/// Jump to an absolute address. Does not return.
pub fn jump(addr: u32) -> ! {
    let f: unsafe extern "C" fn() -> ! = unsafe { core::mem::transmute(addr as usize) };
    unsafe { f() }
}

pub fn system_reset() -> ! {
    // Clear reset status flags (RMVF) — required for boot mode transition
    ch32_metapac::RCC.rstsckr().write(|w| w.0 = 1 << 24);
    ch32_metapac::PFIC.cfgr().write(|w| {
        w.set_keycode(0xBEEF);
        w.set_resetsys(true);
    });
    loop {
        core::hint::spin_loop();
    }
}