22 #if (defined (SPI_OVER_LPSPI))
27 #if (defined (SPI_OVER_FLEXIO))
32 #if (defined (SPI_OVER_DSPI))
33 #include "dspi_driver.h"
38 #if (defined(SPI_OVER_LPSPI))
42 static spi_instance_t LpspiStateInstanceMapping[NO_OF_LPSPI_INSTS_FOR_SPI];
44 static bool LpspiStateIsAllocated[NO_OF_LPSPI_INSTS_FOR_SPI];
48 #if (defined(SPI_OVER_FLEXIO))
51 flexio_device_state_t FlexioState;
53 static spi_instance_t FlexioSpiStateInstanceMapping[NO_OF_FLEXIO_INSTS_FOR_SPI];
55 static bool FlexioSpiStateIsAllocated[NO_OF_FLEXIO_INSTS_FOR_SPI];
59 #if (defined(SPI_OVER_DSPI))
61 dspi_state_t dspiState[NO_OF_DSPI_INSTS_FOR_SPI];
63 static spi_instance_t DspiStateInstanceMapping[NO_OF_DSPI_INSTS_FOR_SPI];
65 static bool DspiStateIsAllocated[NO_OF_DSPI_INSTS_FOR_SPI];
78 for (i = 0;i < numberOfinstances;i++)
80 if (isAllocated[i] ==
false)
82 instanceMapping[i] = instance;
83 isAllocated[i] =
true;
100 for (i = 0;i < numberOfinstances;i++)
102 if (instanceMapping[i] == instance)
104 isAllocated[i] =
false;
110 #if (defined(SPI_OVER_FLEXIO))
120 for (i = 0;i<NO_OF_FLEXIO_INSTS_FOR_SPI;i++)
122 if (FlexioSpiStateInstanceMapping[i] == instance)
143 #if (defined (SPI_OVER_LPSPI))
162 index =
SpiAllocateState(LpspiStateIsAllocated, LpspiStateInstanceMapping, instance, NO_OF_LPSPI_INSTS_FOR_SPI);
168 #if (defined (SPI_OVER_FLEXIO))
198 index =
SpiAllocateState(FlexioSpiStateIsAllocated, FlexioSpiStateInstanceMapping, instance, NO_OF_FLEXIO_INSTS_FOR_SPI);
205 #if (defined (SPI_OVER_DSPI))
206 dspi_master_config_t dspiConfig;
207 dspiConfig.bitsPerSec = config->
baudRate;
209 dspiConfig.clkPhase = (dspi_clock_phase_t)config->
clockPhase;
210 dspiConfig.clkPolarity = (dspi_polarity_t)config->
clockPolarity;
211 dspiConfig.isClkContinuous =
false;
212 dspiConfig.lsbFirst = config->
bitOrder;
213 dspiConfig.transferType = (dspi_transfer_type_t)config->
transferType;
216 dspiConfig.whichPCS = config->
ssPin;
217 dspiConfig.pcsPolarity = (dspi_polarity_t)config->
ssPolarity;
218 dspiConfig.callback = config->
callback;
221 index =
SpiAllocateState(DspiStateIsAllocated, DspiStateInstanceMapping, instance, NO_OF_DSPI_INSTS_FOR_SPI);
222 status = DSPI_MasterInit((dspi_instance_t)instance, (dspi_state_t*)&dspiState[index] ,&dspiConfig);
238 #if defined(SPI_OVER_LPSPI)
246 #if defined(SPI_OVER_FLEXIO)
254 #if (defined(SPI_OVER_DSPI))
255 status = DSPI_MasterTransfer((dspi_instance_t)instance, txBuffer, rxBuffer, numberOfFrames);
271 #if defined(SPI_OVER_LPSPI)
279 #if defined(SPI_OVER_FLEXIO)
287 #if (defined(SPI_OVER_DSPI))
288 status = DSPI_MasterTransferBlocking((dspi_instance_t)instance, txBuffer, rxBuffer, numberOfFrames, timeout);
305 #if (defined (SPI_OVER_LPSPI))
321 index =
SpiAllocateState(LpspiStateIsAllocated, LpspiStateInstanceMapping, instance, NO_OF_LPSPI_INSTS_FOR_SPI);
327 #if (defined (SPI_OVER_FLEXIO))
356 index =
SpiAllocateState(FlexioSpiStateIsAllocated, FlexioSpiStateInstanceMapping, instance, NO_OF_FLEXIO_INSTS_FOR_SPI);
363 #if (defined (SPI_OVER_DSPI))
364 dspi_slave_config_t dspiConfig;
366 dspiConfig.clkPhase = (dspi_clock_phase_t)config->
clockPhase;
367 dspiConfig.clkPolarity = (dspi_polarity_t)config->
clockPolarity;
368 dspiConfig.transferType = (dspi_transfer_type_t)config->
transferType;
371 dspiConfig.pcsPolarity = (dspi_polarity_t)config->
ssPolarity;
372 dspiConfig.callback = config->
callback;
375 index =
SpiAllocateState(DspiStateIsAllocated, DspiStateInstanceMapping, instance, NO_OF_DSPI_INSTS_FOR_SPI);
376 status = DSPI_SlaveInit((dspi_instance_t)instance, (dspi_state_t*)&dspiState[index] ,&dspiConfig);
392 #if defined(SPI_OVER_LPSPI)
400 #if defined(SPI_OVER_FLEXIO)
408 #if (defined(SPI_OVER_DSPI))
409 status = DSPI_SlaveTransfer((dspi_instance_t)instance, txBuffer, rxBuffer, numberOfFrames);
425 #if defined(SPI_OVER_LPSPI)
433 #if defined(SPI_OVER_FLEXIO)
441 #if (defined(SPI_OVER_DSPI))
442 status = DSPI_SlaveTransferBlocking((dspi_instance_t)instance, txBuffer, rxBuffer, numberOfFrames, timeout);
504 #if defined(SPI_OVER_LPSPI)
510 SpiFreeState(LpspiStateIsAllocated, LpspiStateInstanceMapping, instance, NO_OF_LPSPI_INSTS_FOR_SPI);
516 #if defined(SPI_OVER_FLEXIO)
522 SpiFreeState(FlexioSpiStateIsAllocated, FlexioSpiStateInstanceMapping, instance, NO_OF_FLEXIO_INSTS_FOR_SPI);
528 #if (defined(SPI_OVER_DSPI))
529 status = DSPI_Deinit((dspi_instance_t)instance);
532 SpiFreeState(DspiStateIsAllocated, DspiStateInstanceMapping, instance, NO_OF_DSPI_INSTS_FOR_SPI);
549 #if defined(SPI_OVER_LPSPI)
557 #if defined(SPI_OVER_FLEXIO)
565 #if (defined(SPI_OVER_DSPI))
566 status = DSPI_Deinit((dspi_instance_t)instance);
583 #if defined(SPI_OVER_LPSPI)
591 #if defined(SPI_OVER_FLEXIO)
599 #if (defined(SPI_OVER_DSPI))
600 status = DSPI_UpdateCS((dspi_instance_t)instance, ssPin);
617 #if defined(SPI_OVER_LPSPI)
625 #if defined(SPI_OVER_FLEXIO)
633 #if (defined(SPI_OVER_DSPI))
spi_clock_phase_t clockPhase
Runtime state structure for the LPSPI master driver.
Data structure containing information about a device on the SPI bus.
flexio_spi_transfer_size_t transferSize
spi_polarity_t clockPolarity
lpspi_signal_polarity_t pcsPolarity
status_t FLEXIO_SPI_DRV_MasterTransferBlocking(flexio_spi_master_state_t *master, const uint8_t *txData, uint8_t *rxData, uint32_t dataSize, uint32_t timeout)
Perform a blocking SPI master transaction.
#define FLEXIO_SPI_HIGH_INDEX
status_t LPSPI_DRV_MasterDeinit(uint32_t instance)
Shuts down a LPSPI instance.
lpspi_transfer_type transferType
lpspi_signal_polarity_t pcsPolarity
status_t FLEXIO_SPI_DRV_MasterTransfer(flexio_spi_master_state_t *master, const uint8_t *txData, uint8_t *rxData, uint32_t dataSize)
Perform a non-blocking SPI master transaction.
flexio_spi_transfer_bit_order_t
Order in which the data bits are transferred Implements : flexio_spi_transfer_bit_order_t_Class.
flexio_spi_transfer_bit_order_t bitOrder
status_t LPSPI_DRV_MasterInit(uint32_t instance, lpspi_state_t *lpspiState, const lpspi_master_config_t *spiConfig)
Initializes a LPSPI instance for interrupt driven master mode operation.
status_t SPI_MasterTransferBlocking(spi_instance_t instance, void *txBuffer, void *rxBuffer, uint16_t numberOfFrames, uint16_t timeout)
Initializes a blocking master transfer.
status_t LPSPI_DRV_MasterTransfer(uint32_t instance, const uint8_t *sendBuffer, uint8_t *receiveBuffer, uint16_t transferByteCount)
Performs an interrupt driven non-blocking SPI master mode transfer.
lpspi_which_pcs_t whichPcs
Defines the extension structure for the SPI over FLEXIO.
status_t LPSPI_DRV_SlaveTransfer(uint32_t instance, const uint8_t *sendBuffer, uint8_t *receiveBuffer, uint16_t transferByteCount)
Starts the transfer data on LPSPI bus using an interrupt and a non-blocking call. ...
status_t SPI_GetDefaultMasterConfig(spi_master_t *config)
Gets the default configuration structure for master.
lpspi_clock_phase_t clkPhase
status_t SPI_SlaveTransfer(spi_instance_t instance, void *txBuffer, void *rxBuffer, uint16_t numberOfFrames)
Initializes a non-blocking slave transfer.
Slave configuration structure.
static status_t FLEXIO_SPI_DRV_SlaveTransfer(flexio_spi_slave_state_t *slave, const uint8_t *txData, uint8_t *rxData, uint32_t dataSize)
Perform a non-blocking SPI slave transaction.
status_t SPI_MasterInit(spi_instance_t instance, spi_master_t *config)
Initializes the SPI module in master mode.
flexio_driver_type_t driverType
status_t LPSPI_DRV_SlaveTransferBlocking(uint32_t instance, const uint8_t *sendBuffer, uint8_t *receiveBuffer, uint16_t transferByteCount, uint32_t timeout)
Transfers data on LPSPI bus using interrupt and a blocking call.
static void SpiFreeState(bool *isAllocated, spi_instance_t *instanceMapping, spi_instance_t instance, uint8_t numberOfinstances)
status_t SPI_SlaveTransferBlocking(spi_instance_t instance, void *txBuffer, void *rxBuffer, uint16_t numberOfFrames, uint16_t timeout)
Initializes a blocking slave transfer.
lpspi_clock_phase_t clkPhase
status_t CLOCK_SYS_GetFreq(clock_names_t clockName, uint32_t *frequency)
Gets the clock frequency for a specific clock name.
spi_clock_phase_t clockPhase
status_t LPSPI_DRV_MasterTransferBlocking(uint32_t instance, const uint8_t *sendBuffer, uint8_t *receiveBuffer, uint16_t transferByteCount, uint32_t timeout)
Performs an interrupt driven blocking SPI master mode transfer.
lpspi_sck_polarity_t clkPolarity
flexio_spi_transfer_size_t transferSize
#define FLEXIO_SPI_LOW_INDEX
status_t
Status return codes. Common error codes will be a unified enumeration (C enum) that will contain all ...
clock_names_t
Clock names.
spi_transfer_bit_order_t bitOrder
lpspi_signal_polarity_t
LPSPI Signal (PCS and Host Request) Polarity configuration. Implements : lpspi_signal_polarity_t_Clas...
Master configuration structure.
lpspi_transfer_type
Type of LPSPI transfer (based on interrupts or DMA). Implements : lpspi_transfer_type_Class.
static status_t FLEXIO_SPI_DRV_SlaveTransferBlocking(flexio_spi_slave_state_t *slave, const uint8_t *txData, uint8_t *rxData, uint32_t dataSize, uint32_t timeout)
Perform a blocking SPI slave transaction.
status_t LPSPI_DRV_SlaveInit(uint32_t instance, lpspi_state_t *lpspiState, const lpspi_slave_config_t *slaveConfig)
Initializes a LPSPI instance for a slave mode operation, using interrupt mechanism.
lpspi_which_pcs_t
LPSPI Peripheral Chip Select (PCS) configuration (which PCS to configure). Implements : lpspi_which_p...
spi_polarity_t clockPolarity
Defines the configuration structure for SPI slave.
status_t FLEXIO_SPI_DRV_SlaveInit(uint32_t instance, const flexio_spi_slave_user_config_t *userConfigPtr, flexio_spi_slave_state_t *slave)
Initialize the FLEXIO_SPI slave mode driver.
User configuration structure for the SPI slave driver. Implements : lpspi_slave_config_t_Class.
lpspi_clock_phase_t
LPSPI clock phase configuration. Implements : lpspi_clock_phase_t_Class.
flexio_spi_transfer_bit_order_t bitOrder
spi_transfer_type_t transferType
spi_transfer_bit_order_t bitOrder
Defines the configuration structure for SPI master.
lpspi_sck_polarity_t
LPSPI Clock Signal (SCK) Polarity configuration. Implements : lpspi_sck_polarity_t_Class.
flexio_spi_transfer_size_t
Size of transferred data in bytes Implements : flexio_spi_transfer_size_t_Class.
status_t SPI_SetSS(spi_instance_t instance, uint8_t ssPin)
Update the SS.
status_t SPI_MasterDeinit(spi_instance_t instance)
De-initializes the spi master module.
spi_polarity_t ssPolarity
lpspi_which_pcs_t whichPcs
static status_t FLEXIO_SPI_DRV_SlaveDeinit(flexio_spi_slave_state_t *slave)
De-initialize the FLEXIO_SPI slave mode driver.
status_t SPI_GetDefaultSlaveConfig(spi_slave_t *config)
Gets the default configuration structure for slave.
status_t FLEXIO_SPI_DRV_MasterInit(uint32_t instance, const flexio_spi_master_user_config_t *userConfigPtr, flexio_spi_master_state_t *master)
Initialize the FLEXIO_SPI master mode driver.
status_t FLEXIO_SPI_DRV_MasterDeinit(flexio_spi_master_state_t *master)
De-initialize the FLEXIO_SPI master mode driver.
lpspi_transfer_type transferType
spi_polarity_t ssPolarity
status_t SPI_SlaveInit(spi_instance_t instance, spi_slave_t *config)
Initializes the SPI module in slave mode.
status_t LPSPI_DRV_SlaveDeinit(uint32_t instance)
Shuts down an LPSPI instance interrupt mechanism.
lpspi_sck_polarity_t clkPolarity
Master internal context structure.
flexio_driver_type_t driverType
status_t SPI_GetStatus(spi_instance_t instance)
Gets the status of the last transfer.
status_t SPI_MasterTransfer(spi_instance_t instance, void *txBuffer, void *rxBuffer, uint16_t numberOfFrames)
Initializes a non-blocking master transfer.
status_t SPI_SlaveDeinit(spi_instance_t instance)
De-initializes the spi slave module.
status_t FLEXIO_DRV_InitDevice(uint32_t instance, flexio_device_state_t *deviceState)
Initializes the FlexIO device.
static uint8_t SpiAllocateState(bool *isAllocated, spi_instance_t *instanceMapping, spi_instance_t instance, uint8_t numberOfinstances)
spi_transfer_type_t transferType