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.57 24 // Version: 1 25 26 #ifndef __SI32_CRC_A_REGISTERS_H__ 27 #define __SI32_CRC_A_REGISTERS_H__ 28 29 #include <stdint.h> 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 struct SI32_CRC_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: 2; 50 uint32_t reserved1: 2; 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: 20; 58 }; 59 volatile uint32_t U32; 60 }; 61 }; 62 63 #define SI32_CRC_A_CONTROL_SINITEN_MASK 0x00000001 64 #define SI32_CRC_A_CONTROL_SINITEN_SHIFT 0 65 // Do not initialize the CRC module to the value set by the SEED bit. 66 #define SI32_CRC_A_CONTROL_SINITEN_DISABLED_VALUE 0 67 #define SI32_CRC_A_CONTROL_SINITEN_DISABLED_U32 \ 68 (SI32_CRC_A_CONTROL_SINITEN_DISABLED_VALUE << SI32_CRC_A_CONTROL_SINITEN_SHIFT) 69 // Initialize the CRC module to the value set by the SEED bit. 70 #define SI32_CRC_A_CONTROL_SINITEN_ENABLED_VALUE 1 71 #define SI32_CRC_A_CONTROL_SINITEN_ENABLED_U32 \ 72 (SI32_CRC_A_CONTROL_SINITEN_ENABLED_VALUE << SI32_CRC_A_CONTROL_SINITEN_SHIFT) 73 74 #define SI32_CRC_A_CONTROL_SEED_MASK 0x00000002 75 #define SI32_CRC_A_CONTROL_SEED_SHIFT 1 76 // CRC seed value is all 0's (0x00000000) 77 #define SI32_CRC_A_CONTROL_SEED_ALL_ZEROES_VALUE 0 78 #define SI32_CRC_A_CONTROL_SEED_ALL_ZEROES_U32 \ 79 (SI32_CRC_A_CONTROL_SEED_ALL_ZEROES_VALUE << SI32_CRC_A_CONTROL_SEED_SHIFT) 80 // CRC seed value is all 1's (0xFFFFFFFF). 81 #define SI32_CRC_A_CONTROL_SEED_ALL_ONES_VALUE 1 82 #define SI32_CRC_A_CONTROL_SEED_ALL_ONES_U32 \ 83 (SI32_CRC_A_CONTROL_SEED_ALL_ONES_VALUE << SI32_CRC_A_CONTROL_SEED_SHIFT) 84 85 #define SI32_CRC_A_CONTROL_CRCEN_MASK 0x00000004 86 #define SI32_CRC_A_CONTROL_CRCEN_SHIFT 2 87 // Disable CRC operations. 88 #define SI32_CRC_A_CONTROL_CRCEN_DISABLED_VALUE 0 89 #define SI32_CRC_A_CONTROL_CRCEN_DISABLED_U32 \ 90 (SI32_CRC_A_CONTROL_CRCEN_DISABLED_VALUE << SI32_CRC_A_CONTROL_CRCEN_SHIFT) 91 // Enable CRC operations. 92 #define SI32_CRC_A_CONTROL_CRCEN_ENABLED_VALUE 1 93 #define SI32_CRC_A_CONTROL_CRCEN_ENABLED_U32 \ 94 (SI32_CRC_A_CONTROL_CRCEN_ENABLED_VALUE << SI32_CRC_A_CONTROL_CRCEN_SHIFT) 95 96 #define SI32_CRC_A_CONTROL_POLYSEL_MASK 0x00000030 97 #define SI32_CRC_A_CONTROL_POLYSEL_SHIFT 4 98 // Select 32-bit polynomial: 0x04C11DB7. 99 #define SI32_CRC_A_CONTROL_POLYSEL_CRC_32_04C11DB7_VALUE 0 100 #define SI32_CRC_A_CONTROL_POLYSEL_CRC_32_04C11DB7_U32 \ 101 (SI32_CRC_A_CONTROL_POLYSEL_CRC_32_04C11DB7_VALUE << SI32_CRC_A_CONTROL_POLYSEL_SHIFT) 102 // Select 16-bit polynomial: 0x1021. 103 #define SI32_CRC_A_CONTROL_POLYSEL_CRC_16_1021_VALUE 1 104 #define SI32_CRC_A_CONTROL_POLYSEL_CRC_16_1021_U32 \ 105 (SI32_CRC_A_CONTROL_POLYSEL_CRC_16_1021_VALUE << SI32_CRC_A_CONTROL_POLYSEL_SHIFT) 106 // Select 16-bit polynomial: 0x3D65. 107 #define SI32_CRC_A_CONTROL_POLYSEL_CRC_16_3D65_VALUE 2 108 #define SI32_CRC_A_CONTROL_POLYSEL_CRC_16_3D65_U32 \ 109 (SI32_CRC_A_CONTROL_POLYSEL_CRC_16_3D65_VALUE << SI32_CRC_A_CONTROL_POLYSEL_SHIFT) 110 // Select 16-bit polynomial: 0x8005. 111 #define SI32_CRC_A_CONTROL_POLYSEL_CRC_16_8005_VALUE 3 112 #define SI32_CRC_A_CONTROL_POLYSEL_CRC_16_8005_U32 \ 113 (SI32_CRC_A_CONTROL_POLYSEL_CRC_16_8005_VALUE << SI32_CRC_A_CONTROL_POLYSEL_SHIFT) 114 115 #define SI32_CRC_A_CONTROL_BMDEN_MASK 0x00000100 116 #define SI32_CRC_A_CONTROL_BMDEN_SHIFT 8 117 // Disable byte mode (word/byte width is determined automatically by the hardware). 118 #define SI32_CRC_A_CONTROL_BMDEN_DISABLED_VALUE 0 119 #define SI32_CRC_A_CONTROL_BMDEN_DISABLED_U32 \ 120 (SI32_CRC_A_CONTROL_BMDEN_DISABLED_VALUE << SI32_CRC_A_CONTROL_BMDEN_SHIFT) 121 // Enable byte mode (all writes are considered as bytes). 122 #define SI32_CRC_A_CONTROL_BMDEN_ENABLED_VALUE 1 123 #define SI32_CRC_A_CONTROL_BMDEN_ENABLED_U32 \ 124 (SI32_CRC_A_CONTROL_BMDEN_ENABLED_VALUE << SI32_CRC_A_CONTROL_BMDEN_SHIFT) 125 126 #define SI32_CRC_A_CONTROL_BBREN_MASK 0x00000200 127 #define SI32_CRC_A_CONTROL_BBREN_SHIFT 9 128 // No byte-level bit reversal (input is same order as written). 129 #define SI32_CRC_A_CONTROL_BBREN_DISABLED_VALUE 0 130 #define SI32_CRC_A_CONTROL_BBREN_DISABLED_U32 \ 131 (SI32_CRC_A_CONTROL_BBREN_DISABLED_VALUE << SI32_CRC_A_CONTROL_BBREN_SHIFT) 132 // Byte-level bit reversal enabled (the bits in each byte are reversed). 133 #define SI32_CRC_A_CONTROL_BBREN_ENABLED_VALUE 1 134 #define SI32_CRC_A_CONTROL_BBREN_ENABLED_U32 \ 135 (SI32_CRC_A_CONTROL_BBREN_ENABLED_VALUE << SI32_CRC_A_CONTROL_BBREN_SHIFT) 136 137 #define SI32_CRC_A_CONTROL_ORDER_MASK 0x00000C00 138 #define SI32_CRC_A_CONTROL_ORDER_SHIFT 10 139 // No byte reorientation (output is same order as input). 140 #define SI32_CRC_A_CONTROL_ORDER_NO_REORDER_VALUE 0 141 #define SI32_CRC_A_CONTROL_ORDER_NO_REORDER_U32 \ 142 (SI32_CRC_A_CONTROL_ORDER_NO_REORDER_VALUE << SI32_CRC_A_CONTROL_ORDER_SHIFT) 143 // Swap for 16-bit big endian order (input: B3 B2 B1 B0, output: B2 B3 B0 B1). 144 #define SI32_CRC_A_CONTROL_ORDER_BIG_ENDIAN_16_VALUE 1 145 #define SI32_CRC_A_CONTROL_ORDER_BIG_ENDIAN_16_U32 \ 146 (SI32_CRC_A_CONTROL_ORDER_BIG_ENDIAN_16_VALUE << SI32_CRC_A_CONTROL_ORDER_SHIFT) 147 // Swap for 32-bit big endian order (input: B3 B2 B1 B0, output: B0 B1 B2 B3). 148 #define SI32_CRC_A_CONTROL_ORDER_BIG_ENDIAN_32_VALUE 2 149 #define SI32_CRC_A_CONTROL_ORDER_BIG_ENDIAN_32_U32 \ 150 (SI32_CRC_A_CONTROL_ORDER_BIG_ENDIAN_32_VALUE << SI32_CRC_A_CONTROL_ORDER_SHIFT) 151 152 153 154 struct SI32_CRC_A_DATA_Struct 155 { 156 union 157 { 158 struct 159 { 160 // Input/Result Data 161 volatile uint32_t DATA_BITS; 162 }; 163 volatile uint32_t U32; 164 }; 165 }; 166 167 #define SI32_CRC_A_DATA_DATA_MASK 0xFFFFFFFF 168 #define SI32_CRC_A_DATA_DATA_SHIFT 0 169 170 171 172 struct SI32_CRC_A_RDATA_Struct 173 { 174 union 175 { 176 struct 177 { 178 // Bit-Reversed Output Data 179 volatile uint32_t RDATA_BITS; 180 }; 181 volatile uint32_t U32; 182 }; 183 }; 184 185 #define SI32_CRC_A_RDATA_RDATA_MASK 0xFFFFFFFF 186 #define SI32_CRC_A_RDATA_RDATA_SHIFT 0 187 188 189 190 typedef struct SI32_CRC_A_Struct 191 { 192 struct SI32_CRC_A_CONTROL_Struct CONTROL ; // Base Address + 0x0 193 volatile uint32_t CONTROL_SET; 194 volatile uint32_t CONTROL_CLR; 195 uint32_t reserved0; 196 struct SI32_CRC_A_DATA_Struct DATA ; // Base Address + 0x10 197 uint32_t reserved1; 198 uint32_t reserved2; 199 uint32_t reserved3; 200 struct SI32_CRC_A_RDATA_Struct RDATA ; // Base Address + 0x20 201 uint32_t reserved4; 202 uint32_t reserved5; 203 uint32_t reserved6; 204 } SI32_CRC_A_Type; 205 206 #ifdef __cplusplus 207 } 208 #endif 209 210 #endif // __SI32_CRC_A_REGISTERS_H__ 211 212 //-eof-------------------------------------------------------------------------- 213 214