Hello,
I would like to know how can I configure the DMA with SPI using Tresos for S32K344.
SW. Version: 4.0.0 HF02_D2407.
I'm trying to configure but I cannot see signal on bus looking the logic analyzer.
Should I configure the channel as IB or EB?
When I remove the DMA, it works properly.
Piece of code that I try to send message:
spi_err_t Spi2_Transfer(const uint8_t *data_out, uint8_t *data_in, uint16_t len){
spi_err_t spi_status = SPI_ERR_SUCCESS;
Spi_StatusType spiHwStatus = Spi_GetHWUnitStatus(Lpspi_Ip_PhyUnitConfig_SpiPhyUnit_2_VS_0.Instance);
if(spiHwStatus != SPI_IDLE)
{
spi_status = SPI_ERR_FAILURE;
}
if(spi_status == SPI_ERR_SUCCESS)
{
if (Spi_WriteIB(SpiConf_SpiChannel_SpiChannel_2, data_out) != E_OK)
{
spi_status = SPI_ERR_FAILURE;
}
if (Spi_AsyncTransmit(SpiConf_SpiSequence_SpiSequence_2) != E_OK)
{
spi_status = SPI_ERR_FAILURE;
}
if (Spi_ReadIB(SpiConf_SpiChannel_SpiChannel_2, data_in) != E_OK)
{
spi_status = SPI_ERR_FAILURE;
}
}
return spi_status;
}
When I remove the DMA and use the channel as EB, this is the code:
spi_err_t Spi2_Transfer(const uint8_t *data_out, uint8_t *data_in, uint16_t len){
spi_err_t spi_status = SPI_ERR_SUCCESS;
Spi_StatusType Spi_HwStatus = Spi_GetHWUnitStatus(Lpspi_Ip_PhyUnitConfig_SpiPhyUnit_2_VS_0.Instance);
if(Spi_HwStatus != SPI_IDLE)
{
spi_status = SPI_ERR_FAILURE;
}
if(spi_status == SPI_ERR_SUCCESS)
{
if(Spi_SetupEB(SpiConf_SpiChannel_SpiChannel_2, data_out, data_in, len) == E_OK)
{
if(Spi_AsyncTransmit(SpiConf_SpiSequence_SpiSequence_2) != E_OK)
{
spi_status = SPI_ERR_FAILURE;
}
}
}
return spi_status;
}
Note: With DMA, I can see that the interrupt is working with breakpoints, Dma0_Ch4_IRQHandler, Dma0_Ch3_IRQHandler, Lpspi_Ip_LPSPI_2_IrqTxDmaHandler and Lpspi_Ip_LPSPI_2_IrqRxDmaHandler callbacks, but I can't see signal on the bus as I can see without DMA configuration.
Thanks,
MVR