#[cfg(any(armv7m, armv8m))]
use core::arch::asm;
#[cfg(any(armv7m, armv8m))]
use core::sync::atomic::{Ordering, compiler_fence};
use cortex_m_macros::asm_cfg;
#[inline]
#[asm_cfg(any(armv7m, armv8m_main))]
pub fn write(basepri: u8) {
#[cfg(not(feature = "cm7-r0p1"))]
{
unsafe {
asm!(
"msr BASEPRI_MAX, {}",
"isb",
in(reg) basepri,
options(nostack, preserves_flags)
)
};
}
#[cfg(feature = "cm7-r0p1")]
{
unsafe {
asm!(
"mrs {1}, PRIMASK",
"cpsid i",
"tst.w {1}, #1",
"msr BASEPRI_MAX, {0}",
"isb",
"it ne",
"bxne lr",
"cpsie i",
in(reg) basepri,
out(reg) _,
options(nostack, preserves_flags),
)
};
}
compiler_fence(Ordering::Acquire);
}