aboutsummaryrefslogtreecommitdiff
path: root/src/_arch
diff options
context:
space:
mode:
Diffstat (limited to 'src/_arch')
-rw-r--r--src/_arch/arm/asm.rs35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/_arch/arm/asm.rs b/src/_arch/arm/asm.rs
index c400f2f..c1af5b4 100644
--- a/src/_arch/arm/asm.rs
+++ b/src/_arch/arm/asm.rs
@@ -1,9 +1,42 @@
//! Wrapping ARMv7-A Instructions
/// WFE
-/// #[inline(always)]
+#[inline(always)]
pub fn wfe() {
unsafe {
core::arch::asm!("wfe", options(nomem, nostack))
}
}
+
+/// NOP
+#[inline(always)]
+pub fn nop() {
+ unsafe {
+ core::arch::asm!("nop", options(nomem, nostack))
+ }
+}
+
+/// Store u32 to address
+#[inline]
+pub fn store32(addr: u32, value: u32) {
+ unsafe {
+ *(addr as *mut u32) = value;
+ }
+}
+
+/// Read u32 value from address
+#[inline]
+pub fn load32(addr: u32) -> u32 {
+ unsafe {
+ *(addr as *mut u32)
+ }
+}
+
+/// Wait for n cycles
+#[inline]
+pub fn spin_for_n_cycles(n: u32) {
+ unsafe {
+ core::arch::asm!("1: subs r1, #1
+ bne 1b", in("r1") n);
+ }
+}