diff options
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); + } +} |