diff options
author | 2016-09-27 18:35:29 -0500 | |
---|---|---|
committer | 2016-09-27 18:35:29 -0500 | |
commit | ddc7f255b57d0e6aeb9f3b1b7466b2e5c0c5fff0 (patch) | |
tree | ac8332c9d63b45082f81ce419045c9b16db1b270 /src/asm.rs | |
download | cortex-m-ddc7f255b57d0e6aeb9f3b1b7466b2e5c0c5fff0.tar.gz cortex-m-ddc7f255b57d0e6aeb9f3b1b7466b2e5c0c5fff0.tar.zst cortex-m-ddc7f255b57d0e6aeb9f3b1b7466b2e5c0c5fff0.zip |
initial commit
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"))] + () => {} + } +} |