This section describes the programming interface of the SPI driver.
|
| enum | spi_frame_format_select_t {
kSPI_FrameFormatSPI = 0U,
kSPI_FrameFormatTI = 1U,
kSPI_FrameFormatMicroWire = 2U
} |
| | SPI data size select options. More...
|
| |
| enum | spi_clock_polarity_t {
kSPI_ClockPolarityActiveHigh = 0x0U,
kSPI_ClockPolarityActiveLow = 0x1U
} |
| | SPI clock polarity configuration. More...
|
| |
| enum | spi_clock_phase_t {
kSPI_ClockPhaseFirstEdge,
kSPI_ClockPhaseSecondEdge
} |
| | SPI clock phase configuration. More...
|
| |
| enum | _spi_status {
kStatus_SPI_Busy = MAKE_STATUS(kStatusGroup_LPC_SPI_SSP, 0),
kStatus_SPI_Idle = MAKE_STATUS(kStatusGroup_LPC_SPI_SSP, 1),
kStatus_SPI_ReceiveHardwareOverRun,
kStatus_SPI_Timeout = MAKE_STATUS(kStatusGroup_LPC_SPI_SSP, 3),
kStatus_SPI_BaudrateNotSupport
} |
| | SPI transfer status. More...
|
| |
| enum | _spi_interrupt_enable {
kSPI_RxOverRunInterruptEnable = SPI0_IMSC_RORIM_MASK,
kSPI_RxTimeOutInterruptEnable = SPI0_IMSC_RTIM_MASK,
kSPI_RxFifoHalfFullInterruptEnable = SPI0_IMSC_RXIM_MASK,
kSPI_TxFifoHalfEmptyInterruptEnable = SPI0_IMSC_TXIM_MASK
} |
| | SPI interrupt sources. More...
|
| |
| enum | _spi_status_flags {
kSPI_TxFifoEmptyFlag = SPI0_SR_TFE_MASK,
kSPI_TxFifoNotFullFlag = SPI0_SR_TNF_MASK,
kSPI_RxFifoNotEmptyFlag = SPI0_SR_RNE_MASK,
kSPI_RxFifoFullFlag = SPI0_SR_RFF_MASK,
kSPI_BusyFlag = SPI0_SR_BSY_MASK,
kSPI_RxOverRunFlag = SPI0_RIS_RORRIS_MASK << 8U,
kSPI_RxTimeOutFlag = SPI0_RIS_RTRIS_MASK << 8U,
kSPI_RxFifoHalfFullFlag = SPI0_RIS_RXRIS_MASK << 8U,
kSPI_TxFifoHalfEmptyFlag = SPI0_RIS_TXRIS_MASK << 8U
} |
| | SPI status flags. More...
|
| |
| enum | _spi_interrupt_status_flags {
kSPI_RxOverRunInterruptFlag = SPI0_MIS_RORMIS_MASK,
kSPI_RxTimeOutInterruptFlag = SPI0_MIS_RTMIS_MASK,
kSPI_RxFifoHalfFullInterruptFlag = SPI0_MIS_RXMIS_MASK,
kSPI_TxFifoHalfEmptyInterruptFlag = SPI0_MIS_TXMIS_MASK
} |
| | SPI status flags. More...
|
| |
|
| status_t | SPI_MasterTransferCreateHandle (SPI0_Type *base, spi_master_handle_t *handle, spi_master_callback_t callback, void *userData) |
| | Initializes the SPI master handle. More...
|
| |
| status_t | SPI_MasterTransferNonBlocking (SPI0_Type *base, spi_master_handle_t *handle, spi_transfer_t *xfer) |
| | Performs a non-blocking SPI interrupt transfer. More...
|
| |
| status_t | SPI_MasterTransferGetCount (SPI0_Type *base, spi_master_handle_t *handle, size_t *count) |
| | Gets the master transfer count. More...
|
| |
| void | SPI_MasterTransferAbort (SPI0_Type *base, spi_master_handle_t *handle) |
| | SPI master aborts a transfer using an interrupt. More...
|
| |
| status_t | SPI_SlaveTransferCreateHandle (SPI0_Type *base, spi_slave_handle_t *handle, spi_slave_callback_t callback, void *userData) |
| | Initializes the SPI slave handle. More...
|
| |
| status_t | SPI_SlaveTransferNonBlocking (SPI0_Type *base, spi_slave_handle_t *handle, spi_transfer_t *xfer) |
| | Performs a non-blocking SPI slave interrupt transfer. More...
|
| |
| static status_t | SPI_SlaveTransferGetCount (SPI0_Type *base, spi_slave_handle_t *handle, size_t *count) |
| | Gets the slave transfer count. More...
|
| |
| static void | SPI_SlaveTransferAbort (SPI0_Type *base, spi_slave_handle_t *handle) |
| | SPI slave aborts a transfer using an interrupt. More...
|
| |
| void | SPI_TransferHandleIRQ (SPI0_Type *base, spi_slave_handle_t *handle) |
| | Interrupts a handler for the SPI slave. More...
|
| |
| struct spi_master_config_t |
| struct spi_slave_config_t |
| bool spi_slave_config_t::enableOutput |
Data Fields |
|
uint8_t * | txData |
| | Send buffer.
|
| |
|
uint8_t * | rxData |
| | Receive buffer.
|
| |
|
size_t | dataSize |
| | Transfer bytes.
|
| |
| struct _spi_master_handle |
| uint8_t spi_master_handle_t::dataWidth |
| #define FSL_SDK_SPI_DRIVER_ENABLE_TRANSACTIONAL_API 1 |
| #define FSL_SDK_SPI_DRIVER_ENABLE_BAUDRATE_AUTO_GENERATE 1 |
| #define SPI_RETRY_TIMES 0U /* Define to zero means keep waiting until the flag is assert/deassert. */ |
Formula for baud rate : baudRate = SpiClockSource_Hz/ (CPSDVSR * (SCR +1)).
Common value for use: | SPI baud rate(Hz) | SPI clock frequency(Hz) | CPSDVSR | SCR | 1000000 | 8000000 | 2 | 3 | 1000000 | 2000000 | 2 | 0 | 500000 | 8000000 | 2 | 7 | 500000 | 2000000 | 2 | 1 | 100000 | 8000000 | 4 | 19 | 100000 | 2000000 | 2 | 9 |
Retry times for waiting flag.
| Enumerator |
|---|
| kSPI_FrameFormatSPI |
Transfer frame format using SPI mode.
|
| kSPI_FrameFormatTI |
Transfer frame format using TI mode.
|
| kSPI_FrameFormatMicroWire |
Transfer frame format using microwire mode.
|
| Enumerator |
|---|
| kSPI_ClockPolarityActiveHigh |
Active-high SPI clock (idles low).
|
| kSPI_ClockPolarityActiveLow |
Active-low SPI clock (idles high).
|
| Enumerator |
|---|
| kSPI_ClockPhaseFirstEdge |
SPI controller captures serial data on the first clock transition of the frame.
|
| kSPI_ClockPhaseSecondEdge |
SPI controller captures serial data on the second clock transition of the frame.
|
| Enumerator |
|---|
| kStatus_SPI_Busy |
SPI bus is busy.
|
| kStatus_SPI_Idle |
SPI is idle.
|
| kStatus_SPI_ReceiveHardwareOverRun |
SPI receive hardware overrun occurred.
|
| kStatus_SPI_Timeout |
SPI time-out occurred.
|
| kStatus_SPI_BaudrateNotSupport |
Baudrate is not support in current clock source.
|
| Enumerator |
|---|
| kSPI_RxOverRunInterruptEnable |
Rx overrun interrupt.
|
| kSPI_RxTimeOutInterruptEnable |
Rx time-out interrupt.
|
| kSPI_RxFifoHalfFullInterruptEnable |
Rx FIFO half full interrupt.
|
| kSPI_TxFifoHalfEmptyInterruptEnable |
Tx FIFO half Empty interrupt.
|
| Enumerator |
|---|
| kSPI_TxFifoEmptyFlag |
TX FIFO empty flag.
|
| kSPI_TxFifoNotFullFlag |
TX FIFO not full flag.
|
| kSPI_RxFifoNotEmptyFlag |
RX FIFO not empty flag.
|
| kSPI_RxFifoFullFlag |
RX FIFO full flag.
|
| kSPI_BusyFlag |
SPI busy flag.
|
| kSPI_RxOverRunFlag |
Rx overrun flag.
|
| kSPI_RxTimeOutFlag |
Rx time-out flag.
|
| kSPI_RxFifoHalfFullFlag |
RX FIFO at least half full flag.
|
| kSPI_TxFifoHalfEmptyFlag |
TX FIFO at least half empty flag.
|
| Enumerator |
|---|
| kSPI_RxOverRunInterruptFlag |
Rx overrun interrupt flag.
|
| kSPI_RxTimeOutInterruptFlag |
Rx time-out interrupt flag.
|
| kSPI_RxFifoHalfFullInterruptFlag |
RX FIFO at least half full interrupt flag.
|
| kSPI_TxFifoHalfEmptyInterruptFlag |
TX FIFO at least half empty interrupt flag.
|
The purpose of this API is to get the configuration structure initialized for use in SPI_MasterInit(). User may use the initialized structure unchanged in SPI_MasterInit(), or modify some fields of the structure before calling SPI_MasterInit(). After calling this API, the master is ready to transfer. Example:
- Parameters
-
| config | pointer to master config structure |
The configuration structure can be filled by user from scratch, or be set with default values by SPI_MasterGetDefaultConfig(). After calling this API, the slave is ready to transfer. Please note that: Current transfer APIs are for SPI format mode, for TI and Micro Wire mode, please use low level API to adapt the real application. Example
- Parameters
-
| base | SPI base pointer |
| config | pointer to master configuration structure |
| srcClock_Hz | Source clock frequency. |
The purpose of this API is to get the configuration structure initialized for use in SPI_SlaveInit(). Modify some fields of the structure before calling SPI_SlaveInit(). Example:
- Parameters
-
| config | pointer to slave configuration structure |
The configuration structure can be filled by user from scratch or be set with default values by SPI_SlaveGetDefaultConfig(). After calling this API, the slave is ready to transfer. Example
- Parameters
-
| base | SPI base pointer |
| config | pointer to slave configuration structure |
| void SPI_Deinit |
( |
SPI0_Type * |
base | ) |
|
Calling this API resets the SPI module, gates the SPI clock.
The SPI module can't work unless calling the SPI_MasterInit/SPI_SlaveInit to initialize module.
- Parameters
-
| static void SPI_Enable |
( |
SPI0_Type * |
base, |
|
|
bool |
enable |
|
) |
| |
|
inlinestatic |
- Parameters
-
| base | SPI base pointer |
| enable | or disable ( true = enable, false = disable) |
| static uint32_t SPI_GetStatusFlags |
( |
SPI0_Type * |
base | ) |
|
|
inlinestatic |
- Parameters
-
- Returns
- SPI Status, use status flag to AND _spi_status_flags could get the related status.
| static uint32_t SPI_GetInterruptStatusFlags |
( |
SPI0_Type * |
base | ) |
|
|
inlinestatic |
When an SPI interrupt occurs, the interrupt service routine should read this register to determine the cause or causes of the interrupt.
- Parameters
-
- Returns
- SPI Status, use status flag to AND _spi_interrupt_status_flags could get the related status.
| static void SPI_ClearInterruptStatusFlags |
( |
SPI0_Type * |
base, |
|
|
uint32_t |
mask |
|
) |
| |
|
inlinestatic |
Clear the interrupt status flags setting by hardware.Please note that: only RORIC and RTIC can be cleared by software.
- Parameters
-
| static void SPI_EnableInterrupts |
( |
SPI0_Type * |
base, |
|
|
uint32_t |
irqs |
|
) |
| |
|
inlinestatic |
- Parameters
-
| base | SPI base pointer |
| irqs | SPI interrupt source. The parameter can be any combination of the following values:
- kSPI_RxFifoHalfFullInterruptEnable
- kSPI_TxFifoHalfEmptyInterruptEnable
|
| static void SPI_DisableInterrupts |
( |
SPI0_Type * |
base, |
|
|
uint32_t |
irqs |
|
) |
| |
|
inlinestatic |
- Parameters
-
| base | SPI base pointer |
| irqs | SPI interrupt source. The parameter can be any combination of the following values:
- kSPI_RxFifoHalfFullInterruptEnable
- kSPI_TxFifoHalfEmptyInterruptEnable
|
| status_t SPI_MasterSetBaudRate |
( |
SPI0_Type * |
base, |
|
|
uint32_t |
baudrate_Bps, |
|
|
uint32_t |
srcClock_Hz |
|
) |
| |
This is only used in master.
- Parameters
-
| base | SPI base pointer |
| baudrate_Bps | baud rate needed in Hz. |
| srcClock_Hz | SPI source clock frequency in Hz. |
| static void SPI_WriteData |
( |
SPI0_Type * |
base, |
|
|
uint16_t |
data |
|
) |
| |
|
inlinestatic |
- Parameters
-
| base | SPI base pointer |
| data | needs to be write. |
| static uint16_t SPI_ReadData |
( |
SPI0_Type * |
base | ) |
|
|
inlinestatic |
- Parameters
-
- Returns
- Data in the register.
- Parameters
-
| base | SPI base pointer |
| xfer | pointer to spi_xfer_config_t structure |
- Return values
-
| kStatus_Success | Successfully start a transfer. |
| kStatus_InvalidArgument | Input argument is invalid. |
| kStatus_SPI_Timeout | The transfer timed out and was aborted. |
This function initializes the SPI master handle which can be used for other SPI master transactional APIs. Usually, for a specified SPI instance, call this API once to get the initialized handle.
- Parameters
-
| base | SPI peripheral base address. |
| handle | SPI handle pointer. |
| callback | Callback function. |
| userData | User data. |
| status_t SPI_MasterTransferNonBlocking |
( |
SPI0_Type * |
base, |
|
|
spi_master_handle_t * |
handle, |
|
|
spi_transfer_t * |
xfer |
|
) |
| |
- Parameters
-
| base | SPI peripheral base address. |
| handle | pointer to spi_master_handle_t structure which stores the transfer state |
| xfer | pointer to spi_xfer_config_t structure |
- Return values
-
| kStatus_Success | Successfully start a transfer. |
| kStatus_InvalidArgument | Input argument is invalid. |
| kStatus_SPI_Busy | SPI is not idle, is running another transfer. |
| status_t SPI_MasterTransferGetCount |
( |
SPI0_Type * |
base, |
|
|
spi_master_handle_t * |
handle, |
|
|
size_t * |
count |
|
) |
| |
This function gets the master transfer count.
- Parameters
-
| base | SPI peripheral base address. |
| handle | Pointer to the spi_master_handle_t structure which stores the transfer state. |
| count | The number of bytes transferred by using the non-blocking transaction. |
- Returns
- status of status_t.
| void SPI_MasterTransferAbort |
( |
SPI0_Type * |
base, |
|
|
spi_master_handle_t * |
handle |
|
) |
| |
This function aborts a transfer using an interrupt.
- Parameters
-
| base | SPI peripheral base address. |
| handle | Pointer to the spi_master_handle_t structure which stores the transfer state. |
This function initializes the SPI slave handle which can be used for other SPI slave transactional APIs. Usually, for a specified SPI instance, call this API once to get the initialized handle.
- Parameters
-
| base | SPI peripheral base address. |
| handle | SPI handle pointer. |
| callback | Callback function. |
| userData | User data. |
- Note
- The API returns immediately after the transfer initialization is finished.
- Parameters
-
| base | SPI peripheral base address. |
| handle | pointer to spi_master_handle_t structure which stores the transfer state |
| xfer | pointer to spi_xfer_config_t structure |
- Return values
-
| kStatus_Success | Successfully start a transfer. |
| kStatus_InvalidArgument | Input argument is invalid. |
| kStatus_SPI_Busy | SPI is not idle, is running another transfer. |
This function gets the slave transfer count.
- Parameters
-
| base | SPI peripheral base address. |
| handle | Pointer to the spi_master_handle_t structure which stores the transfer state. |
| count | The number of bytes transferred by using the non-blocking transaction. |
- Returns
- status of status_t.
This function aborts a transfer using an interrupt.
- Parameters
-
| base | SPI peripheral base address. |
| handle | Pointer to the spi_slave_handle_t structure which stores the transfer state. |
- Parameters
-
| base | SPI peripheral base address. |
| handle | pointer to spi_slave_handle_t structure which stores the transfer state |