I am attempting to write a secondary and tertiary bootloader for a custom board with the TMS320C6713B. I am not using the DSP/BIOS. I am using CCSv4.
The secondary bootloader is stored in the first 1kB of FLASH, and is loaded on power reset by the C6713B's primary bootloader routine. The secondary bootloader is written in assembly language, and loads the tertiary bootloader from FLASH to RAM. This seems to work correctly.
The tertiary bootloader provides a serial menu of options, including the ability to download hex files and modify FLASH. It should also be capable of loading and launching application code, which is compiled separately. The downloading and storing of hex files works properly.
The problem I keep running into is whenever I compile projects separately, I cannot jump between them. For instance, I have created a secondary and tertiary bootloader. The secondary bootloader is loaded to IRAM without a problem, and I can use the secondary bootloader to load the tertiary bootloader to IRAM (I have confirmed this using the debugger). However, when I attempt to use a function pointer to branch to the "_c_int00" entry point of the tertiary bootloader, the tertiary bootloader does not execute (I am sure of this because I have programmed a pattern to appear on some on-board LEDs).
If I compile the secondary and tertiary bootloaders together, I can branch to the desired location without a problem. However, I run into the same issue when I try to branch to separately compiled application code.
Is this a caching issue? Is there a way to disable the L1P and L1D on the C6713B? I have looked in the Cache User's Guide (spru656a.pdf) and didn't see anything about disabling the caches.