use super::{SysReg, SysRegRead, SysRegWrite};
#[bitbybit::bitfield(u32)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Sctlr {
#[bits(31..=31, rw)]
ie: bool,
#[bits(30..=30, rw)]
te: bool,
#[bits(27..=27, rw)]
nmfi: bool,
#[bits(25..=25, rw)]
ee: bool,
#[bits(22..=22, rw)]
u: bool,
#[bits(21..=21, rw)]
fi: bool,
#[bits(18..=18, rw)]
dz: bool,
#[bits(17..=17, rw)]
br: bool,
#[bits(14..=14, rw)]
rr: bool,
#[bits(13..=13, rw)]
v: bool,
#[bits(12..=12, rw)]
i: bool,
#[bits(11..=11, rw)]
z: bool,
#[bits(10..=10, rw)]
sw: bool,
#[bits(2..=2, rw)]
c: bool,
#[bits(1..=1, rw)]
a: bool,
#[bits(0..=0, rw)]
m: bool,
}
impl SysReg for Sctlr {
const CP: u32 = 15;
const CRN: u32 = 1;
const OP1: u32 = 0;
const CRM: u32 = 0;
const OP2: u32 = 0;
}
impl SysRegRead for Sctlr {}
impl SysRegWrite for Sctlr {}
impl Sctlr {
#[inline]
pub fn read() -> Self {
unsafe { Self::new_with_raw_value(<Self as SysRegRead>::read_raw()) }
}
#[inline]
pub fn write(_value: Self) {
unsafe {
<Self as SysRegWrite>::write_raw(_value.raw_value());
}
}
#[inline]
pub fn modify<F>(f: F)
where
F: FnOnce(&mut Self),
{
let mut value = Self::read();
f(&mut value);
Self::write(value);
}
}
impl core::fmt::Debug for Sctlr {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(
f,
"SCTLR {{ IE={} TE={} NMFI={} EE={} U={} FI={} DZ={} BR={} RR={} V={} I={} Z={} SW={} C={} A={} M={} }}",
self.ie() as u8,
self.te() as u8,
self.nmfi() as u8,
self.ee() as u8,
self.u() as u8,
self.fi() as u8,
self.dz() as u8,
self.br() as u8,
self.rr() as u8,
self.v() as u8,
self.i() as u8,
self.z() as u8,
self.sw() as u8,
self.c() as u8,
self.a() as u8,
self.m() as u8,
)
}
}
#[cfg(feature = "defmt")]
impl defmt::Format for Sctlr {
fn format(&self, f: defmt::Formatter) {
defmt::write!(f, "SCTLR {{ IE={0=31..32} TE={0=30..31} NMFI={0=27..28} EE={0=25..26} U={0=22..23} FI={0=21..22} DZ={0=18..19} BR={0=17..18} RR={0=14..15} V={0=13..14} I={0=12..13} Z={0=11..12} SW={0=10..11} C={0=2..3} A={0=1..2} M={0=0..1} }}", self.raw_value())
}
}