#pragma once #include /* * Hardware register bitfield unions for nRF52840 peripherals. * Layout is guaranteed correct only with arm-none-eabi-gcc (LSB-first bitfields). * Bit ranges match nRF52840 Product Specification v1.7. */ /* GPIOTE */ /* CONFIG[n]: channel configuration */ typedef union { struct { uint32_t MODE : 2; /* [1:0] 0=Disabled 1=Event 3=Task */ uint32_t : 6; /* [7:2] reserved */ uint32_t PSEL : 5; /* [12:8] pin number within port */ uint32_t PORT : 1; /* [13] 0=Port0 1=Port1 */ uint32_t : 2; /* [15:14] reserved */ uint32_t POLARITY : 2; /* [17:16] 0=None 1=LoToHi 2=HiToLo 3=Toggle */ uint32_t : 2; /* [19:18] reserved */ uint32_t OUTINIT : 1; /* [20] initial output value for Task mode */ uint32_t : 11; /* [31:21] reserved */ } bit; uint32_t reg; } gpiote_config_t; #define GPIOTE_MODE_DISABLED 0u #define GPIOTE_MODE_EVENT 1u #define GPIOTE_MODE_TASK 3u #define GPIOTE_POL_NONE 0u #define GPIOTE_POL_LOTOHI 1u #define GPIOTE_POL_HITOLO 2u #define GPIOTE_POL_TOGGLE 3u /* INTENSET / INTENCLR: interrupt enable */ typedef union { struct { uint32_t IN0 : 1; /* [0] channel 0 input event */ uint32_t IN1 : 1; /* [1] channel 1 input event */ uint32_t IN2 : 1; /* [2] */ uint32_t IN3 : 1; /* [3] */ uint32_t IN4 : 1; /* [4] */ uint32_t IN5 : 1; /* [5] */ uint32_t IN6 : 1; /* [6] */ uint32_t IN7 : 1; /* [7] */ uint32_t : 23; /* [30:8] reserved */ uint32_t PORT : 1; /* [31] PORT event */ } bit; uint32_t reg; } gpiote_inten_t; /* RADIO */ /* FREQUENCY: radio channel */ typedef union { struct { uint32_t FREQUENCY : 7; /* [6:0] offset from base frequency in MHz */ uint32_t : 1; /* [7] reserved */ uint32_t MAP : 1; /* [8] 0: base=2400 MHz 1: base=2360 MHz */ uint32_t : 23; /* [31:9] reserved */ } bit; uint32_t reg; } radio_frequency_t; #define RADIO_MAP_DEFAULT 0u /* channel n -> 2400+n MHz */ #define RADIO_MAP_BLE 1u /* channel n -> 2360+n MHz */ /* TXPOWER: transmit power */ typedef union { struct { int32_t TXPOWER : 8; /* [7:0] signed dBm: +8, +7, +6, +5, +4, +3, +2, 0, -4, -8, -12, -16, -20, -40 */ uint32_t : 24; /* [31:8] reserved */ } bit; uint32_t reg; } radio_txpower_t; /* MODE: radio data rate and modulation */ typedef union { struct { uint32_t MODE : 4; /* [3:0] 0=NRF_1Mbit 1=NRF_2Mbit 4=BLE_1Mbit ... */ uint32_t : 28; /* [31:4] reserved */ } bit; uint32_t reg; } radio_mode_t; #define RADIO_MODE_NRF_1MBIT 0u #define RADIO_MODE_NRF_2MBIT 1u #define RADIO_MODE_BLE_1MBIT 4u