aarch32_cpu/register/
sctlr.rs1use super::{SysReg, SysRegRead, SysRegWrite};
4
5#[bitbybit::bitfield(u32)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub struct Sctlr {
9 #[bits(31..=31, rw)]
11 ie: bool,
12 #[bits(30..=30, rw)]
14 te: bool,
15 #[bits(27..=27, rw)]
17 nmfi: bool,
18 #[bits(25..=25, rw)]
20 ee: bool,
21 #[bits(22..=22, rw)]
23 u: bool,
24 #[bits(21..=21, rw)]
26 fi: bool,
27 #[bits(18..=18, rw)]
29 dz: bool,
30 #[bits(17..=17, rw)]
32 br: bool,
33 #[bits(14..=14, rw)]
35 rr: bool,
36 #[bits(13..=13, rw)]
38 v: bool,
39 #[bits(12..=12, rw)]
41 i: bool,
42 #[bits(11..=11, rw)]
44 z: bool,
45 #[bits(10..=10, rw)]
47 sw: bool,
48 #[bits(2..=2, rw)]
50 c: bool,
51 #[bits(1..=1, rw)]
53 a: bool,
54 #[bits(0..=0, rw)]
56 m: bool,
57}
58
59impl SysReg for Sctlr {
60 const CP: u32 = 15;
61 const CRN: u32 = 1;
62 const OP1: u32 = 0;
63 const CRM: u32 = 0;
64 const OP2: u32 = 0;
65}
66
67impl SysRegRead for Sctlr {}
68
69impl SysRegWrite for Sctlr {}
70
71impl Sctlr {
72 #[inline]
74 pub fn read() -> Self {
75 unsafe { Self::new_with_raw_value(<Self as SysRegRead>::read_raw()) }
76 }
77
78 #[inline]
80 pub fn write(_value: Self) {
81 unsafe {
83 <Self as SysRegWrite>::write_raw(_value.raw_value());
84 }
85 }
86
87 #[inline]
89 pub fn modify<F>(f: F)
90 where
91 F: FnOnce(&mut Self),
92 {
93 let mut value = Self::read();
94 f(&mut value);
95 Self::write(value);
96 }
97}
98
99impl core::fmt::Debug for Sctlr {
100 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
101 write!(
102 f,
103 "SCTLR {{ IE={} TE={} NMFI={} EE={} U={} FI={} DZ={} BR={} RR={} V={} I={} Z={} SW={} C={} A={} M={} }}",
104 self.ie() as u8,
105 self.te() as u8,
106 self.nmfi() as u8,
107 self.ee() as u8,
108 self.u() as u8,
109 self.fi() as u8,
110 self.dz() as u8,
111 self.br() as u8,
112 self.rr() as u8,
113 self.v() as u8,
114 self.i() as u8,
115 self.z() as u8,
116 self.sw() as u8,
117 self.c() as u8,
118 self.a() as u8,
119 self.m() as u8,
120 )
121 }
122}
123
124#[cfg(feature = "defmt")]
125impl defmt::Format for Sctlr {
126 fn format(&self, f: defmt::Formatter) {
127 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())
128 }
129}