1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//! Implementation Control Block

#[cfg(any(armv7m, armv8m, target_arch = "x86_64"))]
use volatile_register::RO;
use volatile_register::RW;

/// Register block
#[repr(C)]
pub struct RegisterBlock {
    /// Interrupt Controller Type Register
    ///
    /// The bottom four bits of this register give the number of implemented
    /// interrupt lines, divided by 32. So a value of `0b0010` indicates 64
    /// interrupts.
    #[cfg(any(armv7m, armv8m, target_arch = "x86_64"))]
    pub ictr: RO<u32>,

    /// The ICTR is not defined in the ARMv6-M Architecture Reference manual, so
    /// we replace it with this.
    #[cfg(not(any(armv7m, armv8m, target_arch = "x86_64")))]
    _reserved: u32,

    /// Auxiliary Control Register
    ///
    /// This register is entirely implementation defined -- the standard gives
    /// it an address, but does not define its role or contents.
    pub actlr: RW<u32>,

    /// Coprocessor Power Control Register
    #[cfg(armv8m)]
    pub cppwr: RW<u32>,
}