diff --git a/chips/nrf52/src/uicr.rs b/chips/nrf52/src/uicr.rs index 6bb6c86b7..3bb8b5a7d 100644 --- a/chips/nrf52/src/uicr.rs +++ b/chips/nrf52/src/uicr.rs @@ -1,38 +1,45 @@ //! User information configuration registers -//! -//! Minimal implementation to support activation of the reset button on -//! nRF52-DK. + use enum_primitive::cast::FromPrimitive; -use kernel::common::registers::{register_bitfields, ReadWrite}; +use kernel::common::registers::{register_bitfields, register_structs, ReadWrite}; use kernel::common::StaticRef; +use kernel::hil; +use kernel::ReturnCode; use crate::gpio::Pin; const UICR_BASE: StaticRef = - unsafe { StaticRef::new(0x10001200 as *const UicrRegisters) }; - -#[repr(C)] -struct UicrRegisters { - /// Mapping of the nRESET function (see POWER chapter for details) - /// - Address: 0x200 - 0x204 - pselreset0: ReadWrite, - /// Mapping of the nRESET function (see POWER chapter for details) - /// - Address: 0x204 - 0x208 - pselreset1: ReadWrite, - /// Access Port protection - /// - Address: 0x208 - 0x20c - approtect: ReadWrite, - /// Setting of pins dedicated to NFC functionality: NFC antenna or GPIO - /// - Address: 0x20c - 0x210 - nfcpins: ReadWrite, - _reserved1: [u32; 60], - /// External circuitry to be supplied from VDD pin. - /// - Address: 0x300 - 0x304 - extsupply: ReadWrite, - /// GPIO reference voltage - /// - Address: 0x304 - 0x308 - regout0: ReadWrite, + unsafe { StaticRef::new(0x10001000 as *const UicrRegisters) }; + +register_structs! { + UicrRegisters { + (0x000 => _reserved1), + /// Reserved for Nordic firmware design + (0x014 => nrffw: [ReadWrite; 13]), + (0x048 => _reserved2), + /// Reserved for Nordic hardware design + (0x050 => nrfhw: [ReadWrite; 12]), + /// Reserved for customer + (0x080 => customer: [ReadWrite; 32]), + (0x100 => _reserved3), + /// Mapping of the nRESET function (see POWER chapter for details) + (0x200 => pselreset0: ReadWrite), + /// Mapping of the nRESET function (see POWER chapter for details) + (0x204 => pselreset1: ReadWrite), + /// Access Port protection + (0x208 => approtect: ReadWrite), + /// Setting of pins dedicated to NFC functionality: NFC antenna or GPIO + /// - Address: 0x20c - 0x210 + (0x20c => nfcpins: ReadWrite), + (0x210 => debugctrl: ReadWrite), + (0x214 => _reserved4), + /// External circuitry to be supplied from VDD pin. + (0x300 => extsupply: ReadWrite), + /// GPIO reference voltage + (0x304 => regout0: ReadWrite), + (0x308 => @END), + } } register_bitfields! [u32, @@ -58,6 +65,21 @@ register_bitfields! [u32, DISABLED = 0xff ] ], + /// Processor debug control + DebugControl [ + CPUNIDEN OFFSET(0) NUMBITS(8) [ + /// Enable + ENABLED = 0xff, + /// Disable + DISABLED = 0x00 + ], + CPUFPBEN OFFSET(8) NUMBITS(8) [ + /// Enable + ENABLED = 0xff, + /// Disable + DISABLED = 0x00 + ] + ], /// Setting of pins dedicated to NFC functionality: NFC antenna or GPIO NfcPins [ /// Setting pins dedicated to NFC functionality