From 6f1e6acb1a9775eef4b0d8879c102df86e207687 Mon Sep 17 00:00:00 2001 From: Christian Cunningham Date: Thu, 18 Aug 2022 18:21:13 -0700 Subject: Assembly stuff --- src/_arch/arm/asm.rs | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'src/_arch/arm/asm.rs') 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); + } +} -- cgit v1.2.1