#[cfg(target_arch = "avr")]
use core::arch::asm;
#[inline(always)]
pub fn nop() {
cfg_if::cfg_if! {
if #[cfg(target_arch = "avr")] {
unsafe { asm!("nop") }
} else {
unimplemented!()
}
}
}
#[inline(always)]
pub fn sleep() {
cfg_if::cfg_if! {
if #[cfg(target_arch = "avr")] {
unsafe { asm!("sleep") }
} else {
unimplemented!()
}
}
}
#[inline(always)]
pub fn wdr() {
cfg_if::cfg_if! {
if #[cfg(target_arch = "avr")] {
unsafe { asm!("wdr") }
} else {
unimplemented!()
}
}
}
#[inline(always)]
pub fn delay_cycles(cycles: u32) {
cfg_if::cfg_if! {
if #[cfg(target_arch = "avr")] {
let mut cycles_bytes = cycles.to_le_bytes();
unsafe {
asm!(
"1:",
"subi {r0}, 6",
"sbci {r1}, 0",
"sbci {r2}, 0",
"sbci {r3}, 0",
"brcc 1b",
r0 = inout(reg_upper) cycles_bytes[0],
r1 = inout(reg_upper) cycles_bytes[1],
r2 = inout(reg_upper) cycles_bytes[2],
r3 = inout(reg_upper) cycles_bytes[3],
)
}
} else {
let _ = cycles;
unimplemented!()
}
}
}