Other Parts Discussed in Thread: OMAPL138
Hi all,
I am using the following system:
- OMAPL138
- bios_5_41_03_17 DSPBIOS
- pspdrivers_01_30_01 driver
- edma3_lld_01_11_00_03 driver
I've got my SPI driver running in polling mode, but to improve system performance I've decided to use it in DMAINTERRUPT mode. My initialization code is following the code provided in pspdrivers_01_30_01\packages\ti\pspiom\examples\evmOMAPL138\spi\edma\src\ folder and to initialize SPI driver in EDMA mode. So I am calling edma3init() function from the library provided in edma3_lld_01_11_00_03\packages\ti\sdo\edma3\drv\lib\Debug\edma3_drv_bios_c674.lib. The rest of the code doing GIO_create and GIO_write is the same as in the code already working fine in polling mode.
I can see that actual SPI transfer is performed (SPI lines are toggling as expected) but then GIO_write is blocked forever. Globally interrupts are enabled and DSPBIOS is working (tasks are switching as expected). I also see that Spi_localCallbackTransmit is executed twice (EDMA SPI TX transfer completion interrupt service routine), but Spi_localCallbackReceive (EDMA SPI RX transfer completion interrupt service routine) is never called. SPI driver code waits for both of these being called in order to finish off SPI transfer servicing and unblock GIO_write() function. Can anyone tell me what may be the reason why Spi_localCallbackReceive is never called?
Thanks,
Adam Turowski