aboutsummaryrefslogtreecommitdiff
path: root/src/_arch/arm
diff options
context:
space:
mode:
authorChristian Cunningham <cc@localhost>2022-08-18 18:21:13 -0700
committerChristian Cunningham <cc@localhost>2022-08-18 18:21:13 -0700
commit6f1e6acb1a9775eef4b0d8879c102df86e207687 (patch)
tree0ec9c8102b4ddb96c789eaebd8abba2b7ebaf63a /src/_arch/arm
parent5494645e2607706655f8e3466f3ec858db303061 (diff)
Assembly stuff
Diffstat (limited to 'src/_arch/arm')
-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);
+ }
+}