/* SPI configuration: TLE7242 gate driver monitoring */
#include "Spi.h"
/* --- Channels --- */
const Spi_ChannelConfigType Spi_ChannelConfig[] = {
{
.SpiChannelId = SPI_CH_TLE7242_CMD,
.SpiDataWidth = 8u, /* 8-bit command */
.SpiTransferStart = SPI_MSB_FIRST,
.SpiDefaultData = 0x00u, /* sent during read phase */
.SpiEbMaxLength = 1u,
},
{
.SpiChannelId = SPI_CH_TLE7242_STATUS,
.SpiDataWidth = 16u, /* 16-bit status response */
.SpiTransferStart = SPI_MSB_FIRST,
.SpiDefaultData = 0x0000u,
.SpiEbMaxLength = 1u,
},
};
/* --- Jobs --- */
const Spi_JobConfigType Spi_JobConfig[] = {
{
.SpiJobId = SPI_JOB_TLE7242_READ,
.SpiHwUnit = SPI_HW_UNIT_QSPI0,
.SpiBaudrate = 2000000u, /* 2 MHz */
.SpiCsIdentifier = SPI_CS_TLE7242,
.SpiCsPolarity = SPI_CS_ACTIVE_LOW,
.SpiDataShiftEdge = SPI_DATA_SHIFT_LEADING, /* CPOL=0 CPHA=1 */
.SpiChannelList = {SPI_CH_TLE7242_CMD, SPI_CH_TLE7242_STATUS},
.SpiJobEndNotification = Spi_TLE7242_ReadComplete,
},
};
/* --- Sequences --- */
const Spi_SequenceConfigType Spi_SequenceConfig[] = {
{
.SpiSequenceId = SPI_SEQ_TLE7242_MONITOR,
.SpiJobList = {SPI_JOB_TLE7242_READ},
.SpiSeqEndNotification = NULL_PTR,
.SpiInterruptibleSequence = FALSE, /* not interruptible */
},
};
/* Usage: trigger async SPI transfer */
void TLE7242_Monitor_10ms(void)
{
uint8 cmd = 0x00u; /* read status command */
Spi_SetupEB(SPI_CH_TLE7242_CMD, &cmd, NULL_PTR, 1u);
Spi_AsyncTransmit(SPI_SEQ_TLE7242_MONITOR);
/* Callback Spi_TLE7242_ReadComplete() fires when done */
}