This section describes the programming interface of the LPSPI Peripheral driver. The LPSPI driver configures LPSPI module, provides the functional and transactional interfaces to build the LPSPI application.
Function groups
LPSPI Initialization and De-initialization
This function group initializes the default configuration structure for master and slave, initializes the LPSPI master with a master configuration, initializes the LPSPI slave with a slave configuration, and de-initializes the LPSPI module.
LPSPI Basic Operation
This function group enables/disables the LPSPI module both interrupt and DMA, gets the data register address for the DMA transfer, sets master and slave, starts and stops the transfer, and so on.
LPSPI Transfer Operation
This function group controls the transfer, master send/receive data, and slave send/receive data.
LPSPI Status Operation
This function group gets/clears the LPSPI status.
LPSPI Block Transfer Operation
This function group transfers a block of data, gets the transfer status, and aborts the transfer.
Typical use case
Master Operation
lpspi_master_handle_t g_m_handle;
masterXfer.txData = masterTxData;
masterXfer.rxData = masterRxData;
masterXfer.dataSize = TRANSFER_SIZE;
Slave Operation
lpspi_slave_handle_t g_s_handle;
slaveConfig.bitsPerFrame = 8;
isSlaveTransferCompleted = false;
slaveXfer.txData = slaveTxData;
slaveXfer.rxData = slaveRxData;
slaveXfer.dataSize = TRANSFER_SIZE;
|
enum | _lpspi_status {
kStatus_LPSPI_Busy = MAKE_STATUS(kStatusGroup_LPSPI, 0),
kStatus_LPSPI_Error = MAKE_STATUS(kStatusGroup_LPSPI, 1),
kStatus_LPSPI_Idle = MAKE_STATUS(kStatusGroup_LPSPI, 2),
kStatus_LPSPI_OutOfRange = MAKE_STATUS(kStatusGroup_LPSPI, 3)
} |
| Status for the LPSPI driver. More...
|
|
enum | _lpspi_flags {
kLPSPI_TxDataRequestFlag = LPSPI_SR_TDF_MASK,
kLPSPI_RxDataReadyFlag = LPSPI_SR_RDF_MASK,
kLPSPI_WordCompleteFlag = LPSPI_SR_WCF_MASK,
kLPSPI_FrameCompleteFlag = LPSPI_SR_FCF_MASK,
kLPSPI_TransferCompleteFlag = LPSPI_SR_TCF_MASK,
kLPSPI_TransmitErrorFlag = LPSPI_SR_TEF_MASK,
kLPSPI_ReceiveErrorFlag = LPSPI_SR_REF_MASK,
kLPSPI_DataMatchFlag = LPSPI_SR_DMF_MASK,
kLPSPI_ModuleBusyFlag = LPSPI_SR_MBF_MASK,
kLPSPI_AllStatusFlag
} |
| LPSPI status flags in SPIx_SR register. More...
|
|
enum | _lpspi_interrupt_enable {
kLPSPI_TxInterruptEnable = LPSPI_IER_TDIE_MASK,
kLPSPI_RxInterruptEnable = LPSPI_IER_RDIE_MASK,
kLPSPI_WordCompleteInterruptEnable = LPSPI_IER_WCIE_MASK,
kLPSPI_FrameCompleteInterruptEnable = LPSPI_IER_FCIE_MASK,
kLPSPI_TransferCompleteInterruptEnable = LPSPI_IER_TCIE_MASK,
kLPSPI_TransmitErrorInterruptEnable = LPSPI_IER_TEIE_MASK,
kLPSPI_ReceiveErrorInterruptEnable = LPSPI_IER_REIE_MASK,
kLPSPI_DataMatchInterruptEnable = LPSPI_IER_DMIE_MASK,
kLPSPI_AllInterruptEnable
} |
| LPSPI interrupt source. More...
|
|
enum | _lpspi_dma_enable {
kLPSPI_TxDmaEnable = LPSPI_DER_TDDE_MASK,
kLPSPI_RxDmaEnable = LPSPI_DER_RDDE_MASK
} |
| LPSPI DMA source. More...
|
|
enum | lpspi_master_slave_mode_t {
kLPSPI_Master = 1U,
kLPSPI_Slave = 0U
} |
| LPSPI master or slave mode configuration. More...
|
|
enum | lpspi_which_pcs_t {
kLPSPI_Pcs0 = 0U,
kLPSPI_Pcs1 = 1U,
kLPSPI_Pcs2 = 2U,
kLPSPI_Pcs3 = 3U
} |
| LPSPI Peripheral Chip Select (PCS) configuration (which PCS to configure). More...
|
|
enum | lpspi_pcs_polarity_config_t {
kLPSPI_PcsActiveHigh = 1U,
kLPSPI_PcsActiveLow = 0U
} |
| LPSPI Peripheral Chip Select (PCS) Polarity configuration. More...
|
|
enum | _lpspi_pcs_polarity {
kLPSPI_Pcs0ActiveLow = 1U << 0,
kLPSPI_Pcs1ActiveLow = 1U << 1,
kLPSPI_Pcs2ActiveLow = 1U << 2,
kLPSPI_Pcs3ActiveLow = 1U << 3,
kLPSPI_PcsAllActiveLow = 0xFU
} |
| LPSPI Peripheral Chip Select (PCS) Polarity. More...
|
|
enum | lpspi_clock_polarity_t {
kLPSPI_ClockPolarityActiveHigh = 0U,
kLPSPI_ClockPolarityActiveLow = 1U
} |
| LPSPI clock polarity configuration. More...
|
|
enum | lpspi_clock_phase_t {
kLPSPI_ClockPhaseFirstEdge = 0U,
kLPSPI_ClockPhaseSecondEdge = 1U
} |
| LPSPI clock phase configuration. More...
|
|
enum | lpspi_shift_direction_t {
kLPSPI_MsbFirst = 0U,
kLPSPI_LsbFirst = 1U
} |
| LPSPI data shifter direction options. More...
|
|
enum | lpspi_host_request_select_t {
kLPSPI_HostReqExtPin = 0U,
kLPSPI_HostReqInternalTrigger = 1U
} |
| LPSPI Host Request select configuration. More...
|
|
enum | lpspi_match_config_t {
kLPSI_MatchDisabled = 0x0U,
kLPSI_1stWordEqualsM0orM1 = 0x2U,
kLPSI_AnyWordEqualsM0orM1 = 0x3U,
kLPSI_1stWordEqualsM0and2ndWordEqualsM1 = 0x4U,
kLPSI_AnyWordEqualsM0andNxtWordEqualsM1 = 0x5U,
kLPSI_1stWordAndM1EqualsM0andM1 = 0x6U,
kLPSI_AnyWordAndM1EqualsM0andM1 = 0x7U
} |
| LPSPI Match configuration options. More...
|
|
enum | lpspi_pin_config_t {
kLPSPI_SdiInSdoOut = 0U,
kLPSPI_SdoInSdoOut = 1U,
kLPSPI_SdiInSdiOut = 2U,
kLPSPI_SdoInSdiOut = 3U
} |
| LPSPI pin (SDO and SDI) configuration. More...
|
|
enum | lpspi_data_out_config_t {
kLpspiDataOutRetained = 0U,
kLpspiDataOutTristate = 1U
} |
| LPSPI data output configuration. More...
|
|
enum | lpspi_transfer_width_t {
kLPSPI_SingleBitXfer = 0U,
kLPSPI_TwoBitXfer = 1U,
kLPSPI_FourBitXfer = 2U
} |
| LPSPI transfer width configuration. More...
|
|
enum | lpspi_delay_type_t {
kLPSPI_PcsToSck = 1U,
kLPSPI_LastSckToPcs,
kLPSPI_BetweenTransfer
} |
| LPSPI delay type selection. More...
|
|
enum | _lpspi_transfer_config_flag_for_master {
kLPSPI_MasterPcs0 = 0U << LPSPI_MASTER_PCS_SHIFT,
kLPSPI_MasterPcs1 = 1U << LPSPI_MASTER_PCS_SHIFT,
kLPSPI_MasterPcs2 = 2U << LPSPI_MASTER_PCS_SHIFT,
kLPSPI_MasterPcs3 = 3U << LPSPI_MASTER_PCS_SHIFT,
kLPSPI_MasterPcsContinuous = 1U << 20,
kLPSPI_MasterByteSwap = 1U << 22
} |
| Use this enumeration for LPSPI master transfer configFlags. More...
|
|
enum | _lpspi_transfer_config_flag_for_slave {
kLPSPI_SlavePcs0 = 0U << LPSPI_SLAVE_PCS_SHIFT,
kLPSPI_SlavePcs1 = 1U << LPSPI_SLAVE_PCS_SHIFT,
kLPSPI_SlavePcs2 = 2U << LPSPI_SLAVE_PCS_SHIFT,
kLPSPI_SlavePcs3 = 3U << LPSPI_SLAVE_PCS_SHIFT,
kLPSPI_SlaveByteSwap = 1U << 22
} |
| Use this enumeration for LPSPI slave transfer configFlags. More...
|
|
enum | _lpspi_transfer_state {
kLPSPI_Idle = 0x0U,
kLPSPI_Busy,
kLPSPI_Error
} |
| LPSPI transfer state, which is used for LPSPI transactional API state machine. More...
|
|
|
static void | LPSPI_SetMasterSlaveMode (LPSPI_Type *base, lpspi_master_slave_mode_t mode) |
| Configures the LPSPI for either master or slave. More...
|
|
static bool | LPSPI_IsMaster (LPSPI_Type *base) |
| Returns whether the LPSPI module is in master mode. More...
|
|
static void | LPSPI_FlushFifo (LPSPI_Type *base, bool flushTxFifo, bool flushRxFifo) |
| Flushes the LPSPI FIFOs. More...
|
|
static void | LPSPI_SetFifoWatermarks (LPSPI_Type *base, uint32_t txWater, uint32_t rxWater) |
| Sets the transmit and receive FIFO watermark values. More...
|
|
static void | LPSPI_SetAllPcsPolarity (LPSPI_Type *base, uint32_t mask) |
| Configures all LPSPI peripheral chip select polarities simultaneously. More...
|
|
static void | LPSPI_SetFrameSize (LPSPI_Type *base, uint32_t frameSize) |
| Configures the frame size. More...
|
|
uint32_t | LPSPI_MasterSetBaudRate (LPSPI_Type *base, uint32_t baudRate_Bps, uint32_t srcClock_Hz, uint32_t *tcrPrescaleValue) |
| Sets the LPSPI baud rate in bits per second. More...
|
|
void | LPSPI_MasterSetDelayScaler (LPSPI_Type *base, uint32_t scaler, lpspi_delay_type_t whichDelay) |
| Manually configures a specific LPSPI delay parameter (module must be disabled to change the delay values). More...
|
|
uint32_t | LPSPI_MasterSetDelayTimes (LPSPI_Type *base, uint32_t delayTimeInNanoSec, lpspi_delay_type_t whichDelay, uint32_t srcClock_Hz) |
| Calculates the delay based on the desired delay input in nanoseconds (module must be disabled to change the delay values). More...
|
|
static void | LPSPI_WriteData (LPSPI_Type *base, uint32_t data) |
| Writes data into the transmit data buffer. More...
|
|
static uint32_t | LPSPI_ReadData (LPSPI_Type *base) |
| Reads data from the data buffer. More...
|
|
|
void | LPSPI_MasterTransferCreateHandle (LPSPI_Type *base, lpspi_master_handle_t *handle, lpspi_master_transfer_callback_t callback, void *userData) |
| Initializes the LPSPI master handle. More...
|
|
status_t | LPSPI_MasterTransferBlocking (LPSPI_Type *base, lpspi_transfer_t *transfer) |
| LPSPI master transfer data using a polling method. More...
|
|
status_t | LPSPI_MasterTransferNonBlocking (LPSPI_Type *base, lpspi_master_handle_t *handle, lpspi_transfer_t *transfer) |
| LPSPI master transfer data using an interrupt method. More...
|
|
status_t | LPSPI_MasterTransferGetCount (LPSPI_Type *base, lpspi_master_handle_t *handle, size_t *count) |
| Gets the master transfer remaining bytes. More...
|
|
void | LPSPI_MasterTransferAbort (LPSPI_Type *base, lpspi_master_handle_t *handle) |
| LPSPI master abort transfer which uses an interrupt method. More...
|
|
void | LPSPI_MasterTransferHandleIRQ (LPSPI_Type *base, lpspi_master_handle_t *handle) |
| LPSPI Master IRQ handler function. More...
|
|
void | LPSPI_SlaveTransferCreateHandle (LPSPI_Type *base, lpspi_slave_handle_t *handle, lpspi_slave_transfer_callback_t callback, void *userData) |
| Initializes the LPSPI slave handle. More...
|
|
status_t | LPSPI_SlaveTransferNonBlocking (LPSPI_Type *base, lpspi_slave_handle_t *handle, lpspi_transfer_t *transfer) |
| LPSPI slave transfer data using an interrupt method. More...
|
|
status_t | LPSPI_SlaveTransferGetCount (LPSPI_Type *base, lpspi_slave_handle_t *handle, size_t *count) |
| Gets the slave transfer remaining bytes. More...
|
|
void | LPSPI_SlaveTransferAbort (LPSPI_Type *base, lpspi_slave_handle_t *handle) |
| LPSPI slave aborts a transfer which uses an interrupt method. More...
|
|
void | LPSPI_SlaveTransferHandleIRQ (LPSPI_Type *base, lpspi_slave_handle_t *handle) |
| LPSPI Slave IRQ handler function. More...
|
|
struct lpspi_master_config_t |
uint32_t lpspi_master_config_t::baudRate |
uint32_t lpspi_master_config_t::bitsPerFrame |
uint32_t lpspi_master_config_t::pcsToSckDelayInNanoSec |
It sets the boundary value if out of range.
uint32_t lpspi_master_config_t::lastSckToPcsDelayInNanoSec |
It sets the boundary value if out of range.
uint32_t lpspi_master_config_t::betweenTransferDelayInNanoSec |
It sets the boundary value if out of range.
struct lpspi_slave_config_t |
uint32_t lpspi_slave_config_t::bitsPerFrame |
uint8_t* lpspi_transfer_t::txData |
uint8_t* lpspi_transfer_t::rxData |
volatile size_t lpspi_transfer_t::dataSize |
uint32_t lpspi_transfer_t::configFlags |
Set from _lpspi_transfer_config_flag_for_master if the transfer is used for master or _lpspi_transfer_config_flag_for_slave enumeration if the transfer is used for slave.
struct _lpspi_master_handle |
Forward declaration of the _lpspi_master_handle typedefs.
volatile bool lpspi_master_handle_t::isPcsContinuous |
volatile bool lpspi_master_handle_t::writeTcrInIsr |
volatile bool lpspi_master_handle_t::isByteSwap |
volatile uint8_t lpspi_master_handle_t::fifoSize |
volatile uint8_t lpspi_master_handle_t::rxWatermark |
volatile uint8_t lpspi_master_handle_t::bytesEachWrite |
volatile uint8_t lpspi_master_handle_t::bytesEachRead |
uint8_t* volatile lpspi_master_handle_t::txData |
uint8_t* volatile lpspi_master_handle_t::rxData |
volatile size_t lpspi_master_handle_t::txRemainingByteCount |
volatile size_t lpspi_master_handle_t::rxRemainingByteCount |
volatile uint32_t lpspi_master_handle_t::writeRegRemainingTimes |
volatile uint32_t lpspi_master_handle_t::readRegRemainingTimes |
uint32_t lpspi_master_handle_t::txBuffIfNull |
volatile uint8_t lpspi_master_handle_t::state |
void* lpspi_master_handle_t::userData |
struct _lpspi_slave_handle |
Forward declaration of the _lpspi_slave_handle typedefs.
volatile bool lpspi_slave_handle_t::isByteSwap |
volatile uint8_t lpspi_slave_handle_t::fifoSize |
volatile uint8_t lpspi_slave_handle_t::rxWatermark |
volatile uint8_t lpspi_slave_handle_t::bytesEachWrite |
volatile uint8_t lpspi_slave_handle_t::bytesEachRead |
uint8_t* volatile lpspi_slave_handle_t::txData |
uint8_t* volatile lpspi_slave_handle_t::rxData |
volatile size_t lpspi_slave_handle_t::txRemainingByteCount |
volatile size_t lpspi_slave_handle_t::rxRemainingByteCount |
volatile uint32_t lpspi_slave_handle_t::writeRegRemainingTimes |
volatile uint32_t lpspi_slave_handle_t::readRegRemainingTimes |
volatile uint8_t lpspi_slave_handle_t::state |
volatile uint32_t lpspi_slave_handle_t::errorCount |
void* lpspi_slave_handle_t::userData |
#define FSL_LPSPI_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) |
#define LPSPI_DUMMY_DATA (0x00U) |
Dummy data used for tx if there is not txData.
#define LPSPI_MASTER_PCS_SHIFT (4U) |
#define LPSPI_MASTER_PCS_MASK (0xF0U) |
#define LPSPI_SLAVE_PCS_SHIFT (4U) |
#define LPSPI_SLAVE_PCS_MASK (0xF0U) |
typedef void(* lpspi_master_transfer_callback_t)(LPSPI_Type *base, lpspi_master_handle_t *handle, status_t status, void *userData) |
- Parameters
-
base | LPSPI peripheral address. |
handle | Pointer to the handle for the LPSPI master. |
status | Success or error code describing whether the transfer is completed. |
userData | Arbitrary pointer-dataSized value passed from the application. |
typedef void(* lpspi_slave_transfer_callback_t)(LPSPI_Type *base, lpspi_slave_handle_t *handle, status_t status, void *userData) |
- Parameters
-
base | LPSPI peripheral address. |
handle | Pointer to the handle for the LPSPI slave. |
status | Success or error code describing whether the transfer is completed. |
userData | Arbitrary pointer-dataSized value passed from the application. |
Enumerator |
---|
kStatus_LPSPI_Busy |
LPSPI transfer is busy.
|
kStatus_LPSPI_Error |
LPSPI driver error.
|
kStatus_LPSPI_Idle |
LPSPI is idle.
|
kStatus_LPSPI_OutOfRange |
LPSPI transfer out Of range.
|
Enumerator |
---|
kLPSPI_TxDataRequestFlag |
Transmit data flag.
|
kLPSPI_RxDataReadyFlag |
Receive data flag.
|
kLPSPI_WordCompleteFlag |
Word Complete flag.
|
kLPSPI_FrameCompleteFlag |
Frame Complete flag.
|
kLPSPI_TransferCompleteFlag |
Transfer Complete flag.
|
kLPSPI_TransmitErrorFlag |
Transmit Error flag (FIFO underrun)
|
kLPSPI_ReceiveErrorFlag |
Receive Error flag (FIFO overrun)
|
kLPSPI_DataMatchFlag |
Data Match flag.
|
kLPSPI_ModuleBusyFlag |
Module Busy flag.
|
kLPSPI_AllStatusFlag |
Used for clearing all w1c status flags.
|
Enumerator |
---|
kLPSPI_TxInterruptEnable |
Transmit data interrupt enable.
|
kLPSPI_RxInterruptEnable |
Receive data interrupt enable.
|
kLPSPI_WordCompleteInterruptEnable |
Word complete interrupt enable.
|
kLPSPI_FrameCompleteInterruptEnable |
Frame complete interrupt enable.
|
kLPSPI_TransferCompleteInterruptEnable |
Transfer complete interrupt enable.
|
kLPSPI_TransmitErrorInterruptEnable |
Transmit error interrupt enable(FIFO underrun)
|
kLPSPI_ReceiveErrorInterruptEnable |
Receive Error interrupt enable (FIFO overrun)
|
kLPSPI_DataMatchInterruptEnable |
Data Match interrupt enable.
|
kLPSPI_AllInterruptEnable |
All above interrupts enable.
|
Enumerator |
---|
kLPSPI_TxDmaEnable |
Transmit data DMA enable.
|
kLPSPI_RxDmaEnable |
Receive data DMA enable.
|
Enumerator |
---|
kLPSPI_Master |
LPSPI peripheral operates in master mode.
|
kLPSPI_Slave |
LPSPI peripheral operates in slave mode.
|
Enumerator |
---|
kLPSPI_Pcs0 |
PCS[0].
|
kLPSPI_Pcs1 |
PCS[1].
|
kLPSPI_Pcs2 |
PCS[2].
|
kLPSPI_Pcs3 |
PCS[3].
|
Enumerator |
---|
kLPSPI_PcsActiveHigh |
PCS Active High (idles low)
|
kLPSPI_PcsActiveLow |
PCS Active Low (idles high)
|
Enumerator |
---|
kLPSPI_Pcs0ActiveLow |
Pcs0 Active Low (idles high).
|
kLPSPI_Pcs1ActiveLow |
Pcs1 Active Low (idles high).
|
kLPSPI_Pcs2ActiveLow |
Pcs2 Active Low (idles high).
|
kLPSPI_Pcs3ActiveLow |
Pcs3 Active Low (idles high).
|
kLPSPI_PcsAllActiveLow |
Pcs0 to Pcs5 Active Low (idles high).
|
Enumerator |
---|
kLPSPI_ClockPolarityActiveHigh |
CPOL=0.
Active-high LPSPI clock (idles low)
|
kLPSPI_ClockPolarityActiveLow |
CPOL=1.
Active-low LPSPI clock (idles high)
|
Enumerator |
---|
kLPSPI_ClockPhaseFirstEdge |
CPHA=0.
Data is captured on the leading edge of the SCK and changed on the following edge.
|
kLPSPI_ClockPhaseSecondEdge |
CPHA=1.
Data is changed on the leading edge of the SCK and captured on the following edge.
|
Enumerator |
---|
kLPSPI_MsbFirst |
Data transfers start with most significant bit.
|
kLPSPI_LsbFirst |
Data transfers start with least significant bit.
|
Enumerator |
---|
kLPSPI_HostReqExtPin |
Host Request is an ext pin.
|
kLPSPI_HostReqInternalTrigger |
Host Request is an internal trigger.
|
Enumerator |
---|
kLPSI_MatchDisabled |
LPSPI Match Disabled.
|
kLPSI_1stWordEqualsM0orM1 |
LPSPI Match Enabled.
|
kLPSI_AnyWordEqualsM0orM1 |
LPSPI Match Enabled.
|
kLPSI_1stWordEqualsM0and2ndWordEqualsM1 |
LPSPI Match Enabled.
|
kLPSI_AnyWordEqualsM0andNxtWordEqualsM1 |
LPSPI Match Enabled.
|
kLPSI_1stWordAndM1EqualsM0andM1 |
LPSPI Match Enabled.
|
kLPSI_AnyWordAndM1EqualsM0andM1 |
LPSPI Match Enabled.
|
Enumerator |
---|
kLPSPI_SdiInSdoOut |
LPSPI SDI input, SDO output.
|
kLPSPI_SdoInSdoOut |
LPSPI SDO input, SDO output.
|
kLPSPI_SdiInSdiOut |
LPSPI SDI input, SDI output.
|
kLPSPI_SdoInSdiOut |
LPSPI SDO input, SDI output.
|
Enumerator |
---|
kLpspiDataOutRetained |
Data out retains last value when chip select is de-asserted.
|
kLpspiDataOutTristate |
Data out is tristated when chip select is de-asserted.
|
Enumerator |
---|
kLPSPI_SingleBitXfer |
1-bit shift at a time, data out on SDO, in on SDI (normal mode)
|
kLPSPI_TwoBitXfer |
2-bits shift out on SDO/SDI and in on SDO/SDI
|
kLPSPI_FourBitXfer |
4-bits shift out on SDO/SDI/PCS[3:2] and in on SDO/SDI/PCS[3:2]
|
Enumerator |
---|
kLPSPI_PcsToSck |
PCS-to-SCK delay.
|
kLPSPI_LastSckToPcs |
Last SCK edge to PCS delay.
|
kLPSPI_BetweenTransfer |
Delay between transfers.
|
Enumerator |
---|
kLPSPI_MasterPcs0 |
LPSPI master transfer use PCS0 signal.
|
kLPSPI_MasterPcs1 |
LPSPI master transfer use PCS1 signal.
|
kLPSPI_MasterPcs2 |
LPSPI master transfer use PCS2 signal.
|
kLPSPI_MasterPcs3 |
LPSPI master transfer use PCS3 signal.
|
kLPSPI_MasterPcsContinuous |
Is PCS signal continuous.
|
kLPSPI_MasterByteSwap |
Is master swap the byte.
For example, when want to send data 1 2 3 4 5 6 7 8 (suppose you set lpspi_shift_direction_t to MSB).
- If you set bitPerFrame = 8 , no matter the kLPSPI_MasterByteSwapyou flag is used or not, the waveform is 1 2 3 4 5 6 7 8.
- If you set bitPerFrame = 16 : (1) the waveform is 2 1 4 3 6 5 8 7 if you do not use the kLPSPI_MasterByteSwap flag. (2) the waveform is 1 2 3 4 5 6 7 8 if you use the kLPSPI_MasterByteSwap flag.
- If you set bitPerFrame = 32 : (1) the waveform is 4 3 2 1 8 7 6 5 if you do not use the kLPSPI_MasterByteSwap flag. (2) the waveform is 1 2 3 4 5 6 7 8 if you use the kLPSPI_MasterByteSwap flag.
|
Enumerator |
---|
kLPSPI_SlavePcs0 |
LPSPI slave transfer use PCS0 signal.
|
kLPSPI_SlavePcs1 |
LPSPI slave transfer use PCS1 signal.
|
kLPSPI_SlavePcs2 |
LPSPI slave transfer use PCS2 signal.
|
kLPSPI_SlavePcs3 |
LPSPI slave transfer use PCS3 signal.
|
kLPSPI_SlaveByteSwap |
Is slave swap the byte.
For example, when want to send data 1 2 3 4 5 6 7 8 (suppose you set lpspi_shift_direction_t to MSB).
- If you set bitPerFrame = 8 , no matter the kLPSPI_SlaveByteSwap flag is used or not, the waveform is 1 2 3 4 5 6 7 8.
- If you set bitPerFrame = 16 : (1) the waveform is 2 1 4 3 6 5 8 7 if you do not use the kLPSPI_SlaveByteSwap flag. (2) the waveform is 1 2 3 4 5 6 7 8 if you use the kLPSPI_SlaveByteSwap flag.
- If you set bitPerFrame = 32 : (1) the waveform is 4 3 2 1 8 7 6 5 if you do not use the kLPSPI_SlaveByteSwap flag. (2) the waveform is 1 2 3 4 5 6 7 8 if you use the kLPSPI_SlaveByteSwap flag.
|
Enumerator |
---|
kLPSPI_Idle |
Nothing in the transmitter/receiver.
|
kLPSPI_Busy |
Transfer queue is not finished.
|
kLPSPI_Error |
Transfer error.
|
void LPSPI_MasterInit |
( |
LPSPI_Type * |
base, |
|
|
const lpspi_master_config_t * |
masterConfig, |
|
|
uint32_t |
srcClock_Hz |
|
) |
| |
- Parameters
-
base | LPSPI peripheral address. |
masterConfig | Pointer to structure lpspi_master_config_t. |
srcClock_Hz | Module source input clock in Hertz |
void LPSPI_Deinit |
( |
LPSPI_Type * |
base | ) |
|
Call this API to disable the LPSPI clock.
- Parameters
-
base | LPSPI peripheral address. |
void LPSPI_Reset |
( |
LPSPI_Type * |
base | ) |
|
Note that this function sets all registers to reset state. As a result, the LPSPI module can't work after calling this API.
- Parameters
-
base | LPSPI peripheral address. |
static void LPSPI_Enable |
( |
LPSPI_Type * |
base, |
|
|
bool |
enable |
|
) |
| |
|
inlinestatic |
- Parameters
-
base | LPSPI peripheral address. |
enable | Pass true to enable module, false to disable module. |
static uint32_t LPSPI_GetStatusFlags |
( |
LPSPI_Type * |
base | ) |
|
|
inlinestatic |
- Parameters
-
base | LPSPI peripheral address. |
- Returns
- The LPSPI status(in SR register).
static uint32_t LPSPI_GetTxFifoSize |
( |
LPSPI_Type * |
base | ) |
|
|
inlinestatic |
- Parameters
-
base | LPSPI peripheral address. |
- Returns
- The LPSPI Tx FIFO size.
static uint32_t LPSPI_GetRxFifoSize |
( |
LPSPI_Type * |
base | ) |
|
|
inlinestatic |
- Parameters
-
base | LPSPI peripheral address. |
- Returns
- The LPSPI Rx FIFO size.
static uint32_t LPSPI_GetTxFifoCount |
( |
LPSPI_Type * |
base | ) |
|
|
inlinestatic |
- Parameters
-
base | LPSPI peripheral address. |
- Returns
- The number of words in the transmit FIFO.
static uint32_t LPSPI_GetRxFifoCount |
( |
LPSPI_Type * |
base | ) |
|
|
inlinestatic |
- Parameters
-
base | LPSPI peripheral address. |
- Returns
- The number of words in the receive FIFO.
static void LPSPI_ClearStatusFlags |
( |
LPSPI_Type * |
base, |
|
|
uint32_t |
statusFlags |
|
) |
| |
|
inlinestatic |
This function clears the desired status bit by using a write-1-to-clear. The user passes in the base and the desired status flag bit to clear. The list of status flags is defined in the _lpspi_flags. Example usage:
- Parameters
-
base | LPSPI peripheral address. |
statusFlags | The status flag used from type _lpspi_flags. |
< The status flags are cleared by writing 1 (w1c).
static void LPSPI_EnableInterrupts |
( |
LPSPI_Type * |
base, |
|
|
uint32_t |
mask |
|
) |
| |
|
inlinestatic |
This function configures the various interrupt masks of the LPSPI. The parameters are base and an interrupt mask. Note that, for Tx fill and Rx FIFO drain requests, enabling the interrupt request disables the DMA request.
- Parameters
-
base | LPSPI peripheral address. |
mask | The interrupt mask; Use the enum _lpspi_interrupt_enable. |
static void LPSPI_DisableInterrupts |
( |
LPSPI_Type * |
base, |
|
|
uint32_t |
mask |
|
) |
| |
|
inlinestatic |
- Parameters
-
base | LPSPI peripheral address. |
mask | The interrupt mask; Use the enum _lpspi_interrupt_enable. |
static void LPSPI_EnableDMA |
( |
LPSPI_Type * |
base, |
|
|
uint32_t |
mask |
|
) |
| |
|
inlinestatic |
This function configures the Rx and Tx DMA mask of the LPSPI. The parameters are base and a DMA mask.
- Parameters
-
base | LPSPI peripheral address. |
mask | The interrupt mask; Use the enum _lpspi_dma_enable. |
static void LPSPI_DisableDMA |
( |
LPSPI_Type * |
base, |
|
|
uint32_t |
mask |
|
) |
| |
|
inlinestatic |
This function configures the Rx and Tx DMA mask of the LPSPI. The parameters are base and a DMA mask.
- Parameters
-
base | LPSPI peripheral address. |
mask | The interrupt mask; Use the enum _lpspi_dma_enable. |
static uint32_t LPSPI_GetTxRegisterAddress |
( |
LPSPI_Type * |
base | ) |
|
|
inlinestatic |
This function gets the LPSPI Transmit Data Register address because this value is needed for the DMA operation. This function can be used for either master or slave mode.
- Parameters
-
base | LPSPI peripheral address. |
- Returns
- The LPSPI Transmit Data Register address.
static uint32_t LPSPI_GetRxRegisterAddress |
( |
LPSPI_Type * |
base | ) |
|
|
inlinestatic |
This function gets the LPSPI Receive Data Register address because this value is needed for the DMA operation. This function can be used for either master or slave mode.
- Parameters
-
base | LPSPI peripheral address. |
- Returns
- The LPSPI Receive Data Register address.
Note that the CFGR1 should only be written when the LPSPI is disabled (LPSPIx_CR_MEN = 0).
- Parameters
-
base | LPSPI peripheral address. |
mode | Mode setting (master or slave) of type lpspi_master_slave_mode_t. |
static bool LPSPI_IsMaster |
( |
LPSPI_Type * |
base | ) |
|
|
inlinestatic |
- Parameters
-
base | LPSPI peripheral address. |
- Returns
- Returns true if the module is in master mode or false if the module is in slave mode.
static void LPSPI_FlushFifo |
( |
LPSPI_Type * |
base, |
|
|
bool |
flushTxFifo, |
|
|
bool |
flushRxFifo |
|
) |
| |
|
inlinestatic |
- Parameters
-
base | LPSPI peripheral address. |
flushTxFifo | Flushes (true) the Tx FIFO, else do not flush (false) the Tx FIFO. |
flushRxFifo | Flushes (true) the Rx FIFO, else do not flush (false) the Rx FIFO. |
static void LPSPI_SetFifoWatermarks |
( |
LPSPI_Type * |
base, |
|
|
uint32_t |
txWater, |
|
|
uint32_t |
rxWater |
|
) |
| |
|
inlinestatic |
This function allows the user to set the receive and transmit FIFO watermarks. The function does not compare the watermark settings to the FIFO size. The FIFO watermark should not be equal to or greater than the FIFO size. It is up to the higher level driver to make this check.
- Parameters
-
base | LPSPI peripheral address. |
txWater | The TX FIFO watermark value. Writing a value equal or greater than the FIFO size is truncated. |
rxWater | The RX FIFO watermark value. Writing a value equal or greater than the FIFO size is truncated. |
static void LPSPI_SetAllPcsPolarity |
( |
LPSPI_Type * |
base, |
|
|
uint32_t |
mask |
|
) |
| |
|
inlinestatic |
Note that the CFGR1 should only be written when the LPSPI is disabled (LPSPIx_CR_MEN = 0).
This is an example: PCS0 and PCS1 set to active low and other PCSs set to active high. Note that the number of PCS is device-specific.
- Parameters
-
base | LPSPI peripheral address. |
mask | The PCS polarity mask; Use the enum _lpspi_pcs_polarity. |
static void LPSPI_SetFrameSize |
( |
LPSPI_Type * |
base, |
|
|
uint32_t |
frameSize |
|
) |
| |
|
inlinestatic |
The minimum frame size is 8-bits and the maximum frame size is 4096-bits. If the frame size is less than or equal to 32-bits, the word size and frame size are identical. If the frame size is greater than 32-bits, the word size is 32-bits for each word except the last (the last word contains the remainder bits if the frame size is not divisible by 32). The minimum word size is 2-bits. A frame size of 33-bits (or similar) is not supported.
Note 1 : The transmit command register should be initialized before enabling the LPSPI in slave mode, although the command register does not update until after the LPSPI is enabled. After it is enabled, the transmit command register should only be changed if the LPSPI is idle.
Note 2 : The transmit and command FIFO is a combined FIFO that includes both transmit data and command words. That means the TCR register should be written to when the Tx FIFO is not full.
- Parameters
-
base | LPSPI peripheral address. |
frameSize | The frame size in number of bits. |
uint32_t LPSPI_MasterSetBaudRate |
( |
LPSPI_Type * |
base, |
|
|
uint32_t |
baudRate_Bps, |
|
|
uint32_t |
srcClock_Hz, |
|
|
uint32_t * |
tcrPrescaleValue |
|
) |
| |
This function takes in the desired bitsPerSec (baud rate) and calculates the nearest possible baud rate without exceeding the desired baud rate and returns the calculated baud rate in bits-per-second. It requires the caller to provide the frequency of the module source clock (in Hertz). Note that the baud rate does not go into effect until the Transmit Control Register (TCR) is programmed with the prescale value. Hence, this function returns the prescale tcrPrescaleValue parameter for later programming in the TCR. The higher level peripheral driver should alert the user of an out of range baud rate input.
Note that the LPSPI module must first be disabled before configuring this. Note that the LPSPI module must be configured for master mode before configuring this.
- Parameters
-
base | LPSPI peripheral address. |
baudRate_Bps | The desired baud rate in bits per second. |
srcClock_Hz | Module source input clock in Hertz. |
tcrPrescaleValue | The TCR prescale value needed to program the TCR. |
- Returns
- The actual calculated baud rate. This function may also return a "0" if the LPSPI is not configured for master mode or if the LPSPI module is not disabled.
void LPSPI_MasterSetDelayScaler |
( |
LPSPI_Type * |
base, |
|
|
uint32_t |
scaler, |
|
|
lpspi_delay_type_t |
whichDelay |
|
) |
| |
This function configures the following: SCK to PCS delay, or PCS to SCK delay, or The configurations must occur between the transfer delay.
The delay names are available in type lpspi_delay_type_t.
The user passes the desired delay along with the delay value. This allows the user to directly set the delay values if they have pre-calculated them or if they simply wish to manually increment the value.
Note that the LPSPI module must first be disabled before configuring this. Note that the LPSPI module must be configured for master mode before configuring this.
- Parameters
-
base | LPSPI peripheral address. |
scaler | The 8-bit delay value 0x00 to 0xFF (255). |
whichDelay | The desired delay to configure, must be of type lpspi_delay_type_t. |
uint32_t LPSPI_MasterSetDelayTimes |
( |
LPSPI_Type * |
base, |
|
|
uint32_t |
delayTimeInNanoSec, |
|
|
lpspi_delay_type_t |
whichDelay, |
|
|
uint32_t |
srcClock_Hz |
|
) |
| |
This function calculates the values for the following: SCK to PCS delay, or PCS to SCK delay, or The configurations must occur between the transfer delay.
The delay names are available in type lpspi_delay_type_t.
The user passes the desired delay and the desired delay value in nano-seconds. The function calculates the value needed for the desired delay parameter and returns the actual calculated delay because an exact delay match may not be possible. In this case, the closest match is calculated without going below the desired delay value input. It is possible to input a very large delay value that exceeds the capability of the part, in which case the maximum supported delay is returned. It is up to the higher level peripheral driver to alert the user of an out of range delay input.
Note that the LPSPI module must be configured for master mode before configuring this. And note that the delayTime = LPSPI_clockSource / (PRESCALE * Delay_scaler).
- Parameters
-
base | LPSPI peripheral address. |
delayTimeInNanoSec | The desired delay value in nano-seconds. |
whichDelay | The desired delay to configuration, which must be of type lpspi_delay_type_t. |
srcClock_Hz | Module source input clock in Hertz. |
- Returns
- actual Calculated delay value in nano-seconds.
static void LPSPI_WriteData |
( |
LPSPI_Type * |
base, |
|
|
uint32_t |
data |
|
) |
| |
|
inlinestatic |
This function writes data passed in by the user to the Transmit Data Register (TDR). The user can pass up to 32-bits of data to load into the TDR. If the frame size exceeds 32-bits, the user has to manage sending the data one 32-bit word at a time. Any writes to the TDR result in an immediate push to the transmit FIFO. This function can be used for either master or slave modes.
- Parameters
-
base | LPSPI peripheral address. |
data | The data word to be sent. |
static uint32_t LPSPI_ReadData |
( |
LPSPI_Type * |
base | ) |
|
|
inlinestatic |
This function reads the data from the Receive Data Register (RDR). This function can be used for either master or slave mode.
- Parameters
-
base | LPSPI peripheral address. |
- Returns
- The data read from the data buffer.
This function initializes the LPSPI handle, which can be used for other LPSPI transactional APIs. Usually, for a specified LPSPI instance, call this API once to get the initialized handle.
- Parameters
-
base | LPSPI peripheral address. |
handle | LPSPI handle pointer to lpspi_master_handle_t. |
callback | DSPI callback. |
userData | callback function parameter. |
status_t LPSPI_MasterTransferBlocking |
( |
LPSPI_Type * |
base, |
|
|
lpspi_transfer_t * |
transfer |
|
) |
| |
This function transfers data using a polling method. This is a blocking function, which does not return until all transfers have been completed.
Note: The transfer data size should be integer multiples of bytesPerFrame if bytesPerFrame is less than or equal to 4. For bytesPerFrame greater than 4: The transfer data size should be equal to bytesPerFrame if the bytesPerFrame is not integer multiples of 4. Otherwise, the transfer data size can be an integer multiple of bytesPerFrame.
- Parameters
-
- Returns
- status of status_t.
status_t LPSPI_MasterTransferNonBlocking |
( |
LPSPI_Type * |
base, |
|
|
lpspi_master_handle_t * |
handle, |
|
|
lpspi_transfer_t * |
transfer |
|
) |
| |
This function transfers data using an interrupt method. This is a non-blocking function, which returns right away. When all data is transferred, the callback function is called.
Note: The transfer data size should be integer multiples of bytesPerFrame if bytesPerFrame is less than or equal to 4. For bytesPerFrame greater than 4: The transfer data size should be equal to bytesPerFrame if the bytesPerFrame is not integer multiples of 4. Otherwise, the transfer data size can be an integer multiple of bytesPerFrame.
- Parameters
-
base | LPSPI peripheral address. |
handle | pointer to lpspi_master_handle_t structure which stores the transfer state. |
transfer | pointer to lpspi_transfer_t structure. |
- Returns
- status of status_t.
status_t LPSPI_MasterTransferGetCount |
( |
LPSPI_Type * |
base, |
|
|
lpspi_master_handle_t * |
handle, |
|
|
size_t * |
count |
|
) |
| |
This function gets the master transfer remaining bytes.
- Parameters
-
base | LPSPI peripheral address. |
handle | pointer to lpspi_master_handle_t structure which stores the transfer state. |
count | Number of bytes transferred so far by the non-blocking transaction. |
- Returns
- status of status_t.
void LPSPI_MasterTransferAbort |
( |
LPSPI_Type * |
base, |
|
|
lpspi_master_handle_t * |
handle |
|
) |
| |
This function aborts a transfer which uses an interrupt method.
- Parameters
-
base | LPSPI peripheral address. |
handle | pointer to lpspi_master_handle_t structure which stores the transfer state. |
void LPSPI_MasterTransferHandleIRQ |
( |
LPSPI_Type * |
base, |
|
|
lpspi_master_handle_t * |
handle |
|
) |
| |
This function processes the LPSPI transmit and receive IRQ.
- Parameters
-
base | LPSPI peripheral address. |
handle | pointer to lpspi_master_handle_t structure which stores the transfer state. |
This function initializes the LPSPI handle, which can be used for other LPSPI transactional APIs. Usually, for a specified LPSPI instance, call this API once to get the initialized handle.
- Parameters
-
base | LPSPI peripheral address. |
handle | LPSPI handle pointer to lpspi_slave_handle_t. |
callback | DSPI callback. |
userData | callback function parameter. |
status_t LPSPI_SlaveTransferNonBlocking |
( |
LPSPI_Type * |
base, |
|
|
lpspi_slave_handle_t * |
handle, |
|
|
lpspi_transfer_t * |
transfer |
|
) |
| |
This function transfer data using an interrupt method. This is a non-blocking function, which returns right away. When all data is transferred, the callback function is called.
Note: The transfer data size should be integer multiples of bytesPerFrame if bytesPerFrame is less than or equal to 4. For bytesPerFrame greater than 4: The transfer data size should be equal to bytesPerFrame if the bytesPerFrame is not an integer multiple of 4. Otherwise, the transfer data size can be an integer multiple of bytesPerFrame.
- Parameters
-
base | LPSPI peripheral address. |
handle | pointer to lpspi_slave_handle_t structure which stores the transfer state. |
transfer | pointer to lpspi_transfer_t structure. |
- Returns
- status of status_t.
status_t LPSPI_SlaveTransferGetCount |
( |
LPSPI_Type * |
base, |
|
|
lpspi_slave_handle_t * |
handle, |
|
|
size_t * |
count |
|
) |
| |
This function gets the slave transfer remaining bytes.
- Parameters
-
base | LPSPI peripheral address. |
handle | pointer to lpspi_slave_handle_t structure which stores the transfer state. |
count | Number of bytes transferred so far by the non-blocking transaction. |
- Returns
- status of status_t.
void LPSPI_SlaveTransferAbort |
( |
LPSPI_Type * |
base, |
|
|
lpspi_slave_handle_t * |
handle |
|
) |
| |
This function aborts a transfer which uses an interrupt method.
- Parameters
-
base | LPSPI peripheral address. |
handle | pointer to lpspi_slave_handle_t structure which stores the transfer state. |
void LPSPI_SlaveTransferHandleIRQ |
( |
LPSPI_Type * |
base, |
|
|
lpspi_slave_handle_t * |
handle |
|
) |
| |
This function processes the LPSPI transmit and receives an IRQ.
- Parameters
-
base | LPSPI peripheral address. |
handle | pointer to lpspi_slave_handle_t structure which stores the transfer state. |