AnsweredAssumed Answered

S32K144 SPI half-duplex DMA

Question asked by Pontus Hedman on Oct 23, 2017
Latest reply on Nov 23, 2017 by Changfu Zhao

I have modified the SDK sample "lpspi_transfer_s32k144" from S32SDK_S32K14x_EAR_0.8.4 to use DMA instead of interrupts. This involved adding a EDMA_DRV_Init() to the mainline and using components inspector to add two new DMA channels: #1 for LPSPI0_TX and #2 for LPSPI0_RX. These are used by the master.

 

This works, but eventually I just want to send from master to slave -- my eventual slave device will have no data to send back. So I don't need or want that LPSPI0_RX DMA channel.

 

However, if I set the master's RX to "No DMA" in component inspector, the master stops sending on SPI completely. No activity shows up on the scope on any of the SPI lines.

 

Similarly if I put the RX DMA back but change the line:

 

LPSPI_DRV_MasterTransferBlocking(SEND, &masterDataSend, &masterDataReceive, BUFFER_SIZE, TIMEOUT);

 

...to have NULL in place of &masterDataReceive indicating I expect to receive nothing for the master, again the SPI just stops working.  Nothing in the driver returns any errors; the SPI lines simply do nothing.

 

The same code works fine I switch back to using interrupts on master.

 

What's the trick to getting DMA just on SPI master TX to behave?

Outcomes