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
.binvia 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!