1 //----------------------------------------------------------------------------- 2 // Copyright 2012 (c) Silicon Laboratories Inc. 3 // 4 // SPDX-License-Identifier: Zlib 5 // 6 // This siHAL software is provided 'as-is', without any express or implied 7 // warranty. In no event will the authors be held liable for any damages 8 // arising from the use of this software. 9 // 10 // Permission is granted to anyone to use this software for any purpose, 11 // including commercial applications, and to alter it and redistribute it 12 // freely, subject to the following restrictions: 13 // 14 // 1. The origin of this software must not be misrepresented; you must not 15 // claim that you wrote the original software. If you use this software 16 // in a product, an acknowledgment in the product documentation would be 17 // appreciated but is not required. 18 // 2. Altered source versions must be plainly marked as such, and must not be 19 // misrepresented as being the original software. 20 // 3. This notice may not be removed or altered from any source distribution. 21 //----------------------------------------------------------------------------- 22 // 23 // Script: 0.61 24 // Version: 1 25 26 #ifndef __SI32_FLASHCTRL_A_REGISTERS_H__ 27 #define __SI32_FLASHCTRL_A_REGISTERS_H__ 28 29 #include <stdint.h> 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 struct SI32_FLASHCTRL_A_CONFIG_Struct 36 { 37 union 38 { 39 struct 40 { 41 // Flash Speed Mode 42 volatile uint32_t SPMD: 2; 43 uint32_t reserved0: 2; 44 // Read Store Mode Enable 45 volatile uint32_t RDSEN: 1; 46 uint32_t reserved1: 1; 47 // Data Prefetch Enable 48 volatile uint32_t DPFEN: 1; 49 // Prefetch Inhibit 50 volatile uint32_t PFINH: 1; 51 uint32_t reserved2: 8; 52 // Flash Write Sequence Enable 53 volatile uint32_t SQWEN: 1; 54 uint32_t reserved3: 1; 55 // Flash Page Erase Enable 56 volatile uint32_t ERASEEN: 1; 57 // Flash Buffer Status 58 volatile uint32_t BUFSTS: 1; 59 // Flash Operation Busy Flag 60 volatile uint32_t BUSYF: 1; 61 uint32_t reserved4: 11; 62 }; 63 volatile uint32_t U32; 64 }; 65 }; 66 67 #define SI32_FLASHCTRL_A_CONFIG_SPMD_MASK 0x00000003 68 #define SI32_FLASHCTRL_A_CONFIG_SPMD_SHIFT 0 69 // Read and write the flash at speed mode 0. 70 #define SI32_FLASHCTRL_A_CONFIG_SPMD_MODE0_VALUE 0 71 #define SI32_FLASHCTRL_A_CONFIG_SPMD_MODE0_U32 \ 72 (SI32_FLASHCTRL_A_CONFIG_SPMD_MODE0_VALUE << SI32_FLASHCTRL_A_CONFIG_SPMD_SHIFT) 73 // Read and write the flash at speed mode 1. 74 #define SI32_FLASHCTRL_A_CONFIG_SPMD_MODE1_VALUE 1 75 #define SI32_FLASHCTRL_A_CONFIG_SPMD_MODE1_U32 \ 76 (SI32_FLASHCTRL_A_CONFIG_SPMD_MODE1_VALUE << SI32_FLASHCTRL_A_CONFIG_SPMD_SHIFT) 77 // Read and write the flash at speed mode 2. 78 #define SI32_FLASHCTRL_A_CONFIG_SPMD_MODE2_VALUE 2 79 #define SI32_FLASHCTRL_A_CONFIG_SPMD_MODE2_U32 \ 80 (SI32_FLASHCTRL_A_CONFIG_SPMD_MODE2_VALUE << SI32_FLASHCTRL_A_CONFIG_SPMD_SHIFT) 81 // Read and write the flash at speed mode 3. 82 #define SI32_FLASHCTRL_A_CONFIG_SPMD_MODE3_VALUE 3 83 #define SI32_FLASHCTRL_A_CONFIG_SPMD_MODE3_U32 \ 84 (SI32_FLASHCTRL_A_CONFIG_SPMD_MODE3_VALUE << SI32_FLASHCTRL_A_CONFIG_SPMD_SHIFT) 85 86 #define SI32_FLASHCTRL_A_CONFIG_RDSEN_MASK 0x00000010 87 #define SI32_FLASHCTRL_A_CONFIG_RDSEN_SHIFT 4 88 // Disable read store mode. 89 #define SI32_FLASHCTRL_A_CONFIG_RDSEN_DISABLED_VALUE 0 90 #define SI32_FLASHCTRL_A_CONFIG_RDSEN_DISABLED_U32 \ 91 (SI32_FLASHCTRL_A_CONFIG_RDSEN_DISABLED_VALUE << SI32_FLASHCTRL_A_CONFIG_RDSEN_SHIFT) 92 // Enable read store mode. 93 #define SI32_FLASHCTRL_A_CONFIG_RDSEN_ENABLED_VALUE 1 94 #define SI32_FLASHCTRL_A_CONFIG_RDSEN_ENABLED_U32 \ 95 (SI32_FLASHCTRL_A_CONFIG_RDSEN_ENABLED_VALUE << SI32_FLASHCTRL_A_CONFIG_RDSEN_SHIFT) 96 97 #define SI32_FLASHCTRL_A_CONFIG_DPFEN_MASK 0x00000040 98 #define SI32_FLASHCTRL_A_CONFIG_DPFEN_SHIFT 6 99 // Data accesses are excluded from the prefetch buffer. 100 #define SI32_FLASHCTRL_A_CONFIG_DPFEN_DISABLED_VALUE 0 101 #define SI32_FLASHCTRL_A_CONFIG_DPFEN_DISABLED_U32 \ 102 (SI32_FLASHCTRL_A_CONFIG_DPFEN_DISABLED_VALUE << SI32_FLASHCTRL_A_CONFIG_DPFEN_SHIFT) 103 // Data accesses are included in the prefetch buffer. 104 #define SI32_FLASHCTRL_A_CONFIG_DPFEN_ENABLED_VALUE 1 105 #define SI32_FLASHCTRL_A_CONFIG_DPFEN_ENABLED_U32 \ 106 (SI32_FLASHCTRL_A_CONFIG_DPFEN_ENABLED_VALUE << SI32_FLASHCTRL_A_CONFIG_DPFEN_SHIFT) 107 108 #define SI32_FLASHCTRL_A_CONFIG_PFINH_MASK 0x00000080 109 #define SI32_FLASHCTRL_A_CONFIG_PFINH_SHIFT 7 110 // Any reads from flash are prefetched until the prefetch buffer is full. 111 #define SI32_FLASHCTRL_A_CONFIG_PFINH_INACTIVE_VALUE 0 112 #define SI32_FLASHCTRL_A_CONFIG_PFINH_INACTIVE_U32 \ 113 (SI32_FLASHCTRL_A_CONFIG_PFINH_INACTIVE_VALUE << SI32_FLASHCTRL_A_CONFIG_PFINH_SHIFT) 114 // Inhibit the prefetch engine. 115 #define SI32_FLASHCTRL_A_CONFIG_PFINH_ACTIVE_VALUE 1 116 #define SI32_FLASHCTRL_A_CONFIG_PFINH_ACTIVE_U32 \ 117 (SI32_FLASHCTRL_A_CONFIG_PFINH_ACTIVE_VALUE << SI32_FLASHCTRL_A_CONFIG_PFINH_SHIFT) 118 119 #define SI32_FLASHCTRL_A_CONFIG_SQWEN_MASK 0x00010000 120 #define SI32_FLASHCTRL_A_CONFIG_SQWEN_SHIFT 16 121 // Disable sequential write mode. 122 #define SI32_FLASHCTRL_A_CONFIG_SQWEN_DISABLED_VALUE 0 123 #define SI32_FLASHCTRL_A_CONFIG_SQWEN_DISABLED_U32 \ 124 (SI32_FLASHCTRL_A_CONFIG_SQWEN_DISABLED_VALUE << SI32_FLASHCTRL_A_CONFIG_SQWEN_SHIFT) 125 // Enable sequential write mode. 126 #define SI32_FLASHCTRL_A_CONFIG_SQWEN_ENABLED_VALUE 1 127 #define SI32_FLASHCTRL_A_CONFIG_SQWEN_ENABLED_U32 \ 128 (SI32_FLASHCTRL_A_CONFIG_SQWEN_ENABLED_VALUE << SI32_FLASHCTRL_A_CONFIG_SQWEN_SHIFT) 129 130 #define SI32_FLASHCTRL_A_CONFIG_ERASEEN_MASK 0x00040000 131 #define SI32_FLASHCTRL_A_CONFIG_ERASEEN_SHIFT 18 132 // Writes to the WRDATA field will initiate a write to flash at the address in the 133 // WRADDR field. 134 #define SI32_FLASHCTRL_A_CONFIG_ERASEEN_DISABLED_VALUE 0 135 #define SI32_FLASHCTRL_A_CONFIG_ERASEEN_DISABLED_U32 \ 136 (SI32_FLASHCTRL_A_CONFIG_ERASEEN_DISABLED_VALUE << SI32_FLASHCTRL_A_CONFIG_ERASEEN_SHIFT) 137 // Writes to the WRDATA field will initiate an erase of the flash page containing 138 // the address in the WRADDR field. 139 #define SI32_FLASHCTRL_A_CONFIG_ERASEEN_ENABLED_VALUE 1 140 #define SI32_FLASHCTRL_A_CONFIG_ERASEEN_ENABLED_U32 \ 141 (SI32_FLASHCTRL_A_CONFIG_ERASEEN_ENABLED_VALUE << SI32_FLASHCTRL_A_CONFIG_ERASEEN_SHIFT) 142 143 #define SI32_FLASHCTRL_A_CONFIG_BUFSTS_MASK 0x00080000 144 #define SI32_FLASHCTRL_A_CONFIG_BUFSTS_SHIFT 19 145 // The flash controller write data buffer is empty. 146 #define SI32_FLASHCTRL_A_CONFIG_BUFSTS_EMPTY_VALUE 0 147 #define SI32_FLASHCTRL_A_CONFIG_BUFSTS_EMPTY_U32 \ 148 (SI32_FLASHCTRL_A_CONFIG_BUFSTS_EMPTY_VALUE << SI32_FLASHCTRL_A_CONFIG_BUFSTS_SHIFT) 149 // The flash controller write data buffer is full. 150 #define SI32_FLASHCTRL_A_CONFIG_BUFSTS_FULL_VALUE 1 151 #define SI32_FLASHCTRL_A_CONFIG_BUFSTS_FULL_U32 \ 152 (SI32_FLASHCTRL_A_CONFIG_BUFSTS_FULL_VALUE << SI32_FLASHCTRL_A_CONFIG_BUFSTS_SHIFT) 153 154 #define SI32_FLASHCTRL_A_CONFIG_BUSYF_MASK 0x00100000 155 #define SI32_FLASHCTRL_A_CONFIG_BUSYF_SHIFT 20 156 // The flash interface is not busy. 157 #define SI32_FLASHCTRL_A_CONFIG_BUSYF_NOT_SET_VALUE 0 158 #define SI32_FLASHCTRL_A_CONFIG_BUSYF_NOT_SET_U32 \ 159 (SI32_FLASHCTRL_A_CONFIG_BUSYF_NOT_SET_VALUE << SI32_FLASHCTRL_A_CONFIG_BUSYF_SHIFT) 160 // The flash interface is busy with an operation. 161 #define SI32_FLASHCTRL_A_CONFIG_BUSYF_SET_VALUE 1 162 #define SI32_FLASHCTRL_A_CONFIG_BUSYF_SET_U32 \ 163 (SI32_FLASHCTRL_A_CONFIG_BUSYF_SET_VALUE << SI32_FLASHCTRL_A_CONFIG_BUSYF_SHIFT) 164 165 166 167 struct SI32_FLASHCTRL_A_WRADDR_Struct 168 { 169 union 170 { 171 struct 172 { 173 // Flash Write Address 174 volatile uint32_t WRADDR_BITS; 175 }; 176 volatile uint32_t U32; 177 }; 178 }; 179 180 #define SI32_FLASHCTRL_A_WRADDR_WRADDR_MASK 0xFFFFFFFF 181 #define SI32_FLASHCTRL_A_WRADDR_WRADDR_SHIFT 0 182 183 184 185 struct SI32_FLASHCTRL_A_WRDATA_Struct 186 { 187 union 188 { 189 struct 190 { 191 // Flash Write Data 192 volatile uint32_t WRDATA_BITS; 193 }; 194 volatile uint32_t U32; 195 }; 196 }; 197 198 #define SI32_FLASHCTRL_A_WRDATA_WRDATA_MASK 0xFFFFFFFF 199 #define SI32_FLASHCTRL_A_WRDATA_WRDATA_SHIFT 0 200 201 202 203 struct SI32_FLASHCTRL_A_KEY_Struct 204 { 205 union 206 { 207 struct 208 { 209 // Flash Key 210 volatile uint8_t KEY_BITS; 211 uint32_t reserved0: 24; 212 }; 213 volatile uint32_t U32; 214 }; 215 }; 216 217 #define SI32_FLASHCTRL_A_KEY_KEY_MASK 0x000000FF 218 #define SI32_FLASHCTRL_A_KEY_KEY_SHIFT 0 219 #define SI32_FLASHCTRL_A_KEY_KEY_MULTI_LOCK_VALUE 90 220 #define SI32_FLASHCTRL_A_KEY_KEY_MULTI_LOCK_U32 \ 221 (SI32_FLASHCTRL_A_KEY_KEY_MULTI_LOCK_VALUE << SI32_FLASHCTRL_A_KEY_KEY_SHIFT) 222 #define SI32_FLASHCTRL_A_KEY_KEY_INITIAL_UNLOCK_VALUE 165 223 #define SI32_FLASHCTRL_A_KEY_KEY_INITIAL_UNLOCK_U32 \ 224 (SI32_FLASHCTRL_A_KEY_KEY_INITIAL_UNLOCK_VALUE << SI32_FLASHCTRL_A_KEY_KEY_SHIFT) 225 #define SI32_FLASHCTRL_A_KEY_KEY_SINGLE_UNLOCK_VALUE 241 226 #define SI32_FLASHCTRL_A_KEY_KEY_SINGLE_UNLOCK_U32 \ 227 (SI32_FLASHCTRL_A_KEY_KEY_SINGLE_UNLOCK_VALUE << SI32_FLASHCTRL_A_KEY_KEY_SHIFT) 228 #define SI32_FLASHCTRL_A_KEY_KEY_MULTI_UNLOCK_VALUE 242 229 #define SI32_FLASHCTRL_A_KEY_KEY_MULTI_UNLOCK_U32 \ 230 (SI32_FLASHCTRL_A_KEY_KEY_MULTI_UNLOCK_VALUE << SI32_FLASHCTRL_A_KEY_KEY_SHIFT) 231 232 233 234 struct SI32_FLASHCTRL_A_TCONTROL_Struct 235 { 236 union 237 { 238 struct 239 { 240 uint32_t reserved0: 6; 241 // Flash Read Timing Mode 242 volatile uint32_t FLRTMD: 1; 243 uint32_t reserved1: 25; 244 }; 245 volatile uint32_t U32; 246 }; 247 }; 248 249 #define SI32_FLASHCTRL_A_TCONTROL_FLRTMD_MASK 0x00000040 250 #define SI32_FLASHCTRL_A_TCONTROL_FLRTMD_SHIFT 6 251 // Configure the flash read controller for AHB clocks below 12 MHz. 252 #define SI32_FLASHCTRL_A_TCONTROL_FLRTMD_SLOW_VALUE 0 253 #define SI32_FLASHCTRL_A_TCONTROL_FLRTMD_SLOW_U32 \ 254 (SI32_FLASHCTRL_A_TCONTROL_FLRTMD_SLOW_VALUE << SI32_FLASHCTRL_A_TCONTROL_FLRTMD_SHIFT) 255 // Configure the flash read controller for AHB clocks above 12 MHz. 256 #define SI32_FLASHCTRL_A_TCONTROL_FLRTMD_FAST_VALUE 1 257 #define SI32_FLASHCTRL_A_TCONTROL_FLRTMD_FAST_U32 \ 258 (SI32_FLASHCTRL_A_TCONTROL_FLRTMD_FAST_VALUE << SI32_FLASHCTRL_A_TCONTROL_FLRTMD_SHIFT) 259 260 261 262 typedef struct SI32_FLASHCTRL_A_Struct 263 { 264 struct SI32_FLASHCTRL_A_CONFIG_Struct CONFIG ; // Base Address + 0x0 265 volatile uint32_t CONFIG_SET; 266 volatile uint32_t CONFIG_CLR; 267 uint32_t reserved0; 268 uint32_t reserved1[4]; 269 uint32_t reserved2[4]; 270 uint32_t reserved3[4]; 271 uint32_t reserved4[4]; 272 uint32_t reserved5[4]; 273 uint32_t reserved6[4]; 274 uint32_t reserved7[4]; 275 uint32_t reserved8[4]; 276 uint32_t reserved9[4]; 277 struct SI32_FLASHCTRL_A_WRADDR_Struct WRADDR ; // Base Address + 0xa0 278 uint32_t reserved10; 279 uint32_t reserved11; 280 uint32_t reserved12; 281 struct SI32_FLASHCTRL_A_WRDATA_Struct WRDATA ; // Base Address + 0xb0 282 uint32_t reserved13; 283 uint32_t reserved14; 284 uint32_t reserved15; 285 struct SI32_FLASHCTRL_A_KEY_Struct KEY ; // Base Address + 0xc0 286 uint32_t reserved16; 287 uint32_t reserved17; 288 uint32_t reserved18; 289 struct SI32_FLASHCTRL_A_TCONTROL_Struct TCONTROL ; // Base Address + 0xd0 290 uint32_t reserved19; 291 uint32_t reserved20; 292 uint32_t reserved21; 293 uint32_t reserved22[4]; 294 uint32_t reserved23[4]; 295 uint32_t reserved24[4]; 296 uint32_t reserved25[4]; 297 uint32_t reserved26[4]; 298 uint32_t reserved27[4]; 299 uint32_t reserved28[4]; 300 uint32_t reserved29[4]; 301 } SI32_FLASHCTRL_A_Type; 302 303 #ifdef __cplusplus 304 } 305 #endif 306 307 #endif // __SI32_FLASHCTRL_A_REGISTERS_H__ 308 309 //-eof-------------------------------------------------------------------------- 310 311