33 #include "fsl_common.h" 45 #define FSL_DSPI_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) 48 #define DSPI_MASTER_DUMMY_DATA (0x00U) 49 #define DSPI_SLAVE_DUMMY_DATA (0x00U) 70 kDSPI_AllStatusFlag = SPI_SR_TCF_MASK | SPI_SR_EOQF_MASK | SPI_SR_TFUF_MASK | SPI_SR_TFFF_MASK | SPI_SR_RFOF_MASK |
71 SPI_SR_RFDF_MASK | SPI_SR_TXRXS_MASK
84 SPI_RSER_TFFF_RE_MASK | SPI_RSER_RFOF_RE_MASK | SPI_RSER_RFDF_RE_MASK
98 typedef enum _dspi_master_slave_mode
108 typedef enum _dspi_master_sample_point
116 typedef enum _dspi_which_pcs_config
127 typedef enum _dspi_pcs_polarity_config
146 typedef enum _dspi_clock_polarity
153 typedef enum _dspi_clock_phase
162 typedef enum _dspi_shift_direction
169 typedef enum _dspi_delay_type
177 typedef enum _dspi_ctar_selection
190 #define DSPI_MASTER_CTAR_SHIFT (0U) 191 #define DSPI_MASTER_CTAR_MASK (0x0FU) 192 #define DSPI_MASTER_PCS_SHIFT (4U) 193 #define DSPI_MASTER_PCS_MASK (0xF0U) 195 enum _dspi_transfer_config_flag_for_master 217 #define DSPI_SLAVE_CTAR_SHIFT (0U) 218 #define DSPI_SLAVE_CTAR_MASK (0x07U) 220 enum _dspi_transfer_config_flag_for_slave 235 typedef struct _dspi_command_data_config
246 typedef struct _dspi_master_ctar_config
264 typedef struct _dspi_master_config
285 typedef struct _dspi_slave_ctar_config
294 typedef struct _dspi_slave_config
329 dspi_master_handle_t *handle,
341 dspi_slave_handle_t *handle,
346 typedef struct _dspi_transfer
405 #if defined(__cplusplus) 512 base->MCR &= ~SPI_MCR_MDIS_MASK;
516 base->MCR |= SPI_MCR_MDIS_MASK;
555 base->SR = statusFlags;
648 return (uint32_t) & (base->PUSHR);
661 return (uint32_t) & (base->PUSHR_SLAVE);
674 return (uint32_t) & (base->POPR);
694 base->MCR = (base->MCR & (~SPI_MCR_MSTR_MASK)) | SPI_MCR_MSTR(mode);
705 return (
bool)((base->MCR) & SPI_MCR_MSTR_MASK);
716 base->MCR &= ~SPI_MCR_HALT_MASK;
727 base->MCR |= SPI_MCR_HALT_MASK;
743 base->MCR = (base->MCR & (~(SPI_MCR_DIS_RXF_MASK | SPI_MCR_DIS_TXF_MASK))) | SPI_MCR_DIS_TXF(!enableTxFifo) |
744 SPI_MCR_DIS_RXF(!enableRxFifo);
754 static inline void DSPI_FlushFifo(SPI_Type *base,
bool flushTxFifo,
bool flushRxFifo)
756 base->MCR = (base->MCR & (~(SPI_MCR_CLR_TXF_MASK | SPI_MCR_CLR_RXF_MASK))) | SPI_MCR_CLR_TXF(flushTxFifo) |
757 SPI_MCR_CLR_RXF(flushRxFifo);
772 base->MCR = (base->MCR & ~SPI_MCR_PCSIS_MASK) | SPI_MCR_PCSIS(mask);
789 dspi_ctar_selection_t whichCtar,
790 uint32_t baudRate_Bps,
791 uint32_t srcClock_Hz);
812 SPI_Type *base, dspi_ctar_selection_t whichCtar, uint32_t prescaler, uint32_t scaler, dspi_delay_type_t whichDelay);
840 dspi_ctar_selection_t whichCtar,
841 dspi_delay_type_t whichDelay,
842 uint32_t srcClock_Hz,
843 uint32_t delayTimeInNanoSec);
995 base->PUSHR_SLAVE = data;
1017 return (base->POPR);
1042 dspi_master_handle_t *handle,
1117 dspi_slave_handle_t *handle,
1171 #if defined(__cplusplus) Definition: fsl_dspi.h:63
Definition: fsl_common.h:71
uint8_t * rxData
Definition: fsl_dspi.h:349
dspi_clock_phase_t cpha
Definition: fsl_dspi.h:251
Definition: fsl_dspi.h:91
uint32_t lastSckToPcsDelayInNanoSec
Definition: fsl_dspi.h:256
uint8_t * txData
Definition: fsl_dspi.h:348
Definition: fsl_dspi.h:139
Definition: fsl_dspi.h:209
Definition: fsl_dspi.h:140
Definition: fsl_dspi.h:77
Definition: fsl_dspi.h:148
_dspi_flags
DSPI status flags in SPIx_SR register.
Definition: fsl_dspi.h:61
DSPI master transfer handle structure used for transactional API.
Definition: fsl_dspi.h:359
Definition: fsl_dspi.h:203
DSPI master ctar config structure.
Definition: fsl_dspi.h:246
Definition: fsl_dspi.h:197
static uint32_t DSPI_SlaveGetTxRegisterAddress(SPI_Type *base)
Gets the DSPI slave PUSHR data register address for the DMA operation.
Definition: fsl_dspi.h:659
dspi_master_slave_mode_t
DSPI master or slave mode configuration.
Definition: fsl_dspi.h:98
void DSPI_MasterGetDefaultConfig(dspi_master_config_t *masterConfig)
Sets the dspi_master_config_t structure to default values.
Definition: fsl_dspi.c:202
status_t DSPI_SlaveTransferGetCount(SPI_Type *base, dspi_slave_handle_t *handle, size_t *count)
Gets the slave transfer count.
Definition: fsl_dspi.c:1281
Definition: fsl_dspi.h:186
Definition: fsl_dspi.h:65
_dspi_dma_enable
DSPI DMA source.
Definition: fsl_dspi.h:89
void DSPI_MasterWriteCommandDataBlocking(SPI_Type *base, uint32_t data)
Writes a 32-bit data word (16-bit command appended with 16-bit data) into the data buffer...
Definition: fsl_dspi.c:488
bool enableContinuousSCK
Definition: fsl_dspi.h:272
static void DSPI_StartTransfer(SPI_Type *base)
Starts the DSPI transfers and clears HALT bit in MCR.
Definition: fsl_dspi.h:714
Definition: fsl_dspi.h:149
bool clearTransferCount
Definition: fsl_dspi.h:242
dspi_clock_phase_t
DSPI clock phase configuration for a given CTAR.
Definition: fsl_dspi.h:153
Definition: fsl_dspi.h:81
Definition: fsl_dspi.h:101
void DSPI_EnableInterrupts(SPI_Type *base, uint32_t mask)
Enables the DSPI interrupts.
Definition: fsl_dspi.c:528
Definition: fsl_dspi.h:214
volatile uint8_t state
Definition: fsl_dspi.h:376
uint32_t pcsToSckDelayInNanoSec
Definition: fsl_dspi.h:254
Definition: fsl_dspi.h:82
dspi_ctar_selection_t whichCtar
Definition: fsl_dspi.h:238
static uint32_t DSPI_ReadData(SPI_Type *base)
Reads data from the data buffer.
Definition: fsl_dspi.h:1015
status_t DSPI_MasterTransferGetCount(SPI_Type *base, dspi_master_handle_t *handle, size_t *count)
Gets the master transfer count.
Definition: fsl_dspi.c:924
void * userData
Definition: fsl_dspi.h:399
static void DSPI_SetAllPcsPolarity(SPI_Type *base, uint32_t mask)
Configures the DSPI peripheral chip select polarity simultaneously. For example, PCS0 and PCS1 set to...
Definition: fsl_dspi.h:770
static void DSPI_MasterWriteData(SPI_Type *base, dspi_command_data_config_t *command, uint16_t data)
Writes data into the data buffer for master mode.
Definition: fsl_dspi.h:868
static void DSPI_DisableDMA(SPI_Type *base, uint32_t mask)
Disables the DSPI DMA request.
Definition: fsl_dspi.h:633
Definition: fsl_dspi.h:208
size_t totalByteCount
Definition: fsl_dspi.h:374
Definition: fsl_dspi.h:198
Definition: fsl_dspi.h:204
Definition: fsl_dspi.h:112
dspi_ctar_selection_t
DSPI Clock and Transfer Attributes Register (CTAR) selection.
Definition: fsl_dspi.h:177
void DSPI_MasterTransferHandleIRQ(SPI_Type *base, dspi_master_handle_t *handle)
DSPI Master IRQ handler function.
Definition: fsl_dspi.c:1092
static void DSPI_SetFifoEnable(SPI_Type *base, bool enableTxFifo, bool enableRxFifo)
Enables (or disables) the DSPI FIFOs.
Definition: fsl_dspi.h:741
Definition: fsl_dspi.h:66
Definition: fsl_dspi.h:57
DSPI slave configuration structure.
Definition: fsl_dspi.h:294
dspi_master_transfer_callback_t callback
Definition: fsl_dspi.h:378
Definition: fsl_dspi.h:155
dspi_shift_direction_t direction
Definition: fsl_dspi.h:252
void DSPI_SlaveTransferCreateHandle(SPI_Type *base, dspi_slave_handle_t *handle, dspi_slave_transfer_callback_t callback, void *userData)
Initializes the DSPI slave handle.
Definition: fsl_dspi.c:1197
Definition: fsl_dspi.h:64
uint32_t bitsPerFrame
Definition: fsl_dspi.h:249
static void DSPI_ClearStatusFlags(SPI_Type *base, uint32_t statusFlags)
Clears the DSPI status flag.
Definition: fsl_dspi.h:553
dspi_master_sample_point_t samplePoint
Definition: fsl_dspi.h:280
volatile uint32_t lastCommand
Definition: fsl_dspi.h:363
Definition: fsl_dspi.h:120
Definition: fsl_dspi.h:121
Definition: fsl_dspi.h:123
static uint32_t DSPI_GetStatusFlags(SPI_Type *base)
Gets the DSPI status flag state.
Definition: fsl_dspi.h:534
void DSPI_MasterSetDelayScaler(SPI_Type *base, dspi_ctar_selection_t whichCtar, uint32_t prescaler, uint32_t scaler, dspi_delay_type_t whichDelay)
Manually configures the delay prescaler and scaler for a particular CTAR.
Definition: fsl_dspi.c:360
Definition: fsl_dspi.h:165
DSPI master/slave transfer structure.
Definition: fsl_dspi.h:346
dspi_slave_ctar_config_t ctarConfig
Definition: fsl_dspi.h:297
Definition: fsl_dspi.h:119
Definition: fsl_dspi.h:181
void DSPI_SlaveWriteDataBlocking(SPI_Type *base, uint32_t data)
Writes data into the data buffer in slave mode, waits till data was transmitted, and returns...
Definition: fsl_dspi.c:508
static uint32_t DSPI_MasterGetFormattedCommand(dspi_command_data_config_t *command)
Returns the DSPI command word formatted to the PUSHR data register bit field.
Definition: fsl_dspi.h:935
Definition: fsl_dspi.h:184
void DSPI_Deinit(SPI_Type *base)
De-initializes the DSPI peripheral. Call this API to disable the DSPI clock.
Definition: fsl_dspi.c:269
Definition: fsl_dspi.h:141
Definition: fsl_dspi.h:173
Definition: fsl_dspi.h:157
status_t DSPI_MasterTransferNonBlocking(SPI_Type *base, dspi_master_handle_t *handle, dspi_transfer_t *transfer)
DSPI master transfer data using interrupts.
Definition: fsl_dspi.c:887
static void DSPI_FlushFifo(SPI_Type *base, bool flushTxFifo, bool flushRxFifo)
Flushes the DSPI FIFOs.
Definition: fsl_dspi.h:754
dspi_master_ctar_config_t ctarConfig
Definition: fsl_dspi.h:267
Definition: fsl_dspi.h:136
status_t DSPI_MasterTransferBlocking(SPI_Type *base, dspi_transfer_t *transfer)
DSPI master transfer data using polling.
Definition: fsl_dspi.c:559
Definition: fsl_dspi.h:129
dspi_pcs_polarity_config_t pcsActiveHighOrLow
Definition: fsl_dspi.h:270
dspi_delay_type_t
DSPI delay type selection.
Definition: fsl_dspi.h:169
Definition: fsl_dspi.h:222
Definition: fsl_dspi.h:69
uint32_t DSPI_MasterSetDelayTimes(SPI_Type *base, dspi_ctar_selection_t whichCtar, dspi_delay_type_t whichDelay, uint32_t srcClock_Hz, uint32_t delayTimeInNanoSec)
Calculates the delay prescaler and scaler based on the desired delay input in nanoseconds.
Definition: fsl_dspi.c:386
DSPI slave transfer handle structure used for transactional API.
Definition: fsl_dspi.h:383
DSPI master command date configuration used for SPIx_PUSHR.
Definition: fsl_dspi.h:235
dspi_master_sample_point_t
DSPI Sample Point: Controls when the DSPI master samples SIN in Modified Transfer Format...
Definition: fsl_dspi.h:108
void(* dspi_slave_transfer_callback_t)(SPI_Type *base, dspi_slave_handle_t *handle, status_t status, void *userData)
Completion callback function pointer type.
Definition: fsl_dspi.h:340
static void DSPI_StopTransfer(SPI_Type *base)
Stops (halts) DSPI transfers and sets HALT bit in MCR.
Definition: fsl_dspi.h:725
volatile size_t dataSize
Definition: fsl_dspi.h:350
Definition: fsl_dspi.h:179
Definition: fsl_dspi.h:55
Definition: fsl_dspi.h:164
bool isPcsContinuous
Definition: fsl_dspi.h:237
Definition: fsl_dspi.h:79
void DSPI_GetDefaultDataCommandConfig(dspi_command_data_config_t *command)
Sets the dspi_command_data_config_t structure to default values.
Definition: fsl_dspi.c:458
volatile size_t remainingSendByteCount
Definition: fsl_dspi.h:372
dspi_which_pcs_t
DSPI Peripheral Chip Select (Pcs) configuration (which Pcs to configure).
Definition: fsl_dspi.h:116
Definition: fsl_dspi.h:230
volatile uint32_t errorCount
Definition: fsl_dspi.h:396
Definition: fsl_dspi.h:67
uint8_t *volatile rxData
Definition: fsl_dspi.h:371
void DSPI_SlaveGetDefaultConfig(dspi_slave_config_t *slaveConfig)
Sets the dspi_slave_config_t structure to default values.
Definition: fsl_dspi.c:256
static void DSPI_EnableDMA(SPI_Type *base, uint32_t mask)
Enables the DSPI DMA request.
Definition: fsl_dspi.h:617
void DSPI_MasterTransferAbort(SPI_Type *base, dspi_master_handle_t *handle)
DSPI master aborts transfer using an interrupt.
Definition: fsl_dspi.c:1082
dspi_shift_direction_t
DSPI data shifter direction options for a given CTAR.
Definition: fsl_dspi.h:162
Definition: fsl_dspi.h:229
dspi_clock_polarity_t cpol
Definition: fsl_dspi.h:250
DSPI slave ctar configuration structure.
Definition: fsl_dspi.h:285
void DSPI_SlaveTransferAbort(SPI_Type *base, dspi_slave_handle_t *handle)
DSPI slave aborts a transfer using an interrupt.
Definition: fsl_dspi.c:1417
static uint32_t DSPI_GetRxRegisterAddress(SPI_Type *base)
Gets the DSPI POPR data register address for the DMA operation.
Definition: fsl_dspi.h:672
_dspi_interrupt_enable
DSPI interrupt source.
Definition: fsl_dspi.h:75
Definition: fsl_dspi.h:122
Definition: fsl_dspi.h:111
void DSPI_MasterInit(SPI_Type *base, const dspi_master_config_t *masterConfig, uint32_t srcClock_Hz)
Initializes the DSPI master.
Definition: fsl_dspi.c:159
Definition: fsl_dspi.h:100
uint32_t configFlags
Definition: fsl_dspi.h:353
bool isEndOfQueue
Definition: fsl_dspi.h:241
Definition: fsl_dspi.h:207
static void DSPI_Enable(SPI_Type *base, bool enable)
Enables the DSPI peripheral and sets the MCR MDIS to 0.
Definition: fsl_dspi.h:508
static void DSPI_DisableInterrupts(SPI_Type *base, uint32_t mask)
Disables the DSPI interrupts.
Definition: fsl_dspi.h:592
void DSPI_MasterWriteDataBlocking(SPI_Type *base, dspi_command_data_config_t *command, uint16_t data)
Writes data into the data buffer master mode and waits till complete to return.
Definition: fsl_dspi.c:467
dspi_pcs_polarity_config_t
DSPI Peripheral Chip Select (Pcs) Polarity configuration.
Definition: fsl_dspi.h:127
void DSPI_MasterTransferCreateHandle(SPI_Type *base, dspi_master_handle_t *handle, dspi_master_transfer_callback_t callback, void *userData)
Initializes the DSPI master handle.
Definition: fsl_dspi.c:543
static bool DSPI_IsMaster(SPI_Type *base)
Returns whether the DSPI module is in master mode.
Definition: fsl_dspi.h:703
void DSPI_SlaveInit(SPI_Type *base, const dspi_slave_config_t *slaveConfig)
DSPI slave configuration.
Definition: fsl_dspi.c:224
Definition: fsl_dspi.h:54
volatile bool isThereExtraByte
Definition: fsl_dspi.h:368
Definition: fsl_dspi.h:199
_dspi_pcs_polarity
DSPI Peripheral Chip Select (Pcs) Polarity.
Definition: fsl_dspi.h:134
Definition: fsl_dspi.h:130
Definition: fsl_dspi.h:70
Definition: fsl_dspi.h:211
Definition: fsl_dspi.h:172
Definition: fsl_dspi.h:210
dspi_which_pcs_t whichPcs
Definition: fsl_dspi.h:240
Definition: fsl_dspi.h:137
Definition: fsl_dspi.h:200
Definition: fsl_dspi.h:142
status_t DSPI_SlaveTransferNonBlocking(SPI_Type *base, dspi_slave_handle_t *handle, dspi_transfer_t *transfer)
DSPI slave transfers data using an interrupt.
Definition: fsl_dspi.c:1213
Definition: fsl_dspi.h:118
uint32_t betweenTransferDelayInNanoSec
Definition: fsl_dspi.h:259
Definition: fsl_dspi.h:213
Definition: fsl_dspi.h:171
Definition: fsl_dspi.h:80
Definition: fsl_dspi.h:183
volatile bool isPcsActiveAfterTransfer
Definition: fsl_dspi.h:367
static void DSPI_SlaveWriteData(SPI_Type *base, uint32_t data)
Writes data into the data buffer in slave mode.
Definition: fsl_dspi.h:993
void(* dspi_master_transfer_callback_t)(SPI_Type *base, dspi_master_handle_t *handle, status_t status, void *userData)
Completion callback function pointer type.
Definition: fsl_dspi.h:328
dspi_slave_transfer_callback_t callback
Definition: fsl_dspi.h:398
DSPI master config structure.
Definition: fsl_dspi.h:264
dspi_clock_polarity_t
DSPI clock polarity configuration for a given CTAR.
Definition: fsl_dspi.h:146
void DSPI_SlaveTransferHandleIRQ(SPI_Type *base, dspi_slave_handle_t *handle)
DSPI Master IRQ handler function.
Definition: fsl_dspi.c:1430
uint32_t baudRate
Definition: fsl_dspi.h:248
static uint32_t DSPI_MasterGetTxRegisterAddress(SPI_Type *base)
Gets the DSPI master PUSHR data register address for the DMA operation.
Definition: fsl_dspi.h:646
Definition: fsl_dspi.h:201
Definition: fsl_dspi.h:78
Definition: fsl_dspi.h:202
Definition: fsl_dspi.h:56
Definition: fsl_dspi.h:110
Definition: fsl_dspi.h:231
uint8_t fifoSize
Definition: fsl_dspi.h:365
Definition: fsl_dspi.h:182
volatile size_t remainingReceiveByteCount
Definition: fsl_dspi.h:373
Definition: fsl_dspi.h:206
bool enableModifiedTimingFormat
Definition: fsl_dspi.h:279
Definition: fsl_dspi.h:187
int32_t status_t
Type used for all status and error return values.
Definition: fsl_common.h:121
Definition: fsl_dspi.h:138
Definition: fsl_dspi.h:93
uint32_t DSPI_MasterSetBaudRate(SPI_Type *base, dspi_ctar_selection_t whichCtar, uint32_t baudRate_Bps, uint32_t srcClock_Hz)
Sets the DSPI baud rate in bits per second.
Definition: fsl_dspi.c:296
static void DSPI_SetMasterSlaveMode(SPI_Type *base, dspi_master_slave_mode_t mode)
Configures the DSPI for master or slave.
Definition: fsl_dspi.h:692
Definition: fsl_dspi.h:185
Definition: fsl_dspi.h:68
volatile uint32_t command
Definition: fsl_dspi.h:362
_dspi_transfer_state
DSPI transfer state, which is used for DSPI transactiaonl APIs' state machine.
Definition: fsl_dspi.h:227
bool enableRxFifoOverWrite
Definition: fsl_dspi.h:274
Definition: fsl_dspi.h:83
uint8_t *volatile txData
Definition: fsl_dspi.h:370