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!