MCUXpresso SDK API Reference Manual  Rev. 0
NXP Semiconductors
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages

Overview

This section describes the programming interface of the SPI driver.

Files

file  fsl_spi.h
 

Data Structures

struct  spi_master_config_t
 SPI master user configure structure. More...
 
struct  spi_slave_config_t
 SPI slave user configure structure. More...
 
struct  spi_transfer_t
 SPI transfer structure. More...
 
struct  spi_master_handle_t
 SPI transfer handle structure. More...
 

Macros

#define FSL_SDK_SPI_DRIVER_ENABLE_TRANSACTIONAL_API   1
 Macro for control transaction API, will help reduce code overhead when using polling mode only. More...
 
#define FSL_SDK_SPI_DRIVER_ENABLE_BAUDRATE_AUTO_GENERATE   1
 Macro for control baud rate auto generate, will help reduce code size when baud rate is fixed. More...
 

Typedefs

typedef spi_master_handle_t spi_slave_handle_t
 Slave handle type.
 
typedef void(* spi_master_callback_t )(SPI0_Type *base, spi_master_handle_t *handle, status_t status, void *userData)
 SPI master callback for finished transmit.
 
typedef void(* spi_slave_callback_t )(SPI0_Type *base, spi_slave_handle_t *handle, status_t status, void *userData)
 SPI slave callback for finished transmit.
 

Enumerations

enum  spi_frame_format_select_t {
  kSPI_FrameFormatSPI = 0U,
  kSPI_FrameFormatTI = 1U,
  kSPI_FrameFormatMicroWire = 2U
}
 Macro for baud rate setting if baud rate auto generate function was disabled. 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_ReceiveTimeOut = 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...
 

Driver version

#define FSL_SPI_DRIVER_VERSION   (MAKE_VERSION(2, 0, 0))
 SPI driver version 2.0.0. More...
 

Initialization and deinitialization

void SPI_MasterGetDefaultConfig (spi_master_config_t *config)
 Sets the SPI master configuration structure to default values. More...
 
status_t SPI_MasterInit (SPI0_Type *base, const spi_master_config_t *config, uint32_t srcClock_Hz)
 Initializes the SPI with master configuration. More...
 
void SPI_SlaveGetDefaultConfig (spi_slave_config_t *config)
 Sets the SPI slave configuration structure to default values. More...
 
status_t SPI_SlaveInit (SPI0_Type *base, const spi_slave_config_t *config)
 Initializes the SPI with slave configuration. More...
 
void SPI_Deinit (SPI0_Type *base)
 De-initializes the SPI. More...
 
static void SPI_Enable (SPI0_Type *base, bool enable)
 Enable or disable the SPI Master or Slave. More...
 

Status

static uint32_t SPI_GetStatusFlags (SPI0_Type *base)
 Gets the status flag. More...
 
static uint32_t SPI_GetInterruptStatusFlags (SPI0_Type *base)
 Gets the interrupt status flag. More...
 
static void SPI_ClearInterruptStatusFlags (SPI0_Type *base, uint32_t mask)
 Clear the interrupt status flag. More...
 

Interrupts

static void SPI_EnableInterrupts (SPI0_Type *base, uint32_t irqs)
 Enables the interrupt for the SPI. More...
 
static void SPI_DisableInterrupts (SPI0_Type *base, uint32_t irqs)
 Disables the interrupt for the SPI. More...
 

Bus Operations

status_t SPI_MasterSetBaudRate (SPI0_Type *base, uint32_t baudrate_Bps, uint32_t srcClock_Hz)
 Sets the baud rate for SPI transfer. More...
 
static void SPI_WriteData (SPI0_Type *base, uint16_t data)
 Writes a data into the SPI data register directly. More...
 
static uint16_t SPI_ReadData (SPI0_Type *base)
 Gets a data from the SPI data register. More...
 
status_t SPI_MasterTransferBlocking (SPI0_Type *base, spi_transfer_t *xfer)
 Transfers a block of data using a polling method. More...
 

Transactional

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...
 

Data Structure Documentation

struct spi_master_config_t

Data Fields

bool enableLoopback
 Enable loopback for test purpose.
 
bool enableMaster
 Enable SPI at initialization time.
 
uint32_t baudRate_Bps
 Baud Rate for SPI in Hz.
 
spi_clock_polarity_t clockPolarity
 Clock polarity.
 
spi_clock_phase_t clockPhase
 Clock phase.
 
spi_frame_format_select_t frameFormat
 Frame format mode. More...
 
uint8_t dataWidth
 Width of the data.
 

Field Documentation

spi_frame_format_select_t spi_master_config_t::frameFormat
struct spi_slave_config_t

Data Fields

bool enableSlave
 Enable SPI at initialization time.
 
bool enableOutput
 Enable slave SPI output. More...
 
spi_clock_polarity_t clockPolarity
 Clock polarity.
 
spi_clock_phase_t clockPhase
 Clock phase.
 
spi_frame_format_select_t frameFormat
 Frame format mode. More...
 
uint8_t dataWidth
 Width of the data.
 

Field Documentation

bool spi_slave_config_t::enableOutput
spi_frame_format_select_t spi_slave_config_t::frameFormat
struct spi_transfer_t

Data Fields

uint8_t * txData
 Send buffer.
 
uint8_t * rxData
 Receive buffer.
 
size_t dataSize
 Transfer bytes.
 
struct _spi_master_handle

Master handle type.

Data Fields

uint8_t *volatile txData
 Transfer buffer.
 
uint8_t *volatile rxData
 Receive buffer.
 
volatile size_t txRemainingBytes
 Number of data to be transmitted [in bytes].
 
volatile size_t rxRemainingBytes
 Number of data to be received [in bytes].
 
size_t totalByteCount
 A number of transfer bytes.
 
volatile uint32_t state
 SPI internal state.
 
spi_master_callback_t callback
 SPI callback.
 
void * userData
 Callback parameter.
 
uint8_t dataWidth
 SPI data width. More...
 

Field Documentation

uint8_t spi_master_handle_t::dataWidth

Macro Definition Documentation

#define FSL_SPI_DRIVER_VERSION   (MAKE_VERSION(2, 0, 0))
#define FSL_SDK_SPI_DRIVER_ENABLE_TRANSACTIONAL_API   1
#define FSL_SDK_SPI_DRIVER_ENABLE_BAUDRATE_AUTO_GENERATE   1

Enumeration Type Documentation

   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 |

SPI data size select options.

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_ReceiveTimeOut 

SPI receive 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.

Function Documentation

void SPI_MasterGetDefaultConfig ( spi_master_config_t config)

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
configpointer to master config structure
status_t SPI_MasterInit ( SPI0_Type *  base,
const spi_master_config_t config,
uint32_t  srcClock_Hz 
)

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

.baudRate_Bps = 500000,
...
};
SPI_MasterInit(SPI0, &config);
Parameters
baseSPI base pointer
configpointer to master configuration structure
srcClock_HzSource clock frequency.
void SPI_SlaveGetDefaultConfig ( spi_slave_config_t config)

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
configpointer to slave configuration structure
status_t SPI_SlaveInit ( SPI0_Type *  base,
const spi_slave_config_t config 
)

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

...
};
SPI_SlaveInit(SPI0, &config);
Parameters
baseSPI base pointer
configpointer 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
baseSPI base pointer
static void SPI_Enable ( SPI0_Type *  base,
bool  enable 
)
inlinestatic
Parameters
baseSPI base pointer
enableor disable ( true = enable, false = disable)
static uint32_t SPI_GetStatusFlags ( SPI0_Type *  base)
inlinestatic
Parameters
baseSPI base pointer
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
baseSPI base pointer
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
baseSPI base pointer
maskuse status flag to AND _spi_interrupt_status_flags could get the related status.
static void SPI_EnableInterrupts ( SPI0_Type *  base,
uint32_t  irqs 
)
inlinestatic
Parameters
baseSPI base pointer
irqsSPI 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
baseSPI base pointer
irqsSPI 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
baseSPI base pointer
baudrate_Bpsbaud rate needed in Hz.
srcClock_HzSPI source clock frequency in Hz.
static void SPI_WriteData ( SPI0_Type *  base,
uint16_t  data 
)
inlinestatic
Parameters
baseSPI base pointer
dataneeds to be write.
static uint16_t SPI_ReadData ( SPI0_Type *  base)
inlinestatic
Parameters
baseSPI base pointer
Returns
Data in the register.
status_t SPI_MasterTransferBlocking ( SPI0_Type *  base,
spi_transfer_t xfer 
)
Parameters
baseSPI base pointer
xferpointer to spi_xfer_config_t structure
Return values
kStatus_SuccessSuccessfully start a transfer.
kStatus_InvalidArgumentInput argument is invalid.
status_t SPI_MasterTransferCreateHandle ( SPI0_Type *  base,
spi_master_handle_t *  handle,
spi_master_callback_t  callback,
void *  userData 
)

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
baseSPI peripheral base address.
handleSPI handle pointer.
callbackCallback function.
userDataUser data.
status_t SPI_MasterTransferNonBlocking ( SPI0_Type *  base,
spi_master_handle_t *  handle,
spi_transfer_t xfer 
)
Parameters
baseSPI peripheral base address.
handlepointer to spi_master_handle_t structure which stores the transfer state
xferpointer to spi_xfer_config_t structure
Return values
kStatus_SuccessSuccessfully start a transfer.
kStatus_InvalidArgumentInput argument is invalid.
kStatus_SPI_BusySPI 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
baseSPI peripheral base address.
handlePointer to the spi_master_handle_t structure which stores the transfer state.
countThe 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
baseSPI peripheral base address.
handlePointer to the spi_master_handle_t structure which stores the transfer state.
status_t SPI_SlaveTransferCreateHandle ( SPI0_Type *  base,
spi_slave_handle_t handle,
spi_slave_callback_t  callback,
void *  userData 
)

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
baseSPI peripheral base address.
handleSPI handle pointer.
callbackCallback function.
userDataUser data.
status_t SPI_SlaveTransferNonBlocking ( SPI0_Type *  base,
spi_slave_handle_t handle,
spi_transfer_t xfer 
)
Note
The API returns immediately after the transfer initialization is finished.
Parameters
baseSPI peripheral base address.
handlepointer to spi_master_handle_t structure which stores the transfer state
xferpointer to spi_xfer_config_t structure
Return values
kStatus_SuccessSuccessfully start a transfer.
kStatus_InvalidArgumentInput argument is invalid.
kStatus_SPI_BusySPI is not idle, is running another transfer.
static status_t SPI_SlaveTransferGetCount ( SPI0_Type *  base,
spi_slave_handle_t handle,
size_t *  count 
)
inlinestatic

This function gets the slave transfer count.

Parameters
baseSPI peripheral base address.
handlePointer to the spi_master_handle_t structure which stores the transfer state.
countThe number of bytes transferred by using the non-blocking transaction.
Returns
status of status_t.
static void SPI_SlaveTransferAbort ( SPI0_Type *  base,
spi_slave_handle_t handle 
)
inlinestatic

This function aborts a transfer using an interrupt.

Parameters
baseSPI peripheral base address.
handlePointer to the spi_slave_handle_t structure which stores the transfer state.
void SPI_TransferHandleIRQ ( SPI0_Type *  base,
spi_slave_handle_t handle 
)
Parameters
baseSPI peripheral base address.
handlepointer to spi_slave_handle_t structure which stores the transfer state