aboutsummaryrefslogtreecommitdiff
path: root/src/asm.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/asm.rs')
-rw-r--r--src/asm.rs80
1 files changed, 41 insertions, 39 deletions
diff --git a/src/asm.rs b/src/asm.rs
index 2e3368a..c82d45d 100644
--- a/src/asm.rs
+++ b/src/asm.rs
@@ -1,58 +1,60 @@
//! Miscellaneous assembly instructions
-/// Puts the processor in Debug state. Debuggers can pick this up as a "breakpoint".
+/// 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).
-#[cfg(target_arch = "arm")]
-#[macro_export]
-macro_rules! bkpt {
- () => {
- asm!("bkpt" :::: "volatile");
- };
- ($imm:expr) => {
- asm!(concat!("bkpt #", stringify!($imm)) :::: "volatile");
- };
+/// NOTE calling `bkpt` when the processor is not connected to a debugger will
+/// cause an exception
+#[inline(always)]
+pub fn bkpt() {
+ #[cfg(target_arch = "arm")]
+ unsafe {
+ asm!("bkpt"
+ :
+ :
+ :
+ : "volatile");
+ }
}
-/// 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).
-#[cfg(not(target_arch = "arm"))]
-#[macro_export]
-macro_rules! bkpt {
- () => {
- asm!("nop" :::: "volatile");
- };
- ($e:expr) => {
- asm!("nop" :::: "volatile");
- };
+/// A no-operation. Useful to prevent delay loops from being optimized away.
+pub fn nop() {
+ unsafe {
+ asm!("nop"
+ :
+ :
+ :
+ : "volatile");
+ }
}
-
-/// Wait for event
-pub unsafe fn wfe() {
+/// Wait For Event
+pub fn wfe() {
match () {
#[cfg(target_arch = "arm")]
- () => asm!("wfe" :::: "volatile"),
+ () => unsafe {
+ asm!("wfe"
+ :
+ :
+ :
+ : "volatile")
+ },
#[cfg(not(target_arch = "arm"))]
() => {}
}
}
-/// Wait for interupt
-pub unsafe fn wfi() {
+/// Wait For Interrupt
+pub fn wfi() {
match () {
#[cfg(target_arch = "arm")]
- () => asm!("wfi" :::: "volatile"),
+ () => unsafe{
+ asm!("wfi"
+ :
+ :
+ :
+ : "volatile")
+ },
#[cfg(not(target_arch = "arm"))]
() => {}
}
}
-
-/// A no-operation. Useful to stop delay loops being elided.
-pub fn nop() {
- unsafe {
- asm!("nop" :::: "volatile");
- }
-}