I am porting the StarterWare mcaspPlayBk loopback application to a SYS/BIOS application.
I have modified the original StarterWare loopback code to work for my application, on a custom board, which uses the AINTC for interrupts. This modified StarterWare loopback program works with no problems. I have moved that working code to a SYS/BIOS application to use HWI instead of AINTC to handle the interrupts for EDMA and McASP.
I am experiencing the following issue:
When the SYS/BIOS project runs, EDMA interrupts are being generated as expected. At the program start, the receive buffers are updated with values from the TDM bus, copied to the transmit buffers, and outputted, as expected. However, after only a few cycles, the receive buffers stop getting updated with new values from the McASP input. The program continues to run without error, and EDMA interrupts continue. But since the rx data isn't getting updated, the program keeps memcpy() the same data over and over to the transmit buffers and the McASP output just transmits the same data over and over. So McASP is still up, but receive buffers not updating. If I disconnect the TDM bus while running, the EDMA interrupts stop and reconnecting the TDM bus resumes the interrupts, as expected so it doesn't appear to be an issue with the EDMA interrupts. When the error occurs, there are no errors in RSTAT or XSTAT, but McASP receive buffers are stalled.
Another interesting thing is if I change the application to memcpy() a sine wave instead of data from the receiver, everything seems to work ok. I get the sine wave transmitted on McASP output, and receiver data is also updated continuously, as expected.
It seems there is a conflict or timing issue in moving to HWI instead of AINTC. What could cause this type of behaviour? Could you recommend some things I could look at to resolve this?
Using CCSv5.5, SYS/BIOS v6.35.4.50 and XDCtools v3.25.3.72.
Thank you,
Jason