I am running BIOS 5.41.10.36 and Linux on a OMAPL128. The program is based on the HelloDSP DSPLink example. The ARM code runs and loads the DSP code using the DSPLink library. This has been running successfully for months.
Suddenly, while testing a new SATA drive, without code changes, the DSP code is hanging.
After some debugging, I found that the startup code is causing a reset. The DSP code initializes the McBSP1 during DEV_init() , and as part of that calls PMI_setModuleState() which is located at 0x118140E0 (IRAM). This code is assigned to the .pmonchip section by the linker. Looking at the memory at this location shows that it contains a repeating pattern of 0x00FFFFFF. In fact all of the .pmonchip section contains nothing but 0x00FFFFFF. Attempting to execute this code causes the DSP to reset. So, it never reaches main().
I opened the .out file and can see definitions for all the other memory sections (.bss, .far, .text , etc) but there is no definition for .pmonchip. This is true for the HelloDSP.out in the original example as well. There are trampoline functions that direct the DSP to the appropriate location in L2 Ram but the code is not there.
How does the pmonchip section get loaded? Should is load when the rest of the code get loaded? Or does the BIOS startup code load it at run time?
Why would this problem occur in working code?
Mary