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.

Tiva bootloader StartApplication() malfunction

I am on a EK-TM4C129XL board. I put together a slightly customized Ethernet boot loader. I am able to load an application into flash and branch to it from bl_startup_ccs.c via the CheckForceUpdate() test. However, I need to branch to the application from the boot loader main code. So in my bl_enet.c I tell the linker

extern void StartApplication(void);

And call StartApplication() at some point. From what I understand, this is the proper way to use it, but the application doesn't properly launch.

Any ideas?

  • Hello Dennis,

    Is bl_enet.c a custom file as it is not there in existing examples. The closed boot loader file is bl_emac.c

    Anyways, to branch to the Application code it seems correct. Do make sure that the Vector Table is remapped to the Application base offset so that Interrupt vectors get correctly processed,

    Regards

    Amit

  • Sorry, I meant bl_emac.c.


    The problem persists. As far as I can tell, I am doing everything exactly as on the Stellaris, where it works. But on the Tiva when I branch to my app from the boot loader after there is a valid application image at the target address, the app doesn't run properly. From what I understand, remapping of the vector table should be done by the code in StartApplication() in bl_startup_ccs.s.

    One issue I do have unresolved is that I am getting the linker warnings described here: http://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/t/353383.aspx

  • I was able to solve the problem. The problem was lack of robust processor initialization in the application. The boot loader enabled some interrupts (Ethernet), and when it jumped to the application these settings remained. However, some of the interrupts (Ethernet) had no handlers in the application, so an unhandled interrupt error occurred.
    There was more to "making sure the interrupt vectors get correctly processed" than I first thought.