This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hi all,
I am working on a custom board with a TMS320C6748, CCSv5 and C-Compiler 7.3.4. Following the Application Reports SPRAAT2E and SPRA999A1 I wrote a secondary bootloader that is loaded from a flash on EMIFA CS2 to the lower half of L2RAM (0x11800000 - 0x1181FFFF). This secondary bootloader copies an "user-program" from a USB-Port ( via a Cyclone IV-FPGA on EMIFA CS4) to the upper half of L2RAM (0x11820000 - 0x1183FFFF) and branches to its _c_int00 at 0x11820000. The linker-files are adapted, so that the memory sections don't overlap. That all works, the user-program gets executed correctly.
When the user-program gets a magic command, the DSP has to branch back into the secondary bootloader (_c_int00 at 0x11800020) so that I can boot another application without a reset. The branch and the execution of the secondary bootloader work fine, but the bootloader is no more able to write to the upper half of L2RAM and to put a new application over there. Is there any limitation, that a memory-area that is filled with code can't be overwritten anymore? Or is the startup-code of the application protecting the application itself? Amazingly, some small areas seem to get overwritten correctly, what I found out when I replaced my second application with zeros.
I hope I wrote all needed information, if not please tell me, this is the first time that I'm writing here. I attached a picture to visualize what I'm trying to do.
Cheers,
Chris
Hi Chris,
Please try to disable all your interrupt and set your stack pointer back to its reset value. This may, or may not, help depending on how you've implemented your application code. You may also want to post this approach in the BIOS forums as they will be able to tell you exactly what you need to reset the whole BIOS SW stack when you jump back to your secondary bootloader which I am assuming is a non-BIOS application.
Regards,
Rahul
Thanks Rahul,
I forgot to mention that the bootloader actually is a non-BIOS application. But the application (in my opinion) also is a non-BIOS application. At least I wrote it in the same "style" (also a plain C-project in CCS) like the bootloader as they both communicate with the same host program on the connected PC. So is there a BIOS SW stack at all? The interrupts all get disabled by "IntReset()" before the DSP jumps in either direction. I'll try to follow your advice to reset the stack pointer.
Another approach might be to reset the core (?): http://e2e.ti.com/support/dsp/omap_applications_processors/f/42/t/246543.aspx
But this is still missing an answer.
Regards,
Chris
Hi all,
I found a solution via a software-reset. That answers my purpose.
http://e2e.ti.com/support/dsp/tms320c6000_high_performance_dsps/f/115/t/114802.aspx
Regards,
Chris