1 /* ----------------------------------------------------------------------------- 2 * Copyright (c) 2013-2016 ARM Limited. All rights reserved. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Licensed under the Apache License, Version 2.0 (the License); you may 7 * not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an AS IS BASIS, WITHOUT 14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 * $Date: 02. March 2016 19 * $Revision: V2.2 20 * 21 * Project: SPI Driver Definitions for Silicon Labs MCU 22 * -------------------------------------------------------------------------- */ 23 24 #ifndef __SPI_H 25 #define __SPI_H 26 27 #include "rsi_pll.h" 28 #include "Driver_SPI.h" 29 #include "rsi_ccp_common.h" 30 31 #include "UDMA.h" 32 #include "rsi_ulpss_clk.h" 33 #ifdef SSI_INSTANCE_CONFIG 34 #include "sl_ssi_common_config.h" 35 #elif SSI_CONFIG 36 #include "sl_si91x_ssi_common_config.h" 37 #endif 38 39 #define SSI_DISABLE 0x00 /*!< Disable the SSI Operation*/ 40 #define SSI_ENABLE 0x01 /*!< Enable the SSI Operation*/ 41 #define TXEIM 0x1 42 #define TXOIM 0x2 43 #define RXUIM 0x4 44 #define RXOIM 0x8 45 #define RXFIM 0x10 46 #define TRANSMIT_AND_RECEIVE 0x00 47 #define TRANSMIT_ONLY 0x01 48 #define RECEIVE_ONLY 0x02 49 #define STANDARD_SPI_FORMAT 0x00 50 #define MOTOROLA_SPI 0x00 51 #define TEXAS_INSTRUMENTS_SSP 0x01 52 #define NATIONAL_SEMICONDUCTORS_MICROWIRE 0x02 53 #define SPI_MASTER_MODE 1U 54 #define SPI_SLAVE_MODE 2U 55 #define SPI_ULP_MASTER_MODE 3U 56 #define SSI_INSTANCE_BIT 30 // SSI Instance validation bits 57 #define SSI_INSTANCE_MASK 0x3FFFFFFF // Mask value for SSI instance 58 #define SSI_MASTER_INSTANCE 0 // SSI Master Instance 59 #define SSI_SLAVE_INSTANCE 1 // SSI Slave Instance 60 #define SSI_ULP_MASTER_INSTANCE 2 // SSI ULP Master Instance 61 62 #define SPI_ISR_TX_FIFO_EMPTY BIT(0) 63 #define SPI_ISR_TX_FIFO_OVERFLOW BIT(1) 64 #define SPI_ISR_RX_FIFO_UNDERFLOW BIT(2) 65 #define SPI_ISR_RX_FIFO_OVERFLOW BIT(3) 66 #define SPI_ISR_RX_FIFO_FULL BIT(4) 67 68 69 ARM_DRIVER_VERSION SPI_GetVersion(void); 70 ARM_SPI_CAPABILITIES SPI_GetCapabilities(void); 71 void IRQ047_Handler(void) ; 72 void IRQ044_Handler(void); 73 void IRQ016_Handler(void); 74 void mySPI_callback(uint32_t event); 75 76 #if ((defined(RTE_Drivers_SSI_MASTER) || \ 77 defined(RTE_Drivers_SSI_SLAVE) || \ 78 defined(RTE_Drivers_SSI_ULP_MASTER)) \ 79 && (RTE_SSI_MASTER == 0) \ 80 && (RTE_SSI_SLAVE == 0) \ 81 && (RTE_SSI_ULP_MASTER == 0)) 82 #error "SPI not configured in RTE_Device_917.h!" 83 #endif 84 85 86 #if defined(RTE_SSI_MASTER) && (RTE_SSI_MASTER == 1) 87 #define SSI_MASTER 1U 88 // Configuring DMA thresholds based on SSI instances. 89 #ifdef SSI_INSTANCE_CONFIG 90 #if defined (SL_SSI_PRIMARY_DMA_CONFIG_ENABLE) && (SL_SSI_PRIMARY_DMA_CONFIG_ENABLE == ENABLE) 91 #define RTE_SSI_MASTER_RX_DMA 1 92 #define RTE_SSI_MASTER_TX_DMA 1 93 #endif 94 95 #if defined (SL_SSI_SECONDARY_DMA_CONFIG_ENABLE) && (SL_SSI_SECONDARY_DMA_CONFIG_ENABLE == ENABLE) 96 #define RTE_SSI_SLAVE_RX_DMA 1 97 #define RTE_SSI_SLAVE_TX_DMA 1 98 #endif 99 100 #if defined (SL_SSI_ULP_PRIMARY_DMA_CONFIG_ENABLE) && (SL_SSI_ULP_PRIMARY_DMA_CONFIG_ENABLE == ENABLE) 101 #define RTE_SSI_ULP_MASTER_RX_DMA 1 102 #define RTE_SSI_ULP_MASTER_TX_DMA 1 103 #endif 104 // DMA threshold configuration based on SSI unknown instance name. 105 #elif SSI_CONFIG 106 #if defined (SL_SSI_MASTER_DMA_CONFIG_ENABLE) && (SL_SSI_MASTER_DMA_CONFIG_ENABLE == ENABLE) 107 #define RTE_SSI_MASTER_RX_DMA 1 108 #define RTE_SSI_MASTER_TX_DMA 1 109 #endif 110 111 #if defined (SL_SSI_SLAVE_DMA_CONFIG_ENABLE) && (SL_SSI_SLAVE_DMA_CONFIG_ENABLE == ENABLE) 112 #define RTE_SSI_SLAVE_RX_DMA 1 113 #define RTE_SSI_SLAVE_TX_DMA 1 114 #endif 115 116 #if defined (SL_SSI_ULP_MASTER_DMA_CONFIG_ENABLE) && (SL_SSI_ULP_MASTER_DMA_CONFIG_ENABLE == ENABLE) 117 #define RTE_SSI_ULP_MASTER_RX_DMA 1 118 #define RTE_SSI_ULP_MASTER_TX_DMA 1 119 #endif 120 #endif 121 122 #if defined(RTE_SSI_MASTER_RX_DMA) && (RTE_SSI_MASTER_RX_DMA == 1) 123 #define SSI_MASTER_RX_DMA_Instance 1U 124 #define SSI_MASTER_RX_DMA_Channel RTE_SSI_MASTER_UDMA_RX_CH 125 #endif 126 127 #if defined(RTE_SSI_MASTER_TX_DMA) && (RTE_SSI_MASTER_TX_DMA == 1) 128 #define SSI_MASTER_TX_DMA_Instance 1U 129 #define SSI_MASTER_TX_DMA_Channel RTE_SSI_MASTER_UDMA_TX_CH 130 #endif 131 132 #if defined(RTE_SSI_MASTER_MISO) && (RTE_SSI_MASTER_MISO == 1) 133 #define SSI_MASTER_MISO_SEL 1U 134 #define SSI_MASTER_MISO_PORT RTE_SSI_MASTER_MISO_PORT 135 #define SSI_MASTER_MISO_PIN RTE_SSI_MASTER_MISO_PIN 136 #define SSI_MASTER_MISO_MODE RTE_SSI_MASTER_MISO_MODE 137 #define SSI_MASTER_MISO_PADSEL RTE_SSI_MASTER_MISO_PADSEL 138 #endif 139 140 #if defined(RTE_SSI_MASTER_MOSI) && (RTE_SSI_MASTER_MOSI == 1) 141 #define SSI_MASTER_MOSI_SEL 1U 142 #define SSI_MASTER_MOSI_PORT RTE_SSI_MASTER_MOSI_PORT 143 #define SSI_MASTER_MOSI_PIN RTE_SSI_MASTER_MOSI_PIN 144 #define SSI_MASTER_MOSI_MODE RTE_SSI_MASTER_MOSI_MODE 145 #define SSI_MASTER_MOSI_PADSEL RTE_SSI_MASTER_MOSI_PADSEL 146 #endif 147 148 #if defined(RTE_SSI_MASTER_SCK) && (RTE_SSI_MASTER_SCK == 1) 149 #define SSI_MASTER_SCK_SEL 1U 150 #define SSI_MASTER_SCK_PORT RTE_SSI_MASTER_SCK_PORT 151 #define SSI_MASTER_SCK_PIN RTE_SSI_MASTER_SCK_PIN 152 #define SSI_MASTER_SCK_MODE RTE_SSI_MASTER_SCK_MODE 153 #define SSI_MASTER_SCK_PADSEL RTE_SSI_MASTER_SCK_PADSEL 154 #endif 155 156 #if defined(RTE_SSI_MASTER_CS0) && (RTE_SSI_MASTER_CS0 == 1) 157 #define SSI_MASTER_CS0_SEL 1U 158 #define SSI_MASTER_CS0_PORT RTE_SSI_MASTER_CS0_PORT 159 #define SSI_MASTER_CS0_PIN RTE_SSI_MASTER_CS0_PIN 160 #define SSI_MASTER_CS0_MODE RTE_SSI_MASTER_CS0_MODE 161 #define SSI_MASTER_CS0_PADSEL RTE_SSI_MASTER_CS0_PADSEL 162 #endif 163 164 #if defined(RTE_SSI_MASTER_CS1) && (RTE_SSI_MASTER_CS1 == 1) 165 #define SSI_MASTER_CS1_SEL 1U 166 #define SSI_MASTER_CS1_PORT RTE_SSI_MASTER_CS1_PORT 167 #define SSI_MASTER_CS1_PIN RTE_SSI_MASTER_CS1_PIN 168 #define SSI_MASTER_CS1_MODE RTE_SSI_MASTER_CS1_MODE 169 #define SSI_MASTER_CS1_PADSEL RTE_SSI_MASTER_CS1_PADSEL 170 #endif 171 172 #if defined(RTE_SSI_MASTER_CS2) && (RTE_SSI_MASTER_CS2 == 1) 173 #define SSI_MASTER_CS2_SEL 1U 174 #define SSI_MASTER_CS2_PORT RTE_SSI_MASTER_CS2_PORT 175 #define SSI_MASTER_CS2_PIN RTE_SSI_MASTER_CS2_PIN 176 #define SSI_MASTER_CS2_MODE RTE_SSI_MASTER_CS2_MODE 177 #define SSI_MASTER_CS2_PADSEL RTE_SSI_MASTER_CS2_PADSEL 178 #endif 179 180 #if defined(RTE_SSI_MASTER_CS3) && (RTE_SSI_MASTER_CS3 == 1) 181 #define SSI_MASTER_CS3_SEL 1U 182 #define SSI_MASTER_CS3_PORT RTE_SSI_MASTER_CS3_PORT 183 #define SSI_MASTER_CS3_PIN RTE_SSI_MASTER_CS3_PIN 184 #define SSI_MASTER_CS3_MODE RTE_SSI_MASTER_CS3_MODE 185 #define SSI_MASTER_CS3_PADSEL RTE_SSI_MASTER_CS3_PADSEL 186 #endif 187 #endif 188 189 #if defined(RTE_SSI_SLAVE) && (RTE_SSI_SLAVE == 1) 190 #define SSI_SLAVE 1U 191 192 #if defined(RTE_SSI_SLAVE_RX_DMA) && (RTE_SSI_SLAVE_RX_DMA == 1) 193 #define SSI_SLAVE_RX_DMA_Instance 1U 194 #define SSI_SLAVE_RX_DMA_Channel RTE_SSI_SLAVE_UDMA_RX_CH 195 #endif 196 197 #if defined(RTE_SSI_SLAVE_TX_DMA) && (RTE_SSI_SLAVE_TX_DMA == 1) 198 #define SSI_SLAVE_TX_DMA_Instance 1U 199 #define SSI_SLAVE_TX_DMA_Channel RTE_SSI_SLAVE_UDMA_TX_CH 200 #endif 201 202 #if defined(RTE_SSI_SLAVE_MISO) && (RTE_SSI_SLAVE_MISO == 1) 203 #define SSI_SLAVE_MISO_SEL 1U 204 #define SSI_SLAVE_MISO_PORT RTE_SSI_SLAVE_MISO_PORT 205 #define SSI_SLAVE_MISO_PIN RTE_SSI_SLAVE_MISO_PIN 206 #define SSI_SLAVE_MISO_MODE RTE_SSI_SLAVE_MISO_MODE 207 #define SSI_SLAVE_MISO_PADSEL RTE_SSI_SLAVE_MISO_PADSEL 208 #endif 209 210 #if defined(RTE_SSI_SLAVE_MOSI) && (RTE_SSI_SLAVE_MOSI == 1) 211 #define SSI_SLAVE_MOSI_SEL 1U 212 #define SSI_SLAVE_MOSI_PORT RTE_SSI_SLAVE_MOSI_PORT 213 #define SSI_SLAVE_MOSI_PIN RTE_SSI_SLAVE_MOSI_PIN 214 #define SSI_SLAVE_MOSI_MODE RTE_SSI_SLAVE_MOSI_MODE 215 #define SSI_SLAVE_MOSI_PADSEL RTE_SSI_SLAVE_MOSI_PADSEL 216 #endif 217 218 #if defined(RTE_SSI_SLAVE_SCK) && (RTE_SSI_SLAVE_SCK == 1) 219 #define SSI_SLAVE_SCK_SEL 1U 220 #define SSI_SLAVE_SCK_PORT RTE_SSI_SLAVE_SCK_PORT 221 #define SSI_SLAVE_SCK_PIN RTE_SSI_SLAVE_SCK_PIN 222 #define SSI_SLAVE_SCK_MODE RTE_SSI_SLAVE_SCK_MODE 223 #define SSI_SLAVE_SCK_PADSEL RTE_SSI_SLAVE_SCK_PADSEL 224 #endif 225 226 #if defined(RTE_SSI_SLAVE_CS) && (RTE_SSI_SLAVE_CS == 1) 227 #define SSI_SLAVE_CS0_SEL 1U 228 #define SSI_SLAVE_CS0_PORT RTE_SSI_SLAVE_CS_PORT 229 #define SSI_SLAVE_CS0_PIN RTE_SSI_SLAVE_CS_PIN 230 #define SSI_SLAVE_CS0_MODE RTE_SSI_SLAVE_CS_MODE 231 #define SSI_SLAVE_CS0_PADSEL RTE_SSI_SLAVE_CS_PADSEL 232 #endif 233 #endif 234 235 #if defined(RTE_SSI_ULP_MASTER) && (RTE_SSI_ULP_MASTER == 1) 236 #define SSI_ULP_MASTER 1U 237 238 #if defined(RTE_SSI_ULP_MASTER_RX_DMA) && (RTE_SSI_ULP_MASTER_RX_DMA == 1) 239 #define SSI_ULP_MASTER_RX_DMA_Instance 1U 240 #define SSI_ULP_MASTER_RX_DMA_Channel RTE_SSI_ULP_MASTER_UDMA_RX_CH 241 #endif 242 243 #if defined(RTE_SSI_ULP_MASTER_TX_DMA) && (RTE_SSI_ULP_MASTER_TX_DMA == 1) 244 #define SSI_ULP_MASTER_TX_DMA_Instance 1U 245 #define SSI_ULP_MASTER_TX_DMA_Channel RTE_SSI_ULP_MASTER_UDMA_TX_CH 246 #endif 247 248 #if defined(RTE_SSI_ULP_MASTER_MISO) && (RTE_SSI_ULP_MASTER_MISO == 1) 249 #define SSI_ULP_MASTER_MISO_SEL 1U 250 #define SSI_ULP_MASTER_MISO_PORT RTE_SSI_ULP_MASTER_MISO_PORT 251 #define SSI_ULP_MASTER_MISO_PIN RTE_SSI_ULP_MASTER_MISO_PIN 252 #define SSI_ULP_MASTER_MISO_MODE RTE_SSI_ULP_MASTER_MISO_MODE 253 #endif 254 255 #if defined(RTE_SSI_ULP_MASTER_MOSI) && (RTE_SSI_ULP_MASTER_MOSI == 1) 256 #define SSI_ULP_MASTER_MOSI_SEL 1U 257 #define SSI_ULP_MASTER_MOSI_PORT RTE_SSI_ULP_MASTER_MOSI_PORT 258 #define SSI_ULP_MASTER_MOSI_PIN RTE_SSI_ULP_MASTER_MOSI_PIN 259 #define SSI_ULP_MASTER_MOSI_MODE RTE_SSI_ULP_MASTER_MOSI_MODE 260 #endif 261 262 #if defined(RTE_SSI_ULP_MASTER_SCK) && (RTE_SSI_ULP_MASTER_SCK == 1) 263 #define SSI_ULP_MASTER_SCK_SEL 1U 264 #define SSI_ULP_MASTER_SCK_PORT RTE_SSI_ULP_MASTER_SCK_PORT 265 #define SSI_ULP_MASTER_SCK_PIN RTE_SSI_ULP_MASTER_SCK_PIN 266 #define SSI_ULP_MASTER_SCK_MODE RTE_SSI_ULP_MASTER_SCK_MODE 267 #endif 268 269 #if defined(RTE_SSI_ULP_MASTER_CS0) && (RTE_SSI_ULP_MASTER_CS0 == 1) 270 #define SSI_ULP_MASTER_CS0_SEL 1U 271 #define SSI_ULP_MASTER_CS0_PORT RTE_SSI_ULP_MASTER_CS0_PORT 272 #define SSI_ULP_MASTER_CS0_PIN RTE_SSI_ULP_MASTER_CS0_PIN 273 #define SSI_ULP_MASTER_CS0_MODE RTE_SSI_ULP_MASTER_CS0_MODE 274 #endif 275 #if defined(RTE_SSI_ULP_MASTER_CS1) && (RTE_SSI_ULP_MASTER_CS1 == 1) 276 #define SSI_ULP_MASTER_CS1_SEL 1U 277 #define SSI_ULP_MASTER_CS1_PORT RTE_SSI_ULP_MASTER_CS1_PORT 278 #define SSI_ULP_MASTER_CS1_PIN RTE_SSI_ULP_MASTER_CS1_PIN 279 #define SSI_ULP_MASTER_CS1_MODE RTE_SSI_ULP_MASTER_CS1_MODE 280 #endif 281 #if defined(RTE_SSI_ULP_MASTER_CS2) && (RTE_SSI_ULP_MASTER_CS2 == 1) 282 #define SSI_ULP_MASTER_CS2_SEL 1U 283 #define SSI_ULP_MASTER_CS2_PORT RTE_SSI_ULP_MASTER_CS2_PORT 284 #define SSI_ULP_MASTER_CS2_PIN RTE_SSI_ULP_MASTER_CS2_PIN 285 #define SSI_ULP_MASTER_CS2_MODE RTE_SSI_ULP_MASTER_CS2_MODE 286 #endif 287 #endif 288 289 290 /* SPI Register Interface Definitions */ 291 #ifdef SSI_MASTER 292 #if (defined(SSI_MASTER_RX_DMA_Instance) || defined(SSI_MASTER_TX_DMA_Instance)) 293 #ifndef SSI_MASTER_RX_DMA_Instance 294 #error "SSI_MASTER using DMA requires Rx and Tx DMA channel enabled in RTE_Device_917.h!" 295 #endif 296 #ifndef SSI_MASTER_TX_DMA_Instance 297 #error "SSI_MASTER using DMA requires Rx and Tx DMA channel enabled in RTE_Device_917.h!" 298 #endif 299 #endif 300 #endif 301 302 #ifdef SSI_SLAVE 303 #if (defined(SSI_SLAVE_RX_DMA_Instance) || defined(SSI_SLAVE_TX_DMA_Instance)) 304 #ifndef SSI_SLAVE_RX_DMA_Instance 305 #error "SSI_SLAVE using DMA requires Rx and Tx DMA channel enabled in RTE_Device_917.h!" 306 #endif 307 #ifndef SSI_SLAVE_TX_DMA_Instance 308 #error "SSI_SLAVE using DMA requires Rx and Tx DMA channel enabled in RTE_Device_917.h!" 309 #endif 310 #endif 311 #endif 312 313 #ifdef SSI_ULP_MASTER 314 #if (defined(SSI_ULP_MASTER_RX_DMA_Instance) || defined(SSI_ULP_MASTER_TX_DMA_Instance)) 315 #ifndef SSI_ULP_MASTER_RX_DMA_Instance 316 #error "SSI_ULP_MASTER using DMA requires Rx and Tx DMA channel enabled in RTE_Device_917.h!" 317 #endif 318 #ifndef SSI_ULP_MASTER_TX_DMA_Instance 319 #error "SSI_ULP_MASTER using DMA requires Rx and Tx DMA channel enabled in RTE_Device_917.h!" 320 #endif 321 #endif 322 #endif 323 324 325 #if ((defined(SSI_MASTER) && defined(SSI_MASTER_RX_DMA_Instance)) || \ 326 (defined(SSI_SLAVE) && defined(SSI_SLAVE_RX_DMA_Instance)) || \ 327 (defined(SSI_ULP_MASTER) && defined(SSI_ULP_MASTER_RX_DMA_Instance))) 328 #define __SPI_DMA_RX 329 #endif 330 #if ((defined(SSI_MASTER) && defined(SSI_MASTER_TX_DMA_Instance)) || \ 331 (defined(SSI_SLAVE) && defined(SSI_SLAVE_TX_DMA_Instance)) || \ 332 (defined(SSI_ULP_MASTER) && defined(SSI_ULP_MASTER_TX_DMA_Instance))) 333 #define __SPI_DMA_TX 334 #endif 335 #if (defined(__SPI_DMA_RX) && defined(__SPI_DMA_TX)) 336 #define __SPI_DMA 337 #endif 338 339 /* Current driver status flag definition */ 340 #define SPI_INITIALIZED (1 << 0) // SPI initialized 341 #define SPI_POWERED (1 << 1) // SPI powered on 342 #define SPI_CONFIGURED (1 << 2) // SPI configured 343 #define SPI_DATA_LOST (1 << 3) // SPI data lost occurred 344 #define SPI_MODE_FAULT (1 << 4) // SPI mode fault occurred 345 346 347 #define SPI_CS0 0 348 #define SPI_CS1 1 349 #define SPI_CS2 2 350 #define SPI_CS3 3 351 352 /* SPI Pins Configuration */ 353 typedef const struct _SPI_PIN { 354 uint8_t port; ///< SPI GPIO port 355 uint8_t pin; ///< SPI GPIO pin 356 uint8_t mode; ///< SPI GPIO mode 357 uint8_t pad_sel; ///< SPI GPIO pad selection 358 }SPI_PIN; 359 360 // SPI Input/Output Configuration 361 typedef const struct _SPI_IO { 362 SPI_PIN *mosi; // Pointer to MOSI pin configuration 363 SPI_PIN *miso; // Pointer to MISO pin configuration 364 SPI_PIN *sck; // Pointer to SCK pin configuration 365 SPI_PIN *cs0; // Pointer to CS(CHIP SELECT) pin configuration 366 #ifdef SPI_MULTI_SLAVE 367 SPI_PIN *cs1; // Pointer to CS(CHIP SELECT) pin configuration 368 SPI_PIN *cs2; // Pointer to CS(CHIP SELECT) pin configuration 369 SPI_PIN *cs3; // Pointer to CS(CHIP SELECT) pin configuration 370 #endif 371 } SPI_IO; 372 373 // SPI DMA 374 typedef struct SPI_DMA 375 { 376 RSI_UDMA_CHA_CFG_T chnl_cfg; 377 uint8_t channel; // DMA Channel number 378 UDMA_SignalEvent_t cb_event; // DMA Event callback 379 } SPI_DMA; 380 381 /* SPI status */ 382 typedef struct SPI_STATUS { 383 uint8_t busy; // Transmitter/Receiver busy flag 384 uint8_t data_lost; // Data lost: Receive overflow / Transmit underflow (cleared on start of transfer operation) 385 uint8_t mode_fault; // Mode fault detected; optional (cleared on start of transfer operation) 386 } SPI_STATUS; 387 388 /* SPI Information (Run-time) */ 389 typedef struct SPI_INFO { 390 ARM_SPI_SignalEvent_t cb_event; // Event Callback 391 SPI_STATUS status; // Status flags 392 uint8_t state; // Current SPI state 393 uint32_t mode; // Current SPI mode 394 } SPI_INFO; 395 396 /* SPI Transfer Information (Run-Time) */ 397 typedef struct SPI_TRANSFER_INFO { 398 uint32_t num; // Total number of transfers 399 uint8_t *rx_buf; // Pointer to in data buffer 400 uint8_t *tx_buf; // Pointer to out data buffer 401 uint32_t rx_cnt; // Number of data received 402 uint32_t tx_cnt; // Number of data sent 403 uint32_t dump_val; // Variable for dumping DMA data 404 uint16_t def_val; // Default transfer value 405 } SPI_TRANSFER_INFO; 406 407 typedef struct _SPI_CLOCK 408 { 409 SSI_MST_CLK_SRC_SEL_T spi_clk_src; 410 ULP_SSI_CLK_SELECT_T ulp_spi_clk_src; 411 uint32_t divfact; 412 }SPI_CLOCK; 413 414 /* SPI Resources */ 415 typedef struct { 416 SSI0_Type *reg; // SPI peripheral register interface 417 SPI_IO io; // SPI pins configuration 418 IRQn_Type irq_num; // SPI IRQ number 419 SPI_DMA *rx_dma; // Receive stream register interface 420 SPI_DMA *tx_dma; // Transmit stream register interface 421 SPI_INFO *info; // SPI Run-time information 422 SPI_TRANSFER_INFO *xfer; // SPI transfer information 423 uint8_t instance_mode; 424 SPI_CLOCK clock; 425 426 } const SPI_RESOURCES; 427 428 void RSI_SPI_SetSlaveSelectNumber(uint8_t slavenumber); 429 void RSI_SPI_Slave_Disable(void); 430 void RSI_SPI_Slave_Set_CS_Init_State(void); 431 #endif /* __SPI_H */ 432