diff options
author | Christian Cunningham <cc@localhost> | 2022-08-18 18:21:13 -0700 |
---|---|---|
committer | Christian Cunningham <cc@localhost> | 2022-08-18 18:21:13 -0700 |
commit | 6f1e6acb1a9775eef4b0d8879c102df86e207687 (patch) | |
tree | 0ec9c8102b4ddb96c789eaebd8abba2b7ebaf63a /src/_arch/arm | |
parent | 5494645e2607706655f8e3466f3ec858db303061 (diff) |
Assembly stuff
Diffstat (limited to 'src/_arch/arm')
-rw-r--r-- | src/_arch/arm/asm.rs | 35 |
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); + } +} |