diff options
Diffstat (limited to 'src/asm.rs')
-rw-r--r-- | src/asm.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/asm.rs b/src/asm.rs new file mode 100644 index 0000000..3337626 --- /dev/null +++ b/src/asm.rs @@ -0,0 +1,35 @@ +//! Miscellaneous assembly instructions + +/// Puts the processor in Debug state. Debuggers can pick this up as a "breakpoint". +/// +/// Optionally, an "immediate" value (in the 0-255 range) can be passed to `bkpt!`. The debugger can +/// then read this value using the Program Counter (PC). +#[macro_export] +macro_rules! bkpt { + () => { + asm!("bkpt" :::: "volatile"); + }; + ($imm:expr) => { + asm!(concat!("bkpt #", stringify!($imm)) :::: "volatile"); + }; +} + +/// Wait for event +pub unsafe fn wfe() { + match () { + #[cfg(target_arch = "arm")] + () => asm!("wfe" :::: "volatile"), + #[cfg(not(target_arch = "arm"))] + () => {} + } +} + +/// Wait for interupt +pub unsafe fn wfi() { + match () { + #[cfg(target_arch = "arm")] + () => asm!("wfi" :::: "volatile"), + #[cfg(not(target_arch = "arm"))] + () => {} + } +} |