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:在引导加载程序跳转后、将应用程序放置在自定义地址 (0x12000) 时、不会触发 CAN 中断

Guru**** 2538930 points
Other Parts Discussed in Thread: MSPM0G3507

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1567069/mspm0g3507-can-interrupt-not-trigger-when-application-is-placed-at-custom-address-0x12000-on-after-bootloader-jump

器件型号:MSPM0G3507


工具/软件:

您好 TI 专家、

我将在上实现自定义引导加载程序。
以下是我的设置:

  • 总闪存:128KB

  • 引导加载程序大小:~72KB(在默认值 0x00000 处构建)

  • 应用程序是为启动而构建的 0x12000 (使用链接器脚本修改)

  • 引导加载程序.bin通过 CAN 接收此信息并将其写入 0x12000

  • 编程后、引导加载程序使用 0x12000 处的矢量表跳转到应用程序(通过设置矢量表中的 MSP 和 PC)

观察到的行为:

  • 应用程序正确启动(LED 闪烁、UART 日志工作正常)

  • 不过、 CAN 接收 ISR 从不触发

  • CAN 工具上也未显示总线错误

  • 如果我在 0x00000(默认启动)处构建并运行完全相同的应用程序、则可以完美地实现中断

我已验证的事项:

  • 引导加载程序正确复制并跳转到应用程序

  • 从矢量表中正确加载 MSP 和 PC

  • 全局启用中断(即使在 0x12000 构建中、UART 和计时器中断也可以正常工作)

  • 在两种情况下、MCAN 外设的配置方式相同


问题:

为什么会这样 不触发 MCAN 中断 从中运行应用程序时所用的脚本 0x12000 在跳转引导加载程序后、即使在 0x00000 处编译时使用相同的代码也是如此?

有任何问题吗 额外的矢量表重定位 NVIC 配置 在 MSPM0 器件上从非默认闪存地址运行代码时需要?

如有任何指导、我们将不胜感激!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尝试将中断处理程序设置为您的应用地址?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为什么要这样做 不触发 MCAN 中断 从中运行应用程序时所用的脚本 0x12000 在跳转引导加载程序后、即使在 0x00000?
    编译时使用了相同的代码也是如此

    需要将 M0 CPU 的中断处理程序起始地址设置为 0x12000 或设置的地址。

    是否执行此步骤?

    是否存在 额外的矢量表重定位 NVIC 配置 从 MSPM0 器件上的非默认闪存地址运行代码时需要?

    是、默认值应从 0x0 开始。

    如果移动 IRQHandler、则需要添加偏移。

    您可以参考以下示例: c:\ti\mspm0_sdk_2_06_00_05\examples\nortos\LP_MSPM0G3507\boot_manager\boot_application