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.

MSPM0G3507: CAN Interrupt not trigger when application is placed at custom address (0x12000) on after bootloader jump

Part Number: MSPM0G3507

Tool/software:

Hello TI Experts,

I am implementing a custom bootloader on the.
Here’s my setup:

  • Total Flash: 128 KB

  • Bootloader size: ~72 KB (built at default 0x00000)

  • Application is built to start at 0x12000 (using linker script modification)

  • Bootloader receives this .bin via CAN and writes it to 0x12000

  • After programming, bootloader jumps to the application using the vector table at 0x12000 (by setting MSP and PC from the vector table)

Observed behaviour:

  • The application starts correctly (LED blinking and UART logs work fine)

  • However, CAN reception ISR never triggers

  • No bus errors are shown on the CAN tool either

  • If I build and run the exact same application at 0x00000 (default start), CAN interrupts work perfectly

Things I verified:

  • Bootloader correctly copies and jumps to the application

  • MSP and PC are correctly loaded from the vector table

  • Interrupts are globally enabled (UART and Timer interrupts work fine even from 0x12000 build)

  • MCAN peripheral is configured the same way in both cases


Question:

Why would MCAN interrupts not trigger when running the application from 0x12000 after a bootloader jump, even though the same code works when built at 0x00000?

Is there any additional vector table relocation or NVIC configuration required when running code from a non-default flash address on MSPM0 devices?

Any guidance would be appreciated!

  • Try to set the interrupt handler to your app address?

  • Why would MCAN interrupts not trigger when running the application from 0x12000 after a bootloader jump, even though the same code works when built at 0x00000?

    You need to set M0 CPU's interrupt handler start address to 0x12000 or the address that you set.

    Do you do this step?

    Is there any additional vector table relocation or NVIC configuration required when running code from a non-default flash address on MSPM0 devices?

    Yes, default should start from 0x0.

    If you move your IRQHandler, you need to add a offset.

    You can refer this example: C:\ti\mspm0_sdk_2_06_00_05\examples\nortos\LP_MSPM0G3507\boot_manager\boot_application