We have been heavily using the DSP of an OMAP L138 in our projects, and have recently started to use the ARM core more, and are running into some strange problems.
We are using SYSBIOS 6.33.03.33 on both the ARM and the DSP.
The DSP sets a value in a memory location that the ARM is checking, and when the ARM detects that value is 1, it first resets the value to 0, and performs some actions.
I am finding that the ARM has to set the value to 0 at least 4 times before it actually "takes." I am working around it, but it is quite perplexing.
The MMU and caching are enabled, but I have configured the MMU to have the shared memory location non-cacheable and non-bufferable, like it was a peripheral. I verified in the generated configPkg/package/cfg/st_pe9.c file that the memory location really was being configured the way I thought, i.e., I see the line,
mmuModule->tableBuf[3199] = 0xc7f00c12;
and the memory location lies in the 1M 0xc7f00000 segment.
The DSP side does a wb_inv after setting the shared location, and the DSP never sets it again, yet again, the ARM has to set the location to 0 several times. Persistence pays off, and it gets set after a while, but that doesn't seem to be the way computers should act. I shouldn't have to nag them to set a memory location.
Anyone have any ideas of how to proceed in figuring this out?