Lpspi_Ip_AsyncTransmit() call gets executed once with expected SPI waveforms.
Other calls are rejected because drives stays in LPSPI_IP_BUSY state.
I have a workaround to call Lpspi_Ip_Cancel() when BUSY state is reported:
if (Lpspi_Ip_GetStatus() == LPSPI_IP_BUSY) Lpspi_Ip_Cancel();
Lpspi_Ip_AsyncTransmit();
This works but I won't want to keep using that cancel call.
What can keep driver in BUSY state even after all needed data are properly Tx/Rx by SPI?
I use RTD 4.0.0, SPI with Tx/Rx DMA channels. DMA does not have global/transfer/scatter configs, also no interrupt callback.
Solved! Go to Solution.
I ended up with writing my own function using synchronous transmit as example. It was possible to use fifo and have function that does not use interrupts(well, almost) and dma and returns immediately. That works similar to Lpspi_Ip_AsyncTransmit for my project.
I ended up with writing my own function using synchronous transmit as example. It was possible to use fifo and have function that does not use interrupts(well, almost) and dma and returns immediately. That works similar to Lpspi_Ip_AsyncTransmit for my project.
Hello Daniel,
We have the same issue For S32k44, configured LPSPI using EB tresos and tried to transmit data using Lpspi_Ip_AsyncTransmit()
call gets executed once Other calls are rejected because the drives stays in LPSPI_IP_BUSY state .
Can please share Example project of S32K344(with EB tresos configuration) for Lpspi_Ip_AsyncTransmit(); using Dma ?
Please create a new thread,
Thank you,
Daniel
Hi @sstelmak,
I understand the driver never becomes IDLE after the transfer.
It would help if you could share the project so that I can test it.
Did you enable DMA interrups in the IntCtrl_Ip driver?
Regards,
Daniel
Hello,
I can't post entire project per company policies, it would be ok to email it directly.
Attached is the mex and few relevant c files.
DMA or SPI interrupts are not configured. This is because I have restriction for micro throughput and looking for possibility to skip unnecessary calls.
Hi @sstelmak,
The driver requires the DMA interrupts.
Have a look at the Lpspi_Flexio_Ip_Transfer_S32K344 example, where the FlexIO_SPI driver uses DMA.
BR, Daniel
Hello,
I added DMA ISRs (I use same DMA channels as the example) to IntCtrl_Ip
Nothing changed after that, and I didn't see that any of those interrupts were called.
Try enabling Global config in the in the DMA driver.
Please share the whole project (or a test project that can demonstrate the issue,) so that I can test it.
Thank you,
BR, Daniel