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.

How can I perform a software reset using DSP/BIOS?

Other Parts Discussed in Thread: TMS320C6452

Hi,

 

I am using the TMS320C6452 DSP and would like to know what is the correct way of performing a software reset from DSP/BIOS? Is there some software library function I can call?

 

Thanks for your help.

 

PS. I've used the 'nasty' way of jumping my program counter to the boot-up address (*((void(*)(void))0x00800000))() but in most cases this causes my program to hang...

  • The simplest software reset would be to make a function call to c_int00(). The assembly label _c_int00 is the entry point to the executable code, after which all initialization is performed, so the C equivalent is without the leading "_". It might need to be declared "extern void c_int00(void);" but it will always be available as a global address.

  •  

    I have a secondary bootloader (AIS) located in flash 0xA0000000 which is loaded by the internal boot ROM located at 0x00800000. My secondary bootloader gives me the option to select from multiple applications located in flash which one to execute (via the UART), the selected application is then copied into RAM and I start executing from the entry point. You're c_int00 solution works great in the sence that it restarts the current selected application being executed whenever I sent a command via the UART... But, I would also like to be able to reset the DSP so that it start 'a fresh' and loads my secondary bootloader, which will then provide me with the option to select another application ...any ideas on how to get the DSP to reset (via software) and start execution from the boot ROM at 0x00800000?

     

    Thanks a lot for the help so far.

  • You are looking for more than a soft reset, since you want to reload the software. But you may be trying to do less than a warm reset since you want to avoid toggling the RESETn pin in hardware.

    The ROM Bootloader is usually entered after a cold or warm reset, so it expects many registers to be in default states and for any boot pins to have been read and copied to appropriate registers. When you try to do this later, there could be differences in the system state, different from the reset state, that causes the lock-up you experienced.

    If you believe that everything is fine with your hardware settings and all you want to do is start over with your secondary bootloader, then you will need to duplicate the RBL by reading the AIS image and doing the appropriate copies to registers and memory. There could be functions in the RBL that would be useful, but I was not able to find the source in a quick search. But the description in the "Using the TMS320C6452 Bootloader" app note spraaw2 is pretty clear.

    If you write an AIS loader for this purpose, please upload it and share it with the Community for the benefit of others who may want this same functionality. It sounds like a very useful routine to have. Or if someone can find the source for the RBL, you might be able to call it from there.

  • Just a quick note on the RBL source, in general the source is not given out and is considered TI proprietary code, so there is not much we can do through the forum here. Your best bet for access to this sort of thing would be through your local TI contact if it is possible at all.

  • The best option seem to be to stop 'kicking' my external watchdog as soon as I receive a reset command via the UART. Thanks for all the info.