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_ECRC_A_REGISTERS_H__ 27 #define __SI32_ECRC_A_REGISTERS_H__ 28 29 #include <stdint.h> 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 struct SI32_ECRC_A_CONTROL_Struct 36 { 37 union 38 { 39 struct 40 { 41 // Seed Initialization Enable 42 volatile uint32_t SINITEN: 1; 43 // Seed Setting 44 volatile uint32_t SEED: 1; 45 // CRC Enable 46 volatile uint32_t CRCEN: 1; 47 uint32_t reserved0: 1; 48 // Polynomial Selection 49 volatile uint32_t POLYSEL: 1; 50 uint32_t reserved1: 3; 51 // Byte Mode Enable 52 volatile uint32_t BMDEN: 1; 53 // Byte-Level Bit Reversal Enable 54 volatile uint32_t BBREN: 1; 55 // Input Processing Order 56 volatile uint32_t ORDER: 2; 57 uint32_t reserved2: 1; 58 // Automatic Seed Enable 59 volatile uint32_t ASEEDEN: 1; 60 // Automatic Seed Byte Select 61 volatile uint32_t ASEEDSEL: 1; 62 uint32_t reserved3: 17; 63 }; 64 volatile uint32_t U32; 65 }; 66 }; 67 68 #define SI32_ECRC_A_CONTROL_SINITEN_MASK 0x00000001 69 #define SI32_ECRC_A_CONTROL_SINITEN_SHIFT 0 70 // Do not initialize the CRC module to the value set by the SEED bit. 71 #define SI32_ECRC_A_CONTROL_SINITEN_DISABLED_VALUE 0 72 #define SI32_ECRC_A_CONTROL_SINITEN_DISABLED_U32 \ 73 (SI32_ECRC_A_CONTROL_SINITEN_DISABLED_VALUE << SI32_ECRC_A_CONTROL_SINITEN_SHIFT) 74 // Initialize the CRC module to the value set by the SEED bit. 75 #define SI32_ECRC_A_CONTROL_SINITEN_ENABLED_VALUE 1 76 #define SI32_ECRC_A_CONTROL_SINITEN_ENABLED_U32 \ 77 (SI32_ECRC_A_CONTROL_SINITEN_ENABLED_VALUE << SI32_ECRC_A_CONTROL_SINITEN_SHIFT) 78 79 #define SI32_ECRC_A_CONTROL_SEED_MASK 0x00000002 80 #define SI32_ECRC_A_CONTROL_SEED_SHIFT 1 81 // CRC seed value is all 0's (0x00000000) 82 #define SI32_ECRC_A_CONTROL_SEED_ALL_ZEROES_VALUE 0 83 #define SI32_ECRC_A_CONTROL_SEED_ALL_ZEROES_U32 \ 84 (SI32_ECRC_A_CONTROL_SEED_ALL_ZEROES_VALUE << SI32_ECRC_A_CONTROL_SEED_SHIFT) 85 // CRC seed value is all 1's (0xFFFFFFFF). 86 #define SI32_ECRC_A_CONTROL_SEED_ALL_ONES_VALUE 1 87 #define SI32_ECRC_A_CONTROL_SEED_ALL_ONES_U32 \ 88 (SI32_ECRC_A_CONTROL_SEED_ALL_ONES_VALUE << SI32_ECRC_A_CONTROL_SEED_SHIFT) 89 90 #define SI32_ECRC_A_CONTROL_CRCEN_MASK 0x00000004 91 #define SI32_ECRC_A_CONTROL_CRCEN_SHIFT 2 92 // Disable CRC operations. 93 #define SI32_ECRC_A_CONTROL_CRCEN_DISABLED_VALUE 0 94 #define SI32_ECRC_A_CONTROL_CRCEN_DISABLED_U32 \ 95 (SI32_ECRC_A_CONTROL_CRCEN_DISABLED_VALUE << SI32_ECRC_A_CONTROL_CRCEN_SHIFT) 96 // Enable CRC operations. 97 #define SI32_ECRC_A_CONTROL_CRCEN_ENABLED_VALUE 1 98 #define SI32_ECRC_A_CONTROL_CRCEN_ENABLED_U32 \ 99 (SI32_ECRC_A_CONTROL_CRCEN_ENABLED_VALUE << SI32_ECRC_A_CONTROL_CRCEN_SHIFT) 100 101 #define SI32_ECRC_A_CONTROL_POLYSEL_MASK 0x00000010 102 #define SI32_ECRC_A_CONTROL_POLYSEL_SHIFT 4 103 // Select the fixed 32-bit polynomial: 0x04C11DB7. 104 #define SI32_ECRC_A_CONTROL_POLYSEL_CRC32_FIXED_VALUE 0 105 #define SI32_ECRC_A_CONTROL_POLYSEL_CRC32_FIXED_U32 \ 106 (SI32_ECRC_A_CONTROL_POLYSEL_CRC32_FIXED_VALUE << SI32_ECRC_A_CONTROL_POLYSEL_SHIFT) 107 // Select the programmable 16-bit polynomial. The POLY register sets the polynomial 108 // coefficients. 109 #define SI32_ECRC_A_CONTROL_POLYSEL_CRC16_PROG_VALUE 1 110 #define SI32_ECRC_A_CONTROL_POLYSEL_CRC16_PROG_U32 \ 111 (SI32_ECRC_A_CONTROL_POLYSEL_CRC16_PROG_VALUE << SI32_ECRC_A_CONTROL_POLYSEL_SHIFT) 112 113 #define SI32_ECRC_A_CONTROL_BMDEN_MASK 0x00000100 114 #define SI32_ECRC_A_CONTROL_BMDEN_SHIFT 8 115 // Disable byte mode (word/byte width is determined automatically by the hardware). 116 #define SI32_ECRC_A_CONTROL_BMDEN_DISABLED_VALUE 0 117 #define SI32_ECRC_A_CONTROL_BMDEN_DISABLED_U32 \ 118 (SI32_ECRC_A_CONTROL_BMDEN_DISABLED_VALUE << SI32_ECRC_A_CONTROL_BMDEN_SHIFT) 119 // Enable byte mode (all writes are considered as bytes). 120 #define SI32_ECRC_A_CONTROL_BMDEN_ENABLED_VALUE 1 121 #define SI32_ECRC_A_CONTROL_BMDEN_ENABLED_U32 \ 122 (SI32_ECRC_A_CONTROL_BMDEN_ENABLED_VALUE << SI32_ECRC_A_CONTROL_BMDEN_SHIFT) 123 124 #define SI32_ECRC_A_CONTROL_BBREN_MASK 0x00000200 125 #define SI32_ECRC_A_CONTROL_BBREN_SHIFT 9 126 // No byte-level bit reversal (input is same order as written). 127 #define SI32_ECRC_A_CONTROL_BBREN_DISABLED_VALUE 0 128 #define SI32_ECRC_A_CONTROL_BBREN_DISABLED_U32 \ 129 (SI32_ECRC_A_CONTROL_BBREN_DISABLED_VALUE << SI32_ECRC_A_CONTROL_BBREN_SHIFT) 130 // Byte-level bit reversal enabled (the bits in each byte are reversed). 131 #define SI32_ECRC_A_CONTROL_BBREN_ENABLED_VALUE 1 132 #define SI32_ECRC_A_CONTROL_BBREN_ENABLED_U32 \ 133 (SI32_ECRC_A_CONTROL_BBREN_ENABLED_VALUE << SI32_ECRC_A_CONTROL_BBREN_SHIFT) 134 135 #define SI32_ECRC_A_CONTROL_ORDER_MASK 0x00000C00 136 #define SI32_ECRC_A_CONTROL_ORDER_SHIFT 10 137 // No byte reorientation (output is same order as input). 138 #define SI32_ECRC_A_CONTROL_ORDER_NO_REORDER_VALUE 0 139 #define SI32_ECRC_A_CONTROL_ORDER_NO_REORDER_U32 \ 140 (SI32_ECRC_A_CONTROL_ORDER_NO_REORDER_VALUE << SI32_ECRC_A_CONTROL_ORDER_SHIFT) 141 // Swap for 16-bit big endian order (input: B3 B2 B1 B0, output: B2 B3 B0 B1). 142 #define SI32_ECRC_A_CONTROL_ORDER_BIG_ENDIAN_16_VALUE 1 143 #define SI32_ECRC_A_CONTROL_ORDER_BIG_ENDIAN_16_U32 \ 144 (SI32_ECRC_A_CONTROL_ORDER_BIG_ENDIAN_16_VALUE << SI32_ECRC_A_CONTROL_ORDER_SHIFT) 145 // Swap for 32-bit big endian order (input: B3 B2 B1 B0, output: B0 B1 B2 B3). 146 #define SI32_ECRC_A_CONTROL_ORDER_BIG_ENDIAN_32_VALUE 2 147 #define SI32_ECRC_A_CONTROL_ORDER_BIG_ENDIAN_32_U32 \ 148 (SI32_ECRC_A_CONTROL_ORDER_BIG_ENDIAN_32_VALUE << SI32_ECRC_A_CONTROL_ORDER_SHIFT) 149 150 #define SI32_ECRC_A_CONTROL_ASEEDEN_MASK 0x00002000 151 #define SI32_ECRC_A_CONTROL_ASEEDEN_SHIFT 13 152 // Disable automatic seeding. 153 #define SI32_ECRC_A_CONTROL_ASEEDEN_DISABLED_VALUE 0 154 #define SI32_ECRC_A_CONTROL_ASEEDEN_DISABLED_U32 \ 155 (SI32_ECRC_A_CONTROL_ASEEDEN_DISABLED_VALUE << SI32_ECRC_A_CONTROL_ASEEDEN_SHIFT) 156 // Enable automatic seeding. Reading the byte of the DATA register selected by 157 // ASEEDSEL re-seeds the CRC result with the setting selected by SEED. 158 #define SI32_ECRC_A_CONTROL_ASEEDEN_ENABLED_VALUE 1 159 #define SI32_ECRC_A_CONTROL_ASEEDEN_ENABLED_U32 \ 160 (SI32_ECRC_A_CONTROL_ASEEDEN_ENABLED_VALUE << SI32_ECRC_A_CONTROL_ASEEDEN_SHIFT) 161 162 #define SI32_ECRC_A_CONTROL_ASEEDSEL_MASK 0x00004000 163 #define SI32_ECRC_A_CONTROL_ASEEDSEL_SHIFT 14 164 // Select a read of the least-significant byte ([7:0]) of DATA, RDATA or BRDATA for 165 // automatic re-seeding. 166 #define SI32_ECRC_A_CONTROL_ASEEDSEL_LSB_READ_VALUE 0 167 #define SI32_ECRC_A_CONTROL_ASEEDSEL_LSB_READ_U32 \ 168 (SI32_ECRC_A_CONTROL_ASEEDSEL_LSB_READ_VALUE << SI32_ECRC_A_CONTROL_ASEEDSEL_SHIFT) 169 // Select a read of the most-significant byte [31:24] for 32-bit operations, and 170 // [15:8] for 16-bit operations) of DATA, RDATA or BRDATA for automatic re-seeding. 171 #define SI32_ECRC_A_CONTROL_ASEEDSEL_MSB_READ_VALUE 1 172 #define SI32_ECRC_A_CONTROL_ASEEDSEL_MSB_READ_U32 \ 173 (SI32_ECRC_A_CONTROL_ASEEDSEL_MSB_READ_VALUE << SI32_ECRC_A_CONTROL_ASEEDSEL_SHIFT) 174 175 176 177 struct SI32_ECRC_A_POLY_Struct 178 { 179 union 180 { 181 struct 182 { 183 // 16-bit Programmable Polynomial 184 volatile uint16_t POLY_BITS; 185 uint32_t reserved0: 16; 186 }; 187 volatile uint32_t U32; 188 }; 189 }; 190 191 #define SI32_ECRC_A_POLY_POLY_MASK 0x0000FFFF 192 #define SI32_ECRC_A_POLY_POLY_SHIFT 0 193 194 195 196 struct SI32_ECRC_A_DATA_Struct 197 { 198 union 199 { 200 struct 201 { 202 // Input/Result Data 203 volatile uint32_t DATA_BITS; 204 }; 205 volatile uint32_t U32; 206 }; 207 }; 208 209 #define SI32_ECRC_A_DATA_DATA_MASK 0xFFFFFFFF 210 #define SI32_ECRC_A_DATA_DATA_SHIFT 0 211 212 213 214 struct SI32_ECRC_A_RDATA_Struct 215 { 216 union 217 { 218 struct 219 { 220 // Bit-Reversed Output Data 221 volatile uint32_t RDATA_BITS; 222 }; 223 volatile uint32_t U32; 224 }; 225 }; 226 227 #define SI32_ECRC_A_RDATA_RDATA_MASK 0xFFFFFFFF 228 #define SI32_ECRC_A_RDATA_RDATA_SHIFT 0 229 230 231 232 struct SI32_ECRC_A_BRDATA_Struct 233 { 234 union 235 { 236 struct 237 { 238 // Byte-Reversed Output Data 239 volatile uint32_t BRDATA_BITS; 240 }; 241 volatile uint32_t U32; 242 }; 243 }; 244 245 #define SI32_ECRC_A_BRDATA_BRDATA_MASK 0xFFFFFFFF 246 #define SI32_ECRC_A_BRDATA_BRDATA_SHIFT 0 247 248 249 250 struct SI32_ECRC_A_SCONTROL_Struct 251 { 252 union 253 { 254 struct 255 { 256 // Snooping Enable 257 volatile uint32_t SEN: 1; 258 // Snooping Direction Select 259 volatile uint32_t SDIRSEL: 1; 260 uint32_t reserved0: 2; 261 // Snooping Peripheral Select 262 volatile uint32_t SPERISEL: 4; 263 uint32_t reserved1: 10; 264 // Snooping Address 265 volatile uint32_t SADDR: 10; 266 uint32_t reserved2: 4; 267 }; 268 volatile uint32_t U32; 269 }; 270 }; 271 272 #define SI32_ECRC_A_SCONTROL_SEN_MASK 0x00000001 273 #define SI32_ECRC_A_SCONTROL_SEN_SHIFT 0 274 // Disable automatic bus snooping. 275 #define SI32_ECRC_A_SCONTROL_SEN_DISABLED_VALUE 0 276 #define SI32_ECRC_A_SCONTROL_SEN_DISABLED_U32 \ 277 (SI32_ECRC_A_SCONTROL_SEN_DISABLED_VALUE << SI32_ECRC_A_SCONTROL_SEN_SHIFT) 278 // Enable automatic bus snooping. 279 #define SI32_ECRC_A_SCONTROL_SEN_ENABLED_VALUE 1 280 #define SI32_ECRC_A_SCONTROL_SEN_ENABLED_U32 \ 281 (SI32_ECRC_A_SCONTROL_SEN_ENABLED_VALUE << SI32_ECRC_A_SCONTROL_SEN_SHIFT) 282 283 #define SI32_ECRC_A_SCONTROL_SDIRSEL_MASK 0x00000002 284 #define SI32_ECRC_A_SCONTROL_SDIRSEL_SHIFT 1 285 // ECRC will snoop writes to the selected peripheral. 286 #define SI32_ECRC_A_SCONTROL_SDIRSEL_WRITES_VALUE 0 287 #define SI32_ECRC_A_SCONTROL_SDIRSEL_WRITES_U32 \ 288 (SI32_ECRC_A_SCONTROL_SDIRSEL_WRITES_VALUE << SI32_ECRC_A_SCONTROL_SDIRSEL_SHIFT) 289 // ECRC will snoop reads from the selected peripheral. 290 #define SI32_ECRC_A_SCONTROL_SDIRSEL_READS_VALUE 1 291 #define SI32_ECRC_A_SCONTROL_SDIRSEL_READS_U32 \ 292 (SI32_ECRC_A_SCONTROL_SDIRSEL_READS_VALUE << SI32_ECRC_A_SCONTROL_SDIRSEL_SHIFT) 293 294 #define SI32_ECRC_A_SCONTROL_SPERISEL_MASK 0x000000F0 295 #define SI32_ECRC_A_SCONTROL_SPERISEL_SHIFT 4 296 297 #define SI32_ECRC_A_SCONTROL_SADDR_MASK 0x0FFC0000 298 #define SI32_ECRC_A_SCONTROL_SADDR_SHIFT 18 299 300 301 302 typedef struct SI32_ECRC_A_Struct 303 { 304 struct SI32_ECRC_A_CONTROL_Struct CONTROL ; // Base Address + 0x0 305 volatile uint32_t CONTROL_SET; 306 volatile uint32_t CONTROL_CLR; 307 uint32_t reserved0; 308 struct SI32_ECRC_A_POLY_Struct POLY ; // Base Address + 0x10 309 uint32_t reserved1; 310 uint32_t reserved2; 311 uint32_t reserved3; 312 struct SI32_ECRC_A_DATA_Struct DATA ; // Base Address + 0x20 313 uint32_t reserved4; 314 uint32_t reserved5; 315 uint32_t reserved6; 316 struct SI32_ECRC_A_RDATA_Struct RDATA ; // Base Address + 0x30 317 uint32_t reserved7; 318 uint32_t reserved8; 319 uint32_t reserved9; 320 struct SI32_ECRC_A_BRDATA_Struct BRDATA ; // Base Address + 0x40 321 uint32_t reserved10; 322 uint32_t reserved11; 323 uint32_t reserved12; 324 struct SI32_ECRC_A_SCONTROL_Struct SCONTROL ; // Base Address + 0x50 325 volatile uint32_t SCONTROL_SET; 326 volatile uint32_t SCONTROL_CLR; 327 uint32_t reserved13; 328 } SI32_ECRC_A_Type; 329 330 #ifdef __cplusplus 331 } 332 #endif 333 334 #endif // __SI32_ECRC_A_REGISTERS_H__ 335 336 //-eof-------------------------------------------------------------------------- 337 338