Hello,
I am having a problem with the ARM-DSP communication using the Msgcom API with a 66K2H14 device. I have crafted a small example to show the problem.
The communication is bidirectional with two queues, one created by the ARM in which the DSP writes and the ARM reads, and another created by the DSP in which the ARM writes and the DSP reads. The code for the communication part is mostly borrowed from the Msgcom examples.
The program I have written uses just one DSP core. The ARM program loads the DSP executable using the MPM and sends 10 short messages to the DSP, one per second. The DSP side is basically an infinite loop which reads a message, performs some work (just an addition in this example) and returns another message with the result.
The problem is that the DSP gets only one message, and after that it gets stuck in the second call to Msgcom_getMessage() and I can't see any reason why. It seems that the problem must be related with some kind of race condition, because the behaviour is not consistent. Sometimes the first call to Msgcom_getMessage() on the DSP side never returns, usually it does one round of the loop and gets stuck at the second call.
The versions of the software I am using are:
- CCS 6.0.1 on Ubuntu 12.04 LTS
- CGTools 7.4.13
- XDCtools 3.25.6.96
- MCSDK 3.1.1.4
- IPC 3.22.2.11 (also tried 3.0.4.29)
- PDK 3.0.3.15 (also tried 3.1.1.4 but the code won't even compile cleanly)
- SYS/BIOS 6.37.3.30
- SYSLIB 3.0.0.04
I am using an EVMK2H board with a Keystone II 66K2H14 chip.
I have prepared two archive files with the example I am using. This one has the code for both the ARM and DSP side:
And this one contains only the exported CCS project for the DSP side:
I have searched for similar issues on the E2E fora but have not found anything useful to solve the problem. Any clue would be very appreciated. Thanks in advance,
Pedro Lobo.