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.

Custom Bootloader Can't Start Application.

Other Parts Discussed in Thread: TMS320F28035

Hello, 

I'm working on an TMS320F28035. I have Programmed a custom Bootloader at the address 0x3f0000 with a code start instruction (at 0x3f7ff6) pointing on it.

I load a .bin in Flash memory (address 0x3E8000) using the Flash_API provided with Control Suite(Erase then Program). After that I try to Start it by jumping at the fisrt address:

locEntryAddr = MEMORY_ADDRESS;
((void(*)(void)) locEntryAddr )();

MEMORY_ADDRESS = 0x 3e8000;

At this point my code stop (with debugger) in "interrupt void ILLEGAL_ISR(void)".

I'd like to know what I could be doing wrong.

Maybe I'm using a wrong jump function. Or my Flash memory is not initialized the right way.

Thank you

  • Hello!

    Did you read this manual already 5165.TI_Running_from_Flash_spra958l.pdf?

    Regards,

    Igor 

  • Well I read it and it mainly explain how to do a Custom Bootloader in Flash.

    I already have have a working bootlaoder, with the codestart in an .asm file at 0x3f7ff6, and it's working fine My problem is that I can(t jump to my application.

    I defined:

    FLASH : origin = 0x3F0000, length = 0x008000 - 80 /* on-chip FLASH for program*/

    FLASH_BIN   : origin = 0x3E8000, length = 0x0008000

    FLASH_BIN is where my binary is going to be. I must be missing some initializations I think.

    All I want is being able to jump somewhere is my application code from my Bootloader, but whatever address I try, I always get  "interrupt void ILLEGAL_ISR(void)"

  • Hi Simon!

    Could you please attach the linker command file in full?

    Regards,

    Igor

  • I resolved my problem!! (mostly)

    I tried to call my jump from somewhere else and it worked.

    UNSIGNED32 locEntryAddr = (0x3E8952);
    (*((void(*)(void))locEntryAddr))();

    I was apparently calling it from an interruption and it wasn't working.

    I have another problem now, it seems my vector table of interruptions is not working with the application loaded(I got an interrupt void  TINT0_ISR(void)). I must (again) be doing something wrong. I think I will open a new post on the subject.

    Anyway, thanks for helping!