1 /* 2 * Copyright (c) 2016, The OpenThread Authors. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 3. Neither the name of the copyright holder nor the 13 * names of its contributors may be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 /** 30 * @file 31 * This file includes CC2538 register definitions. 32 * 33 */ 34 35 #ifndef CC2538_REG_H_ 36 #define CC2538_REG_H_ 37 38 #include <stdint.h> 39 40 // clang-format off 41 42 #define HWREG(x) (*((volatile uint32_t *)(x))) 43 44 /*! 45 * For registers that are arrays of 32-bit integers. 46 * 47 * @param reg Register address 48 * @param idx Register array index 49 */ 50 #define HWREG_ARR(reg, idx) HWREG((reg) + ((idx) << 2)) 51 52 #define NVIC_ST_CTRL 0xE000E010 // SysTick Control and Status 53 #define NVIC_ST_RELOAD 0xE000E014 // SysTick Reload Value Register 54 #define NVIC_EN0 0xE000E100 // Interrupt 0-31 Set Enable 55 56 #define NVIC_ST_CTRL_COUNT 0x00010000 // Count Flag 57 #define NVIC_ST_CTRL_CLK_SRC 0x00000004 // Clock Source 58 #define NVIC_ST_CTRL_INTEN 0x00000002 // Interrupt Enable 59 #define NVIC_ST_CTRL_ENABLE 0x00000001 // Enable 60 61 #define RFCORE_XREG_SRCMATCH_EN 0x00000001 // SRCMATCH.SRC_MATCH_EN(1) 62 #define RFCORE_XREG_SRCMATCH_AUTOPEND 0x00000002 // SRCMATCH.AUTOPEND(1) 63 #define RFCORE_XREG_SRCMATCH_PEND_DATAREQ_ONLY 0x00000004 // SRCMATCH.PEND_DATAREQ_ONLY(1) 64 65 #define RFCORE_XREG_SRCMATCH_ENABLE_STATUS_SIZE 3 // Num of register for source match enable status 66 #define RFCORE_XREG_SRCMATCH_SHORT_ENTRIES 24 // 24 short address entries in maximum 67 #define RFCORE_XREG_SRCMATCH_EXT_ENTRIES 12 // 12 extended address entries in maximum 68 #define RFCORE_XREG_SRCMATCH_SHORT_ENTRY_OFFSET 4 // address offset for one short address entry 69 #define RFCORE_XREG_SRCMATCH_EXT_ENTRY_OFFSET 8 // address offset for one extended address entry 70 71 #define INT_UART0 21 // UART0 Rx and Tx 72 73 #define IEEE_EUI64 0x00280028 // Address of IEEE EUI-64 address 74 75 #define RFCORE_FFSM_SRCADDRESS_TABLE 0x40088400 // Source Address Table 76 77 #define RFCORE_FFSM_SRCEXTPENDEN0 0x40088590 // Enable/Disable automatic pending per extended address 78 #define RFCORE_FFSM_SRCSHORTPENDEN0 0x4008859C // Enable/Disable automatic pending per short address 79 #define RFCORE_FFSM_EXT_ADDR0 0x400885A8 // Local address information 80 #define RFCORE_FFSM_PAN_ID0 0x400885C8 // Local address information 81 #define RFCORE_FFSM_PAN_ID1 0x400885CC // Local address information 82 #define RFCORE_FFSM_SHORT_ADDR0 0x400885D0 // Local address information 83 #define RFCORE_FFSM_SHORT_ADDR1 0x400885D4 // Local address information 84 #define RFCORE_XREG_FRMFILT0 0x40088600 // The frame filtering function 85 #define RFCORE_XREG_SRCMATCH 0x40088608 // Source address matching and pending bits 86 #define RFCORE_XREG_SRCSHORTEN0 0x4008860C // Short address matching 87 #define RFCORE_XREG_SRCEXTEN0 0x40088618 // Extended address matching 88 89 #define RFCORE_XREG_FRMCTRL0 0x40088624 // Frame handling 90 #define RFCORE_XREG_FRMCTRL1 0x40088628 // Frame handling 91 #define RFCORE_XREG_RXENABLE 0x4008862C // RX enabling 92 #define RFCORE_XREG_FREQCTRL 0x4008863C // Controls the RF frequency 93 #define RFCORE_XREG_TXPOWER 0x40088640 // Controls the output power 94 #define RFCORE_XREG_FSMSTAT0 0x40088648 // Radio finite state machine status 95 #define RFCORE_XREG_FSMSTAT1 0x4008864C // Radio status register 96 #define RFCORE_XREG_FIFOPCTRL 0x40088650 // FIFOP threshold 97 #define RFCORE_XREG_CCACTRL0 0x40088658 // CCA threshold 98 #define RFCORE_XREG_RSSI 0x40088660 // RSSI status register 99 #define RFCORE_XREG_RSSISTAT 0x40088664 // RSSI valid status register 100 #define RFCORE_XREG_AGCCTRL1 0x400886C8 // AGC reference level 101 #define RFCORE_XREG_RFC_OBS_CTRL 0x400887AC // RF Core observable output 102 #define RFCORE_XREG_TXFILTCFG 0x400887E8 // TX filter configuration 103 #define RFCORE_XREG_RFRND 0x4008869C // Random data 104 #define RFCORE_SFR_RFDATA 0x40088828 // The TX FIFO and RX FIFO 105 #define RFCORE_SFR_RFERRF 0x4008882C // RF error interrupt flags 106 #define RFCORE_SFR_RFIRQF0 0x40088834 // RF interrupt flags 107 #define RFCORE_SFR_RFST 0x40088838 // RF CSMA-CA/strobe processor 108 #define CCTEST_OBSSEL 0x44010014 // CCTEST observable output route 109 110 #define RFCORE_XREG_FRMFILT0_FRAME_FILTER_EN 0x00000001 // Enables frame filtering 111 112 #define RFCORE_XREG_FRMCTRL0_AUTOACK 0x00000020 113 #define RFCORE_XREG_FRMCTRL0_ENERGY_SCAN 0x00000010 114 #define RFCORE_XREG_FRMCTRL0_AUTOCRC 0x00000040 115 #define RFCORE_XREG_FRMCTRL0_INFINITY_RX 0x00000008 116 117 #define RFCORE_XREG_FRMCTRL1_PENDING_OR 0x00000004 118 119 #define RFCORE_XREG_RFRND_IRND 0x00000001 120 121 #define RFCORE_XREG_FSMSTAT0_STATE_MASK 0x0000003F 122 #define RFCORE_XREG_FSMSTAT0_CAL_DONE 0x00000080 123 #define RFCORE_XREG_FSMSTAT0_CAL_RUN 0x00000040 124 125 #define RFCORE_XREG_FSMSTAT0_STATE_IDLE 0x00000000 126 #define RFCORE_XREG_FSMSTAT0_STATE_RX_CAL 0x00000002 127 #define RFCORE_XREG_FSMSTAT0_STATE_SFD_WAIT0 0x00000003 128 #define RFCORE_XREG_FSMSTAT0_STATE_SFD_WAIT1 0x00000004 129 #define RFCORE_XREG_FSMSTAT0_STATE_SFD_WAIT2 0x00000005 130 #define RFCORE_XREG_FSMSTAT0_STATE_SFD_WAIT3 0x00000006 131 #define RFCORE_XREG_FSMSTAT0_STATE_RX0 0x00000007 132 #define RFCORE_XREG_FSMSTAT0_STATE_RX1 0x00000008 133 #define RFCORE_XREG_FSMSTAT0_STATE_RX2 0x00000009 134 #define RFCORE_XREG_FSMSTAT0_STATE_RX3 0x0000000A 135 #define RFCORE_XREG_FSMSTAT0_STATE_RX4 0x0000000B 136 #define RFCORE_XREG_FSMSTAT0_STATE_RX5 0x0000000C 137 #define RFCORE_XREG_FSMSTAT0_STATE_RX6 0x0000000D 138 #define RFCORE_XREG_FSMSTAT0_STATE_RX_WAIT 0x0000000E 139 #define RFCORE_XREG_FSMSTAT0_STATE_RX_FRST 0x00000010 140 #define RFCORE_XREG_FSMSTAT0_STATE_RX_OVER 0x00000011 141 #define RFCORE_XREG_FSMSTAT0_STATE_TX_CAL 0x00000020 142 #define RFCORE_XREG_FSMSTAT0_STATE_TX0 0x00000022 143 #define RFCORE_XREG_FSMSTAT0_STATE_TX1 0x00000023 144 #define RFCORE_XREG_FSMSTAT0_STATE_TX2 0x00000024 145 #define RFCORE_XREG_FSMSTAT0_STATE_TX3 0x00000025 146 #define RFCORE_XREG_FSMSTAT0_STATE_TX4 0x00000026 147 #define RFCORE_XREG_FSMSTAT0_STATE_TX_FINAL 0x00000027 148 #define RFCORE_XREG_FSMSTAT0_STATE_RXTX_TRANS 0x00000028 149 #define RFCORE_XREG_FSMSTAT0_STATE_ACK_CAL 0x00000030 150 #define RFCORE_XREG_FSMSTAT0_STATE_ACK0 0x00000031 151 #define RFCORE_XREG_FSMSTAT0_STATE_ACK1 0x00000032 152 #define RFCORE_XREG_FSMSTAT0_STATE_ACK2 0x00000033 153 #define RFCORE_XREG_FSMSTAT0_STATE_ACK3 0x00000034 154 #define RFCORE_XREG_FSMSTAT0_STATE_ACK4 0x00000035 155 #define RFCORE_XREG_FSMSTAT0_STATE_ACK5 0x00000036 156 #define RFCORE_XREG_FSMSTAT0_STATE_ACK_DELAY 0x00000037 157 #define RFCORE_XREG_FSMSTAT0_STATE_TX_UNDER 0x00000038 158 #define RFCORE_XREG_FSMSTAT0_STATE_TX_DOWN0 0x0000001A 159 #define RFCORE_XREG_FSMSTAT0_STATE_TX_DOWN1 0x0000003A 160 161 #define RFCORE_XREG_FSMSTAT1_RX_ACTIVE 0x00000001 162 #define RFCORE_XREG_FSMSTAT1_TX_ACTIVE 0x00000002 163 #define RFCORE_XREG_FSMSTAT1_LOCK_STATUS 0x00000004 164 #define RFCORE_XREG_FSMSTAT1_SAMPLED_CCA 0x00000008 165 #define RFCORE_XREG_FSMSTAT1_CCA 0x00000010 // Clear channel assessment 166 #define RFCORE_XREG_FSMSTAT1_SFD 0x00000020 167 #define RFCORE_XREG_FSMSTAT1_FIFOP 0x00000040 168 #define RFCORE_XREG_FSMSTAT1_FIFO 0x00000080 169 170 #define RFCORE_XREG_RSSISTAT_RSSI_VALID 0x00000001 // RSSI value is valid. 171 172 #define RFCORE_XREG_RFC_OBS_POL_INV 0x00000040 // Invert polarity of OBS signal 173 #define RFCORE_XREG_RFC_OBS_MUX_ZERO 0x00000000 // Observable = constant zero 174 #define RFCORE_XREG_RFC_OBS_MUX_ONE 0x00000001 // Observable = constant one 175 #define RFCORE_XREG_RFC_OBS_MUX_SNIFF_DATA 0x00000008 // RFC sniff data 176 #define RFCORE_XREG_RFC_OBS_MUX_SNIFF_CLK 0x00000009 // RFC sniff clock 177 #define RFCORE_XREG_RFC_OBS_MUX_RSSI_VALID 0x0000000c // RSSI valid 178 #define RFCORE_XREG_RFC_OBS_MUX_DEMOD_CCA 0x0000000d // Clear channel assessment 179 #define RFCORE_XREG_RFC_OBS_MUX_SAMPLED_CCA 0x0000000e // Sampled CCA signal 180 #define RFCORE_XREG_RFC_OBS_MUX_SFD_SYNC 0x0000000f // SFD received or transmitted 181 #define RFCORE_XREG_RFC_OBS_MUX_TX_ACTIVE 0x00000010 // Transmitter is active 182 #define RFCORE_XREG_RFC_OBS_MUX_RX_ACTIVE 0x00000011 // Receiver is active 183 #define RFCORE_XREG_RFC_OBS_MUX_FFCTRL_FIFO 0x00000012 // One or more bytes in FIFO 184 #define RFCORE_XREG_RFC_OBS_MUX_FFCTRL_FIFOP 0x00000013 // One or more frames in FIFO 185 #define RFCORE_XREG_RFC_OBS_MUX_PACKET_DONE 0x00000014 // Packet received 186 #define RFCORE_XREG_RFC_OBS_MUX_RFC_XOR_RAND_IQ 0x00000016 // RAND I ^ RAND Q 187 #define RFCORE_XREG_RFC_OBS_MUX_RFC_RAND_Q 0x00000017 // Random data from Q channel 188 #define RFCORE_XREG_RFC_OBS_MUX_RFC_RAND_I 0x00000018 // Random data from I channel 189 #define RFCORE_XREG_RFC_OBS_MUX_LOCK_STATUS 0x00000019 // PLL is in lock 190 #define RFCORE_XREG_RFC_OBS_MUX_PA_PD 0x00000028 // Power amp power down 191 #define RFCORE_XREG_RFC_OBS_MUX_LNA_PD 0x0000002a // LNA power down 192 193 #define RFCORE_SFR_RFERRF_NLOCK 0x00000001 // Failed to achieve PLL lock. 194 #define RFCORE_SFR_RFERRF_RXABO 0x00000002 // RX Aborted. 195 #define RFCORE_SFR_RFERRF_RXOVERF 0x00000004 // RX FIFO overflowed. 196 #define RFCORE_SFR_RFERRF_RXUNDERF 0x00000008 // RX FIFO underflowed. 197 #define RFCORE_SFR_RFERRF_TXOVERF 0x00000010 // TX FIFO overflowed. 198 #define RFCORE_SFR_RFERRF_TXUNDERF 0x00000020 // TX FIFO underflowed. 199 #define RFCORE_SFR_RFERRF_STROBEERR 0x00000040 // Command Strobe Error. 200 201 #define RFCORE_SFR_RFST_INSTR_RXON 0xE3 // Instruction set RX on 202 #define RFCORE_SFR_RFST_INSTR_TXON 0xE9 // Instruction set TX on 203 #define RFCORE_SFR_RFST_INSTR_RFOFF 0xEF // Instruction set RF off 204 #define RFCORE_SFR_RFST_INSTR_FLUSHRX 0xED // Instruction set flush rx buffer 205 #define RFCORE_SFR_RFST_INSTR_FLUSHTX 0xEE // Instruction set flush tx buffer 206 207 #define CCTEST_OBSSEL_EN 0x00000080 // Enable the OBS output on this pin 208 #define CCTEST_OBSSEL_SEL_OBS0 0x00000000 // Route OBS0 to pin 209 #define CCTEST_OBSSEL_SEL_OBS1 0x00000001 // Route OBS1 to pin 210 #define CCTEST_OBSSEL_SEL_OBS2 0x00000002 // Route OBS2 to pin 211 212 #define ANA_REGS_BASE 0x400D6000 // ANA_REGS 213 #define ANA_REGS_O_IVCTRL 0x00000004 // Analog control register 214 215 #define SYS_CTRL_CLOCK_CTRL 0x400D2000 // The clock control register 216 #define SYS_CTRL_SYSDIV_32MHZ 0x00000000 // Sys_div for sysclk 32MHz 217 #define SYS_CTRL_CLOCK_CTRL_AMP_DET 0x00200000 218 219 #define SYS_CTRL_PWRDBG 0x400D2074 220 #define SYS_CTRL_PWRDBG_FORCE_WARM_RESET 0x00000008 221 222 #define SYS_CTRL_RCGCUART 0x400D2028 223 #define SYS_CTRL_SCGCUART 0x400D202C 224 #define SYS_CTRL_DCGCUART 0x400D2030 225 #define SYS_CTRL_I_MAP 0x400D2098 226 #define SYS_CTRL_RCGCRFC 0x400D20A8 227 #define SYS_CTRL_SCGCRFC 0x400D20AC 228 #define SYS_CTRL_DCGCRFC 0x400D20B0 229 #define SYS_CTRL_EMUOVR 0x400D20B4 230 231 #define SYS_CTRL_RCGCRFC_RFC0 0x00000001 232 #define SYS_CTRL_SCGCRFC_RFC0 0x00000001 233 #define SYS_CTRL_DCGCRFC_RFC0 0x00000001 234 235 #define SYS_CTRL_I_MAP_ALTMAP 0x00000001 236 237 #define SYS_CTRL_RCGCUART_UART0 0x00000001 238 #define SYS_CTRL_SCGCUART_UART0 0x00000001 239 #define SYS_CTRL_DCGCUART_UART0 0x00000001 240 241 #define SYS_CTRL_RCGCUART_UART1 0x00000002 242 #define SYS_CTRL_SCGCUART_UART1 0x00000002 243 #define SYS_CTRL_DCGCUART_UART1 0x00000002 244 245 #define IOC_PA0_SEL 0x400D4000 // Peripheral select control 246 #define IOC_PA1_SEL 0x400D4004 // Peripheral select control 247 #define IOC_PA2_SEL 0x400D4008 248 #define IOC_PA3_SEL 0x400D400C 249 #define IOC_UARTRXD_UART0 0x400D4100 250 #define IOC_UARTRXD_UART1 0x400D4108 251 252 #define IOC_PA0_OVER 0x400D4080 253 #define IOC_PA1_OVER 0x400D4084 254 #define IOC_PA2_OVER 0x400D4088 255 #define IOC_PA3_OVER 0x400D408C 256 257 #define IOC_MUX_OUT_SEL_UART0_TXD 0x00000000 258 #define IOC_MUX_OUT_SEL_UART1_TXD 0x00000002 259 260 #define IOC_OVERRIDE_OE 0x00000008 // PAD Config Override Output Enable 261 #define IOC_OVERRIDE_DIS 0x00000000 // PAD Config Override Disabled 262 263 #define IOC_PAD_IN_SEL_PA0 0x00000000 // PA0 264 #define IOC_PAD_IN_SEL_PA1 0x00000001 // PA1 265 #define IOC_PAD_IN_SEL_PA2 0x00000002 // PA2 266 #define IOC_PAD_IN_SEL_PA3 0x00000003 // PA3 267 268 #define UART0_BASE 0x4000C000 269 #define UART1_BASE 0x4000D000 270 #define GPIO_A_BASE 0x400D9000 // GPIO A 271 #define GPIO_B_BASE 0x400DA000 // GPIO B 272 #define GPIO_C_BASE 0x400DB000 // GPIO C 273 #define GPIO_D_BASE 0x400DC000 // GPIO D 274 275 #define GPIO_O_DIR 0x00000400 276 #define GPIO_O_AFSEL 0x00000420 277 278 #define GPIO_PIN(x) (1UL << x) // Arbitrary GPIO pin 279 #define GPIO_PIN_0 0x00000001 // GPIO pin 0 280 #define GPIO_PIN_1 0x00000002 // GPIO pin 1 281 #define GPIO_PIN_2 0x00000004 // GPIO pin 2 282 #define GPIO_PIN_3 0x00000008 // GPIO pin 3 283 #define GPIO_PIN_4 0x00000010 // GPIO pin 4 284 #define GPIO_PIN_5 0x00000020 // GPIO pin 5 285 #define GPIO_PIN_6 0x00000040 // GPIO pin 6 286 #define GPIO_PIN_7 0x00000080 // GPIO pin 7 287 288 #define UART_O_DR 0x00000000 // UART data 289 #define UART_O_FR 0x00000018 // UART flag 290 #define UART_O_IBRD 0x00000024 291 #define UART_O_FBRD 0x00000028 292 #define UART_O_LCRH 0x0000002C 293 #define UART_O_CTL 0x00000030 // UART control 294 #define UART_O_IM 0x00000038 // UART interrupt mask 295 #define UART_O_MIS 0x00000040 // UART masked interrupt status 296 #define UART_O_ICR 0x00000044 // UART interrupt clear 297 #define UART_O_CC 0x00000FC8 // UART clock configuration 298 299 #define UART_FR_RXFE 0x00000010 // UART receive FIFO empty 300 #define UART_FR_TXFF 0x00000020 // UART transmit FIFO full 301 #define UART_FR_RXFF 0x00000040 // UART receive FIFO full 302 303 #define UART_CONFIG_WLEN_8 0x00000060 // 8 bit data 304 #define UART_CONFIG_STOP_ONE 0x00000000 // One stop bit 305 #define UART_CONFIG_PAR_NONE 0x00000000 // No parity 306 307 #define UART_CTL_UARTEN 0x00000001 // UART enable 308 #define UART_CTL_TXE 0x00000100 // UART transmit enable 309 #define UART_CTL_RXE 0x00000200 // UART receive enable 310 311 #define UART_IM_RXIM 0x00000010 // UART receive interrupt mask 312 #define UART_IM_RTIM 0x00000040 // UART receive time-out interrupt 313 314 #define SOC_ADC_ADCCON1 0x400D7000 // ADC Control 315 #define SOC_ADC_RNDL 0x400D7014 // RNG low data 316 #define SOC_ADC_RNDH 0x400D7018 // RNG high data 317 318 #define SOC_ADC_ADCCON1_RCTRL0 0x00000004 // ADCCON1 RCTRL bit 0 319 #define SOC_ADC_ADCCON1_RCTRL1 0x00000008 // ADCCON1 RCTRL bit 1 320 321 #define FLASH_CTRL_FCTL 0x400D3008 // Flash control 322 #define FLASH_CTRL_DIECFG0 0x400D3014 // Flash information 323 324 // clang-format on 325 326 #endif 327