1//! Application Program Status Register
2
3/// Application Program Status Register
4#[derive(Clone, Copy, Debug)]
5pub struct Apsr {
6 bits: u32,
7}
8
9impl Apsr {
10 /// Returns the contents of the register as raw bits
11 #[inline]
12 pub fn bits(self) -> u32 {
13 self.bits
14 }
15
16 /// DSP overflow and saturation flag
17 #[inline]
18 pub fn q(self) -> bool {
19 self.bits & (1 << 27) == (1 << 27)
20 }
21
22 /// Overflow flag
23 #[inline]
24 pub fn v(self) -> bool {
25 self.bits & (1 << 28) == (1 << 28)
26 }
27
28 /// Carry or borrow flag
29 #[inline]
30 pub fn c(self) -> bool {
31 self.bits & (1 << 29) == (1 << 29)
32 }
33
34 /// Zero flag
35 #[inline]
36 pub fn z(self) -> bool {
37 self.bits & (1 << 30) == (1 << 30)
38 }
39
40 /// Negative flag
41 #[inline]
42 pub fn n(self) -> bool {
43 self.bits & (1 << 31) == (1 << 31)
44 }
45}
46
47/// Reads the CPU register
48///
49/// **NOTE** This function is available if `cortex-m` is built with the `"inline-asm"` feature.
50#[inline]
51pub fn read() -> Apsr {
52 let bits: u32 = call_asm!(__apsr_r() -> u32);
53 Apsr { bits }
54}
55