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_SPI_A_REGISTERS_H__ 27 #define __SI32_SPI_A_REGISTERS_H__ 28 29 #include <stdint.h> 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 struct SI32_SPI_A_DATA_Struct 36 { 37 union 38 { 39 // This is a FIFO register 40 volatile uint8_t U8; 41 volatile uint16_t U16; 42 volatile uint32_t U32; 43 }; 44 }; 45 46 #define SI32_SPI_A_DATA_DATA_MASK 0xFFFFFFFF 47 #define SI32_SPI_A_DATA_DATA_SHIFT 0 48 49 50 51 struct SI32_SPI_A_CONTROL_Struct 52 { 53 union 54 { 55 struct 56 { 57 // Receive FIFO Read Request Interrupt Flag 58 volatile uint32_t RFRQI: 1; 59 // Receive FIFO Overrun Interrupt Flag 60 volatile uint32_t RFORI: 1; 61 // Transmit FIFO Write Request Interrupt Flag 62 volatile uint32_t TFRQI: 1; 63 // Transmit FIFO Overrun Interrupt Flag 64 volatile uint32_t TFORI: 1; 65 // Slave Selected Interrupt Flag 66 volatile uint32_t SLVSELI: 1; 67 // Mode Fault Interrupt Flag 68 volatile uint32_t MDFI: 1; 69 // Underrun Interrupt Flag 70 volatile uint32_t URI: 1; 71 // Shift Register Empty Interrupt Flag 72 volatile uint32_t SREI: 1; 73 // Illegal Receive FIFO Access Interrupt Flag 74 volatile uint32_t RFILI: 1; 75 // Illegal Transmit FIFO Access Interrupt Flag 76 volatile uint32_t TFILI: 1; 77 uint32_t reserved0: 4; 78 // NSS Instantaneous Pin Status 79 volatile uint32_t NSSSTS: 1; 80 // SPI Busy 81 volatile uint32_t BUSYF: 1; 82 // Receive FIFO Counter 83 volatile uint32_t RFCNT: 4; 84 // Transmit FIFO Counter 85 volatile uint32_t TFCNT: 4; 86 // SPI Debug Mode 87 volatile uint32_t DBGMD: 1; 88 uint32_t reserved1: 7; 89 }; 90 volatile uint32_t U32; 91 }; 92 }; 93 94 #define SI32_SPI_A_CONTROL_RFRQI_MASK 0x00000001 95 #define SI32_SPI_A_CONTROL_RFRQI_SHIFT 0 96 // The RX FIFO has fewer bytes than the level defined by RFTH. 97 #define SI32_SPI_A_CONTROL_RFRQI_NOT_SET_VALUE 0 98 #define SI32_SPI_A_CONTROL_RFRQI_NOT_SET_U32 \ 99 (SI32_SPI_A_CONTROL_RFRQI_NOT_SET_VALUE << SI32_SPI_A_CONTROL_RFRQI_SHIFT) 100 // The RX FIFO has equal or more bytes than the level defined by RFTH. 101 #define SI32_SPI_A_CONTROL_RFRQI_SET_VALUE 1 102 #define SI32_SPI_A_CONTROL_RFRQI_SET_U32 \ 103 (SI32_SPI_A_CONTROL_RFRQI_SET_VALUE << SI32_SPI_A_CONTROL_RFRQI_SHIFT) 104 105 #define SI32_SPI_A_CONTROL_RFORI_MASK 0x00000002 106 #define SI32_SPI_A_CONTROL_RFORI_SHIFT 1 107 // Read: A receive FIFO overrun has not occurred. Write: Clear the flag. 108 #define SI32_SPI_A_CONTROL_RFORI_NOT_SET_VALUE 0 109 #define SI32_SPI_A_CONTROL_RFORI_NOT_SET_U32 \ 110 (SI32_SPI_A_CONTROL_RFORI_NOT_SET_VALUE << SI32_SPI_A_CONTROL_RFORI_SHIFT) 111 // Read: A receive FIFO overrun occurred. Write: Force a receive overrun 112 // interrupt. 113 #define SI32_SPI_A_CONTROL_RFORI_SET_VALUE 1 114 #define SI32_SPI_A_CONTROL_RFORI_SET_U32 \ 115 (SI32_SPI_A_CONTROL_RFORI_SET_VALUE << SI32_SPI_A_CONTROL_RFORI_SHIFT) 116 117 #define SI32_SPI_A_CONTROL_TFRQI_MASK 0x00000004 118 #define SI32_SPI_A_CONTROL_TFRQI_SHIFT 2 119 // The TX FIFO has fewer bytes than the level defined by TFTH. 120 #define SI32_SPI_A_CONTROL_TFRQI_NOT_SET_VALUE 0 121 #define SI32_SPI_A_CONTROL_TFRQI_NOT_SET_U32 \ 122 (SI32_SPI_A_CONTROL_TFRQI_NOT_SET_VALUE << SI32_SPI_A_CONTROL_TFRQI_SHIFT) 123 // The TX FIFO has equal or more bytes than the level defined by TFTH. 124 #define SI32_SPI_A_CONTROL_TFRQI_SET_VALUE 1 125 #define SI32_SPI_A_CONTROL_TFRQI_SET_U32 \ 126 (SI32_SPI_A_CONTROL_TFRQI_SET_VALUE << SI32_SPI_A_CONTROL_TFRQI_SHIFT) 127 128 #define SI32_SPI_A_CONTROL_TFORI_MASK 0x00000008 129 #define SI32_SPI_A_CONTROL_TFORI_SHIFT 3 130 // Read: A transmit FIFO overrun has not occurred. Write: Clear the flag. 131 #define SI32_SPI_A_CONTROL_TFORI_NOT_SET_VALUE 0 132 #define SI32_SPI_A_CONTROL_TFORI_NOT_SET_U32 \ 133 (SI32_SPI_A_CONTROL_TFORI_NOT_SET_VALUE << SI32_SPI_A_CONTROL_TFORI_SHIFT) 134 // Read: A transmit FIFO overrun occurred. Write: Force a transmit overrun 135 // interrupt. 136 #define SI32_SPI_A_CONTROL_TFORI_SET_VALUE 1 137 #define SI32_SPI_A_CONTROL_TFORI_SET_U32 \ 138 (SI32_SPI_A_CONTROL_TFORI_SET_VALUE << SI32_SPI_A_CONTROL_TFORI_SHIFT) 139 140 #define SI32_SPI_A_CONTROL_SLVSELI_MASK 0x00000010 141 #define SI32_SPI_A_CONTROL_SLVSELI_SHIFT 4 142 // The slave select signal (NSS) is not active. 143 #define SI32_SPI_A_CONTROL_SLVSELI_NOT_SET_VALUE 0 144 #define SI32_SPI_A_CONTROL_SLVSELI_NOT_SET_U32 \ 145 (SI32_SPI_A_CONTROL_SLVSELI_NOT_SET_VALUE << SI32_SPI_A_CONTROL_SLVSELI_SHIFT) 146 // The slave select signal (NSS) is active. 147 #define SI32_SPI_A_CONTROL_SLVSELI_SET_VALUE 1 148 #define SI32_SPI_A_CONTROL_SLVSELI_SET_U32 \ 149 (SI32_SPI_A_CONTROL_SLVSELI_SET_VALUE << SI32_SPI_A_CONTROL_SLVSELI_SHIFT) 150 151 #define SI32_SPI_A_CONTROL_MDFI_MASK 0x00000020 152 #define SI32_SPI_A_CONTROL_MDFI_SHIFT 5 153 // Read: A master mode collision is not detected. Write: Clear the flag. 154 #define SI32_SPI_A_CONTROL_MDFI_NOT_SET_VALUE 0 155 #define SI32_SPI_A_CONTROL_MDFI_NOT_SET_U32 \ 156 (SI32_SPI_A_CONTROL_MDFI_NOT_SET_VALUE << SI32_SPI_A_CONTROL_MDFI_SHIFT) 157 // Read: A master mode collision occurred. Write: Force a mode fault interrupt. 158 #define SI32_SPI_A_CONTROL_MDFI_SET_VALUE 1 159 #define SI32_SPI_A_CONTROL_MDFI_SET_U32 \ 160 (SI32_SPI_A_CONTROL_MDFI_SET_VALUE << SI32_SPI_A_CONTROL_MDFI_SHIFT) 161 162 #define SI32_SPI_A_CONTROL_URI_MASK 0x00000040 163 #define SI32_SPI_A_CONTROL_URI_SHIFT 6 164 // Read: A data transfer is still in progress. Write: Clear the flag. 165 #define SI32_SPI_A_CONTROL_URI_NOT_SET_VALUE 0 166 #define SI32_SPI_A_CONTROL_URI_NOT_SET_U32 \ 167 (SI32_SPI_A_CONTROL_URI_NOT_SET_VALUE << SI32_SPI_A_CONTROL_URI_SHIFT) 168 // Read: The transmit FIFO and shift register are empty and the data transfer has 169 // ended. Write: Force an underrun interrupt. 170 #define SI32_SPI_A_CONTROL_URI_SET_VALUE 1 171 #define SI32_SPI_A_CONTROL_URI_SET_U32 \ 172 (SI32_SPI_A_CONTROL_URI_SET_VALUE << SI32_SPI_A_CONTROL_URI_SHIFT) 173 174 #define SI32_SPI_A_CONTROL_SREI_MASK 0x00000080 175 #define SI32_SPI_A_CONTROL_SREI_SHIFT 7 176 // There is data still present in the transmit FIFO. 177 #define SI32_SPI_A_CONTROL_SREI_NOT_SET_VALUE 0 178 #define SI32_SPI_A_CONTROL_SREI_NOT_SET_U32 \ 179 (SI32_SPI_A_CONTROL_SREI_NOT_SET_VALUE << SI32_SPI_A_CONTROL_SREI_SHIFT) 180 // All data has been transferred out of the shift register and there is no data 181 // waiting in the transmit FIFO. 182 #define SI32_SPI_A_CONTROL_SREI_SET_VALUE 1 183 #define SI32_SPI_A_CONTROL_SREI_SET_U32 \ 184 (SI32_SPI_A_CONTROL_SREI_SET_VALUE << SI32_SPI_A_CONTROL_SREI_SHIFT) 185 186 #define SI32_SPI_A_CONTROL_RFILI_MASK 0x00000100 187 #define SI32_SPI_A_CONTROL_RFILI_SHIFT 8 188 // Read: An illegal write or read of the receive FIFO has not occurred. Write: 189 // Clear the flag. 190 #define SI32_SPI_A_CONTROL_RFILI_NOT_SET_VALUE 0 191 #define SI32_SPI_A_CONTROL_RFILI_NOT_SET_U32 \ 192 (SI32_SPI_A_CONTROL_RFILI_NOT_SET_VALUE << SI32_SPI_A_CONTROL_RFILI_SHIFT) 193 // Read: An illegal write or read of the receive FIFO occurred. Write: Force an 194 // illegal receive access interrupt. 195 #define SI32_SPI_A_CONTROL_RFILI_SET_VALUE 1 196 #define SI32_SPI_A_CONTROL_RFILI_SET_U32 \ 197 (SI32_SPI_A_CONTROL_RFILI_SET_VALUE << SI32_SPI_A_CONTROL_RFILI_SHIFT) 198 199 #define SI32_SPI_A_CONTROL_TFILI_MASK 0x00000200 200 #define SI32_SPI_A_CONTROL_TFILI_SHIFT 9 201 // Read: An illegal write or read of the transmit FIFO has not occurred. Write: 202 // Clear the flag. 203 #define SI32_SPI_A_CONTROL_TFILI_NOT_SET_VALUE 0 204 #define SI32_SPI_A_CONTROL_TFILI_NOT_SET_U32 \ 205 (SI32_SPI_A_CONTROL_TFILI_NOT_SET_VALUE << SI32_SPI_A_CONTROL_TFILI_SHIFT) 206 // Read: An illegal write or read of the transmit FIFO occurred. Write: Force an 207 // illegal transmit access interrupt. 208 #define SI32_SPI_A_CONTROL_TFILI_SET_VALUE 1 209 #define SI32_SPI_A_CONTROL_TFILI_SET_U32 \ 210 (SI32_SPI_A_CONTROL_TFILI_SET_VALUE << SI32_SPI_A_CONTROL_TFILI_SHIFT) 211 212 #define SI32_SPI_A_CONTROL_NSSSTS_MASK 0x00004000 213 #define SI32_SPI_A_CONTROL_NSSSTS_SHIFT 14 214 // NSS is currently a logic low. 215 #define SI32_SPI_A_CONTROL_NSSSTS_LOW_VALUE 0 216 #define SI32_SPI_A_CONTROL_NSSSTS_LOW_U32 \ 217 (SI32_SPI_A_CONTROL_NSSSTS_LOW_VALUE << SI32_SPI_A_CONTROL_NSSSTS_SHIFT) 218 // NSS is currently a logic high. 219 #define SI32_SPI_A_CONTROL_NSSSTS_HIGH_VALUE 1 220 #define SI32_SPI_A_CONTROL_NSSSTS_HIGH_U32 \ 221 (SI32_SPI_A_CONTROL_NSSSTS_HIGH_VALUE << SI32_SPI_A_CONTROL_NSSSTS_SHIFT) 222 223 #define SI32_SPI_A_CONTROL_BUSYF_MASK 0x00008000 224 #define SI32_SPI_A_CONTROL_BUSYF_SHIFT 15 225 // The SPI is not busy and a transfer is not in progress. 226 #define SI32_SPI_A_CONTROL_BUSYF_NOT_SET_VALUE 0 227 #define SI32_SPI_A_CONTROL_BUSYF_NOT_SET_U32 \ 228 (SI32_SPI_A_CONTROL_BUSYF_NOT_SET_VALUE << SI32_SPI_A_CONTROL_BUSYF_SHIFT) 229 // The SPI is currently busy and a transfer is in progress. 230 #define SI32_SPI_A_CONTROL_BUSYF_SET_VALUE 1 231 #define SI32_SPI_A_CONTROL_BUSYF_SET_U32 \ 232 (SI32_SPI_A_CONTROL_BUSYF_SET_VALUE << SI32_SPI_A_CONTROL_BUSYF_SHIFT) 233 234 #define SI32_SPI_A_CONTROL_RFCNT_MASK 0x000F0000 235 #define SI32_SPI_A_CONTROL_RFCNT_SHIFT 16 236 237 #define SI32_SPI_A_CONTROL_TFCNT_MASK 0x00F00000 238 #define SI32_SPI_A_CONTROL_TFCNT_SHIFT 20 239 240 #define SI32_SPI_A_CONTROL_DBGMD_MASK 0x01000000 241 #define SI32_SPI_A_CONTROL_DBGMD_SHIFT 24 242 // The SPI module will continue to operate while the core is halted in debug mode. 243 #define SI32_SPI_A_CONTROL_DBGMD_RUN_VALUE 0 244 #define SI32_SPI_A_CONTROL_DBGMD_RUN_U32 \ 245 (SI32_SPI_A_CONTROL_DBGMD_RUN_VALUE << SI32_SPI_A_CONTROL_DBGMD_SHIFT) 246 // A debug breakpoint will cause the SPI module to halt. 247 #define SI32_SPI_A_CONTROL_DBGMD_HALT_VALUE 1 248 #define SI32_SPI_A_CONTROL_DBGMD_HALT_U32 \ 249 (SI32_SPI_A_CONTROL_DBGMD_HALT_VALUE << SI32_SPI_A_CONTROL_DBGMD_SHIFT) 250 251 252 253 struct SI32_SPI_A_CONFIG_Struct 254 { 255 union 256 { 257 struct 258 { 259 // Receive FIFO Read Request Interrupt Enable 260 volatile uint32_t RFRQIEN: 1; 261 // Receive FIFO Overrun Interrupt Enable 262 volatile uint32_t RFORIEN: 1; 263 // Transmit FIFO Write Request Interrupt Enable 264 volatile uint32_t TFRQIEN: 1; 265 // Transmit FIFO Overrun Interrupt Enable 266 volatile uint32_t TFORIEN: 1; 267 // Slave Selected Interrupt Enable 268 volatile uint32_t SLVSELIEN: 1; 269 // Mode Fault Interrupt Enable 270 volatile uint32_t MDFIEN: 1; 271 // Underrun Interrupt Enable 272 volatile uint32_t URIEN: 1; 273 // Shift Register Empty Interrupt Enable 274 volatile uint32_t SREIEN: 1; 275 // SPI Enable 276 volatile uint32_t SPIEN: 1; 277 // Master Mode Enable 278 volatile uint32_t MSTEN: 1; 279 // SPI Clock Polarity 280 volatile uint32_t CLKPOL: 1; 281 // SPI Clock Phase 282 volatile uint32_t CLKPHA: 1; 283 // Slave Select Polarity Select 284 volatile uint32_t NSSPOL: 1; 285 // Data Direction Select 286 volatile uint32_t DDIRSEL: 1; 287 // Slave Select Mode 288 volatile uint32_t NSSMD: 2; 289 // Receive FIFO Threshold 290 volatile uint32_t RFTH: 2; 291 // Transmit FIFO Threshold 292 volatile uint32_t TFTH: 2; 293 // Data Size 294 volatile uint32_t DSIZE: 4; 295 // DMA Enable 296 volatile uint32_t DMAEN: 1; 297 uint32_t reserved0: 4; 298 // Receive FIFO Flush 299 volatile uint32_t RFIFOFL: 1; 300 // Transmit FIFO Flush 301 volatile uint32_t TFIFOFL: 1; 302 // Module Soft Reset 303 volatile uint32_t RESET: 1; 304 }; 305 volatile uint32_t U32; 306 }; 307 }; 308 309 #define SI32_SPI_A_CONFIG_RFRQIEN_MASK 0x00000001 310 #define SI32_SPI_A_CONFIG_RFRQIEN_SHIFT 0 311 // Disable the receive FIFO request interrupt. 312 #define SI32_SPI_A_CONFIG_RFRQIEN_DISABLED_VALUE 0 313 #define SI32_SPI_A_CONFIG_RFRQIEN_DISABLED_U32 \ 314 (SI32_SPI_A_CONFIG_RFRQIEN_DISABLED_VALUE << SI32_SPI_A_CONFIG_RFRQIEN_SHIFT) 315 // Enable the receive FIFO request interrupt. 316 #define SI32_SPI_A_CONFIG_RFRQIEN_ENABLED_VALUE 1 317 #define SI32_SPI_A_CONFIG_RFRQIEN_ENABLED_U32 \ 318 (SI32_SPI_A_CONFIG_RFRQIEN_ENABLED_VALUE << SI32_SPI_A_CONFIG_RFRQIEN_SHIFT) 319 320 #define SI32_SPI_A_CONFIG_RFORIEN_MASK 0x00000002 321 #define SI32_SPI_A_CONFIG_RFORIEN_SHIFT 1 322 // Disable the receive FIFO overrun interrupt. 323 #define SI32_SPI_A_CONFIG_RFORIEN_DISABLED_VALUE 0 324 #define SI32_SPI_A_CONFIG_RFORIEN_DISABLED_U32 \ 325 (SI32_SPI_A_CONFIG_RFORIEN_DISABLED_VALUE << SI32_SPI_A_CONFIG_RFORIEN_SHIFT) 326 // Enable the receive FIFO overrun interrupt. 327 #define SI32_SPI_A_CONFIG_RFORIEN_ENABLED_VALUE 1 328 #define SI32_SPI_A_CONFIG_RFORIEN_ENABLED_U32 \ 329 (SI32_SPI_A_CONFIG_RFORIEN_ENABLED_VALUE << SI32_SPI_A_CONFIG_RFORIEN_SHIFT) 330 331 #define SI32_SPI_A_CONFIG_TFRQIEN_MASK 0x00000004 332 #define SI32_SPI_A_CONFIG_TFRQIEN_SHIFT 2 333 // Disable the transmit FIFO data request interrupt. 334 #define SI32_SPI_A_CONFIG_TFRQIEN_DISABLED_VALUE 0 335 #define SI32_SPI_A_CONFIG_TFRQIEN_DISABLED_U32 \ 336 (SI32_SPI_A_CONFIG_TFRQIEN_DISABLED_VALUE << SI32_SPI_A_CONFIG_TFRQIEN_SHIFT) 337 // Enable the transmit FIFO data request interrupt. 338 #define SI32_SPI_A_CONFIG_TFRQIEN_ENABLED_VALUE 1 339 #define SI32_SPI_A_CONFIG_TFRQIEN_ENABLED_U32 \ 340 (SI32_SPI_A_CONFIG_TFRQIEN_ENABLED_VALUE << SI32_SPI_A_CONFIG_TFRQIEN_SHIFT) 341 342 #define SI32_SPI_A_CONFIG_TFORIEN_MASK 0x00000008 343 #define SI32_SPI_A_CONFIG_TFORIEN_SHIFT 3 344 // Disable the transmit FIFO overrun interrupt. 345 #define SI32_SPI_A_CONFIG_TFORIEN_DISABLED_VALUE 0 346 #define SI32_SPI_A_CONFIG_TFORIEN_DISABLED_U32 \ 347 (SI32_SPI_A_CONFIG_TFORIEN_DISABLED_VALUE << SI32_SPI_A_CONFIG_TFORIEN_SHIFT) 348 // Enable the transmit FIFO overrun interrupt. 349 #define SI32_SPI_A_CONFIG_TFORIEN_ENABLED_VALUE 1 350 #define SI32_SPI_A_CONFIG_TFORIEN_ENABLED_U32 \ 351 (SI32_SPI_A_CONFIG_TFORIEN_ENABLED_VALUE << SI32_SPI_A_CONFIG_TFORIEN_SHIFT) 352 353 #define SI32_SPI_A_CONFIG_SLVSELIEN_MASK 0x00000010 354 #define SI32_SPI_A_CONFIG_SLVSELIEN_SHIFT 4 355 // Disable the slave select interrupt. 356 #define SI32_SPI_A_CONFIG_SLVSELIEN_DISABLED_VALUE 0 357 #define SI32_SPI_A_CONFIG_SLVSELIEN_DISABLED_U32 \ 358 (SI32_SPI_A_CONFIG_SLVSELIEN_DISABLED_VALUE << SI32_SPI_A_CONFIG_SLVSELIEN_SHIFT) 359 // Enable the slave select interrupt. 360 #define SI32_SPI_A_CONFIG_SLVSELIEN_ENABLED_VALUE 1 361 #define SI32_SPI_A_CONFIG_SLVSELIEN_ENABLED_U32 \ 362 (SI32_SPI_A_CONFIG_SLVSELIEN_ENABLED_VALUE << SI32_SPI_A_CONFIG_SLVSELIEN_SHIFT) 363 364 #define SI32_SPI_A_CONFIG_MDFIEN_MASK 0x00000020 365 #define SI32_SPI_A_CONFIG_MDFIEN_SHIFT 5 366 // Disable the mode fault interrupt. 367 #define SI32_SPI_A_CONFIG_MDFIEN_DISABLED_VALUE 0 368 #define SI32_SPI_A_CONFIG_MDFIEN_DISABLED_U32 \ 369 (SI32_SPI_A_CONFIG_MDFIEN_DISABLED_VALUE << SI32_SPI_A_CONFIG_MDFIEN_SHIFT) 370 // Enable the mode fault interrupt. 371 #define SI32_SPI_A_CONFIG_MDFIEN_ENABLED_VALUE 1 372 #define SI32_SPI_A_CONFIG_MDFIEN_ENABLED_U32 \ 373 (SI32_SPI_A_CONFIG_MDFIEN_ENABLED_VALUE << SI32_SPI_A_CONFIG_MDFIEN_SHIFT) 374 375 #define SI32_SPI_A_CONFIG_URIEN_MASK 0x00000040 376 #define SI32_SPI_A_CONFIG_URIEN_SHIFT 6 377 // Disable the underrun interrupt. 378 #define SI32_SPI_A_CONFIG_URIEN_DISABLED_VALUE 0 379 #define SI32_SPI_A_CONFIG_URIEN_DISABLED_U32 \ 380 (SI32_SPI_A_CONFIG_URIEN_DISABLED_VALUE << SI32_SPI_A_CONFIG_URIEN_SHIFT) 381 // Enable the underrun interrupt. 382 #define SI32_SPI_A_CONFIG_URIEN_ENABLED_VALUE 1 383 #define SI32_SPI_A_CONFIG_URIEN_ENABLED_U32 \ 384 (SI32_SPI_A_CONFIG_URIEN_ENABLED_VALUE << SI32_SPI_A_CONFIG_URIEN_SHIFT) 385 386 #define SI32_SPI_A_CONFIG_SREIEN_MASK 0x00000080 387 #define SI32_SPI_A_CONFIG_SREIEN_SHIFT 7 388 // Disable the shift register empty interrupt. 389 #define SI32_SPI_A_CONFIG_SREIEN_DISABLED_VALUE 0 390 #define SI32_SPI_A_CONFIG_SREIEN_DISABLED_U32 \ 391 (SI32_SPI_A_CONFIG_SREIEN_DISABLED_VALUE << SI32_SPI_A_CONFIG_SREIEN_SHIFT) 392 // Enable the shift register empty interrupt. 393 #define SI32_SPI_A_CONFIG_SREIEN_ENABLED_VALUE 1 394 #define SI32_SPI_A_CONFIG_SREIEN_ENABLED_U32 \ 395 (SI32_SPI_A_CONFIG_SREIEN_ENABLED_VALUE << SI32_SPI_A_CONFIG_SREIEN_SHIFT) 396 397 #define SI32_SPI_A_CONFIG_SPIEN_MASK 0x00000100 398 #define SI32_SPI_A_CONFIG_SPIEN_SHIFT 8 399 // Disable the SPI. 400 #define SI32_SPI_A_CONFIG_SPIEN_DISABLED_VALUE 0 401 #define SI32_SPI_A_CONFIG_SPIEN_DISABLED_U32 \ 402 (SI32_SPI_A_CONFIG_SPIEN_DISABLED_VALUE << SI32_SPI_A_CONFIG_SPIEN_SHIFT) 403 // Enable the SPI. 404 #define SI32_SPI_A_CONFIG_SPIEN_ENABLED_VALUE 1 405 #define SI32_SPI_A_CONFIG_SPIEN_ENABLED_U32 \ 406 (SI32_SPI_A_CONFIG_SPIEN_ENABLED_VALUE << SI32_SPI_A_CONFIG_SPIEN_SHIFT) 407 408 #define SI32_SPI_A_CONFIG_MSTEN_MASK 0x00000200 409 #define SI32_SPI_A_CONFIG_MSTEN_SHIFT 9 410 // Operate in slave mode. 411 #define SI32_SPI_A_CONFIG_MSTEN_DISABLED_VALUE 0 412 #define SI32_SPI_A_CONFIG_MSTEN_DISABLED_U32 \ 413 (SI32_SPI_A_CONFIG_MSTEN_DISABLED_VALUE << SI32_SPI_A_CONFIG_MSTEN_SHIFT) 414 // Operate in master mode. 415 #define SI32_SPI_A_CONFIG_MSTEN_ENABLED_VALUE 1 416 #define SI32_SPI_A_CONFIG_MSTEN_ENABLED_U32 \ 417 (SI32_SPI_A_CONFIG_MSTEN_ENABLED_VALUE << SI32_SPI_A_CONFIG_MSTEN_SHIFT) 418 419 #define SI32_SPI_A_CONFIG_CLKPOL_MASK 0x00000400 420 #define SI32_SPI_A_CONFIG_CLKPOL_SHIFT 10 421 // The SCK line is low in the idle state. 422 #define SI32_SPI_A_CONFIG_CLKPOL_LOW_VALUE 0 423 #define SI32_SPI_A_CONFIG_CLKPOL_LOW_U32 \ 424 (SI32_SPI_A_CONFIG_CLKPOL_LOW_VALUE << SI32_SPI_A_CONFIG_CLKPOL_SHIFT) 425 // The SCK line is high in the idle state. 426 #define SI32_SPI_A_CONFIG_CLKPOL_HIGH_VALUE 1 427 #define SI32_SPI_A_CONFIG_CLKPOL_HIGH_U32 \ 428 (SI32_SPI_A_CONFIG_CLKPOL_HIGH_VALUE << SI32_SPI_A_CONFIG_CLKPOL_SHIFT) 429 430 #define SI32_SPI_A_CONFIG_CLKPHA_MASK 0x00000800 431 #define SI32_SPI_A_CONFIG_CLKPHA_SHIFT 11 432 // The first edge of SCK is the sample edge (center of data bit). 433 #define SI32_SPI_A_CONFIG_CLKPHA_CENTER_VALUE 0 434 #define SI32_SPI_A_CONFIG_CLKPHA_CENTER_U32 \ 435 (SI32_SPI_A_CONFIG_CLKPHA_CENTER_VALUE << SI32_SPI_A_CONFIG_CLKPHA_SHIFT) 436 // The first edge of SCK is the shift edge (edge of data bit). 437 #define SI32_SPI_A_CONFIG_CLKPHA_EDGE_VALUE 1 438 #define SI32_SPI_A_CONFIG_CLKPHA_EDGE_U32 \ 439 (SI32_SPI_A_CONFIG_CLKPHA_EDGE_VALUE << SI32_SPI_A_CONFIG_CLKPHA_SHIFT) 440 441 #define SI32_SPI_A_CONFIG_NSSPOL_MASK 0x00001000 442 #define SI32_SPI_A_CONFIG_NSSPOL_SHIFT 12 443 // NSS is active low. 444 #define SI32_SPI_A_CONFIG_NSSPOL_LOW_VALUE 0 445 #define SI32_SPI_A_CONFIG_NSSPOL_LOW_U32 \ 446 (SI32_SPI_A_CONFIG_NSSPOL_LOW_VALUE << SI32_SPI_A_CONFIG_NSSPOL_SHIFT) 447 // NSS is active high. 448 #define SI32_SPI_A_CONFIG_NSSPOL_HIGH_VALUE 1 449 #define SI32_SPI_A_CONFIG_NSSPOL_HIGH_U32 \ 450 (SI32_SPI_A_CONFIG_NSSPOL_HIGH_VALUE << SI32_SPI_A_CONFIG_NSSPOL_SHIFT) 451 452 #define SI32_SPI_A_CONFIG_DDIRSEL_MASK 0x00002000 453 #define SI32_SPI_A_CONFIG_DDIRSEL_SHIFT 13 454 // Data will be shifted MSB first. 455 #define SI32_SPI_A_CONFIG_DDIRSEL_MSB_FIRST_VALUE 0 456 #define SI32_SPI_A_CONFIG_DDIRSEL_MSB_FIRST_U32 \ 457 (SI32_SPI_A_CONFIG_DDIRSEL_MSB_FIRST_VALUE << SI32_SPI_A_CONFIG_DDIRSEL_SHIFT) 458 // Data will be shifted LSB first. 459 #define SI32_SPI_A_CONFIG_DDIRSEL_LSB_FIRST_VALUE 1 460 #define SI32_SPI_A_CONFIG_DDIRSEL_LSB_FIRST_U32 \ 461 (SI32_SPI_A_CONFIG_DDIRSEL_LSB_FIRST_VALUE << SI32_SPI_A_CONFIG_DDIRSEL_SHIFT) 462 463 #define SI32_SPI_A_CONFIG_NSSMD_MASK 0x0000C000 464 #define SI32_SPI_A_CONFIG_NSSMD_SHIFT 14 465 // 3-wire Slave or 3-wire Master. 466 #define SI32_SPI_A_CONFIG_NSSMD_3_WIRE_MASTER_SLAVE_VALUE 0 467 #define SI32_SPI_A_CONFIG_NSSMD_3_WIRE_MASTER_SLAVE_U32 \ 468 (SI32_SPI_A_CONFIG_NSSMD_3_WIRE_MASTER_SLAVE_VALUE << SI32_SPI_A_CONFIG_NSSMD_SHIFT) 469 // 4-wire slave (NSS input). This setting can also be used for multi-master 470 // configurations. 471 #define SI32_SPI_A_CONFIG_NSSMD_4_WIRE_SLAVE_VALUE 1 472 #define SI32_SPI_A_CONFIG_NSSMD_4_WIRE_SLAVE_U32 \ 473 (SI32_SPI_A_CONFIG_NSSMD_4_WIRE_SLAVE_VALUE << SI32_SPI_A_CONFIG_NSSMD_SHIFT) 474 // 4-wire master with NSS low (NSS output). 475 #define SI32_SPI_A_CONFIG_NSSMD_4_WIRE_MASTER_NSS_LOW_VALUE 2 476 #define SI32_SPI_A_CONFIG_NSSMD_4_WIRE_MASTER_NSS_LOW_U32 \ 477 (SI32_SPI_A_CONFIG_NSSMD_4_WIRE_MASTER_NSS_LOW_VALUE << SI32_SPI_A_CONFIG_NSSMD_SHIFT) 478 // 4-wire master with NSS high (NSS output). 479 #define SI32_SPI_A_CONFIG_NSSMD_4_WIRE_MASTER_NSS_HIGH_VALUE 3 480 #define SI32_SPI_A_CONFIG_NSSMD_4_WIRE_MASTER_NSS_HIGH_U32 \ 481 (SI32_SPI_A_CONFIG_NSSMD_4_WIRE_MASTER_NSS_HIGH_VALUE << SI32_SPI_A_CONFIG_NSSMD_SHIFT) 482 483 #define SI32_SPI_A_CONFIG_RFTH_MASK 0x00030000 484 #define SI32_SPI_A_CONFIG_RFTH_SHIFT 16 485 // A DMA / RFRQ request asserts when >= 1 FIFO slot is filled. 486 #define SI32_SPI_A_CONFIG_RFTH_ONE_VALUE 0 487 #define SI32_SPI_A_CONFIG_RFTH_ONE_U32 \ 488 (SI32_SPI_A_CONFIG_RFTH_ONE_VALUE << SI32_SPI_A_CONFIG_RFTH_SHIFT) 489 // A DMA / RFRQ request asserts when >= 2 FIFO slots are filled. 490 #define SI32_SPI_A_CONFIG_RFTH_TWO_VALUE 1 491 #define SI32_SPI_A_CONFIG_RFTH_TWO_U32 \ 492 (SI32_SPI_A_CONFIG_RFTH_TWO_VALUE << SI32_SPI_A_CONFIG_RFTH_SHIFT) 493 // A DMA / RFRQ request asserts when >= 4 FIFO slots are filled. 494 #define SI32_SPI_A_CONFIG_RFTH_FOUR_VALUE 2 495 #define SI32_SPI_A_CONFIG_RFTH_FOUR_U32 \ 496 (SI32_SPI_A_CONFIG_RFTH_FOUR_VALUE << SI32_SPI_A_CONFIG_RFTH_SHIFT) 497 // A DMA / RFRQ request asserts when all FIFO slots are filled. 498 #define SI32_SPI_A_CONFIG_RFTH_FULL_VALUE 3 499 #define SI32_SPI_A_CONFIG_RFTH_FULL_U32 \ 500 (SI32_SPI_A_CONFIG_RFTH_FULL_VALUE << SI32_SPI_A_CONFIG_RFTH_SHIFT) 501 502 #define SI32_SPI_A_CONFIG_TFTH_MASK 0x000C0000 503 #define SI32_SPI_A_CONFIG_TFTH_SHIFT 18 504 // A DMA / TFRQ request asserts when >= 1 FIFO slot is empty. 505 #define SI32_SPI_A_CONFIG_TFTH_ONE_VALUE 0 506 #define SI32_SPI_A_CONFIG_TFTH_ONE_U32 \ 507 (SI32_SPI_A_CONFIG_TFTH_ONE_VALUE << SI32_SPI_A_CONFIG_TFTH_SHIFT) 508 // A DMA / TFRQ request asserts when >= 2 FIFO slots are empty. 509 #define SI32_SPI_A_CONFIG_TFTH_TWO_VALUE 1 510 #define SI32_SPI_A_CONFIG_TFTH_TWO_U32 \ 511 (SI32_SPI_A_CONFIG_TFTH_TWO_VALUE << SI32_SPI_A_CONFIG_TFTH_SHIFT) 512 // A DMA / TFRQ request asserts when >= 4 FIFO slots are empty. 513 #define SI32_SPI_A_CONFIG_TFTH_FOUR_VALUE 2 514 #define SI32_SPI_A_CONFIG_TFTH_FOUR_U32 \ 515 (SI32_SPI_A_CONFIG_TFTH_FOUR_VALUE << SI32_SPI_A_CONFIG_TFTH_SHIFT) 516 // A DMA / TFRQ request asserts when all FIFO slots are empty. 517 #define SI32_SPI_A_CONFIG_TFTH_EMPTY_VALUE 3 518 #define SI32_SPI_A_CONFIG_TFTH_EMPTY_U32 \ 519 (SI32_SPI_A_CONFIG_TFTH_EMPTY_VALUE << SI32_SPI_A_CONFIG_TFTH_SHIFT) 520 521 #define SI32_SPI_A_CONFIG_DSIZE_MASK 0x00F00000 522 #define SI32_SPI_A_CONFIG_DSIZE_SHIFT 20 523 524 #define SI32_SPI_A_CONFIG_DMAEN_MASK 0x01000000 525 #define SI32_SPI_A_CONFIG_DMAEN_SHIFT 24 526 // Disable DMA requests. 527 #define SI32_SPI_A_CONFIG_DMAEN_DISABLED_VALUE 0 528 #define SI32_SPI_A_CONFIG_DMAEN_DISABLED_U32 \ 529 (SI32_SPI_A_CONFIG_DMAEN_DISABLED_VALUE << SI32_SPI_A_CONFIG_DMAEN_SHIFT) 530 // Enable DMA requests when the transmit buffer is empty or the receive buffer is 531 // full. 532 #define SI32_SPI_A_CONFIG_DMAEN_ENABLED_VALUE 1 533 #define SI32_SPI_A_CONFIG_DMAEN_ENABLED_U32 \ 534 (SI32_SPI_A_CONFIG_DMAEN_ENABLED_VALUE << SI32_SPI_A_CONFIG_DMAEN_SHIFT) 535 536 #define SI32_SPI_A_CONFIG_RFIFOFL_MASK 0x20000000 537 #define SI32_SPI_A_CONFIG_RFIFOFL_SHIFT 29 538 // Flush the receive FIFO. 539 #define SI32_SPI_A_CONFIG_RFIFOFL_SET_VALUE 1 540 #define SI32_SPI_A_CONFIG_RFIFOFL_SET_U32 \ 541 (SI32_SPI_A_CONFIG_RFIFOFL_SET_VALUE << SI32_SPI_A_CONFIG_RFIFOFL_SHIFT) 542 543 #define SI32_SPI_A_CONFIG_TFIFOFL_MASK 0x40000000 544 #define SI32_SPI_A_CONFIG_TFIFOFL_SHIFT 30 545 // Flush the transmit FIFO. 546 #define SI32_SPI_A_CONFIG_TFIFOFL_SET_VALUE 1 547 #define SI32_SPI_A_CONFIG_TFIFOFL_SET_U32 \ 548 (SI32_SPI_A_CONFIG_TFIFOFL_SET_VALUE << SI32_SPI_A_CONFIG_TFIFOFL_SHIFT) 549 550 #define SI32_SPI_A_CONFIG_RESET_MASK 0x80000000 551 #define SI32_SPI_A_CONFIG_RESET_SHIFT 31 552 // SPI module is not in soft reset. 553 #define SI32_SPI_A_CONFIG_RESET_INACTIVE_VALUE 0U 554 #define SI32_SPI_A_CONFIG_RESET_INACTIVE_U32 \ 555 (SI32_SPI_A_CONFIG_RESET_INACTIVE_VALUE << SI32_SPI_A_CONFIG_RESET_SHIFT) 556 // SPI module is in soft reset and some of the module bits cannot be accessed until 557 // this bit is cleared to 0 by hardware. 558 #define SI32_SPI_A_CONFIG_RESET_ACTIVE_VALUE 1U 559 #define SI32_SPI_A_CONFIG_RESET_ACTIVE_U32 \ 560 (SI32_SPI_A_CONFIG_RESET_ACTIVE_VALUE << SI32_SPI_A_CONFIG_RESET_SHIFT) 561 562 563 564 struct SI32_SPI_A_CLKRATE_Struct 565 { 566 union 567 { 568 struct 569 { 570 // Clock Divider 571 volatile uint16_t CLKDIV; 572 uint32_t reserved0: 16; 573 }; 574 volatile uint32_t U32; 575 }; 576 }; 577 578 #define SI32_SPI_A_CLKRATE_CLKDIV_MASK 0x0000FFFF 579 #define SI32_SPI_A_CLKRATE_CLKDIV_SHIFT 0 580 581 582 583 struct SI32_SPI_A_FSTATUS_Struct 584 { 585 union 586 { 587 struct 588 { 589 // Receive FIFO Read Pointer 590 volatile uint32_t RFRPTR: 4; 591 // Receive FIFO Write Pointer 592 volatile uint32_t RFWPTR: 4; 593 // Transmit FIFO Read Pointer 594 volatile uint32_t TFRPTR: 4; 595 // Transmit FIFO Write Pointer 596 volatile uint32_t TFWPTR: 4; 597 uint32_t reserved0: 16; 598 }; 599 volatile uint32_t U32; 600 }; 601 }; 602 603 #define SI32_SPI_A_FSTATUS_RFRPTR_MASK 0x0000000F 604 #define SI32_SPI_A_FSTATUS_RFRPTR_SHIFT 0 605 606 #define SI32_SPI_A_FSTATUS_RFWPTR_MASK 0x000000F0 607 #define SI32_SPI_A_FSTATUS_RFWPTR_SHIFT 4 608 609 #define SI32_SPI_A_FSTATUS_TFRPTR_MASK 0x00000F00 610 #define SI32_SPI_A_FSTATUS_TFRPTR_SHIFT 8 611 612 #define SI32_SPI_A_FSTATUS_TFWPTR_MASK 0x0000F000 613 #define SI32_SPI_A_FSTATUS_TFWPTR_SHIFT 12 614 615 616 617 typedef struct SI32_SPI_A_Struct 618 { 619 struct SI32_SPI_A_DATA_Struct DATA ; // Base Address + 0x0 620 uint32_t reserved0; 621 uint32_t reserved1; 622 uint32_t reserved2; 623 struct SI32_SPI_A_CONTROL_Struct CONTROL ; // Base Address + 0x10 624 volatile uint32_t CONTROL_SET; 625 volatile uint32_t CONTROL_CLR; 626 uint32_t reserved3; 627 struct SI32_SPI_A_CONFIG_Struct CONFIG ; // Base Address + 0x20 628 volatile uint32_t CONFIG_SET; 629 volatile uint32_t CONFIG_CLR; 630 uint32_t reserved4; 631 struct SI32_SPI_A_CLKRATE_Struct CLKRATE ; // Base Address + 0x30 632 uint32_t reserved5; 633 uint32_t reserved6; 634 uint32_t reserved7; 635 struct SI32_SPI_A_FSTATUS_Struct FSTATUS ; // Base Address + 0x40 636 uint32_t reserved8; 637 uint32_t reserved9; 638 uint32_t reserved10; 639 } SI32_SPI_A_Type; 640 641 #ifdef __cplusplus 642 } 643 #endif 644 645 #endif // __SI32_SPI_A_REGISTERS_H__ 646 647 //-eof-------------------------------------------------------------------------- 648 649