Hi there,
I am working on a programm for the ARM side of the OMAP-l138.
My code lies in the SPI flash. On startup, the TI bootloader copies it to shared RAM (omitting the first 16 kB) and jumps to the entry point (_c_int00). So far so good.
From time to time my program needs to reboot, that is, to load the whole code from SPI flash to shared RAM and start at _c_int00 again, but without corrupting certain variables in shared RAM. Since I couldn't find a clue how to do this in the documentation I went assembler and set the PC to the start of the TI bootloader code (0xFFFD0000). That worked, too, and the TI bootloader reloaded my code as expected.
Recently, I had to move my code from shared RAM to the DDR2. Both .cmd file and AISgen settings were quickly adjusted, and the program worked. However, and now we finally reach my problem, the reboot described above doesn't work anymore. The TI bootloader starts, but at address 0xFFFD3010 to 0xFFFD3020 it runs in an infinite loop.
What the bootloader does in the loop is polling the (cleared) SYSCFG1->VTPIO_CTL->READY bit. This had been set when the bootloader startet, but somewhere it must have been changed (I didn't step through the whole code, so I can't say where or why).
My question: What must I do to use a reboot as described above again? I don't insist on the 'set PC to 0xFFFD0000' method, if there is an other reasonable way to do this I would be grateful to hear about it.