1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
//! A module for working with MCU. use core::ptr::write_volatile; const AIRCR: usize = 0xE000_ED0C; /// Wait for Interrupt. pub fn wait_for_interrupt() { unsafe { asm!("wfi" :::: "volatile"); } } /// Performs a system reset request. /// /// This function writes to the application interrupt and reset control register /// (`AIRCR`). pub fn reset_request() { unsafe { write_volatile(AIRCR as *mut usize, 0x05FA_0004); } } /// Spins a specified amount of CPU cycles. pub fn spin(mut _cycles: u32) { unsafe { asm!(" 0: subs $0, $0, #2 bhi 0b " : "+r"(_cycles) : : "cc" : "volatile"); } }