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.

[参考译文] CCS/MSP430FR2433:如何修复 MSP430 ISR 位置

Guru**** 2551590 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/903560/ccs-msp430fr2433-how-to-fix-msp430-isr-location

器件型号:MSP430FR2433

工具/软件:Code Composer Studio

您好!

为了避免在 BSL 闪存过程中提供错误密码时进行批量擦除、我计划禁用此功能并为每次 BSL 固件升级使用永久密码。 为此、我需要修复 ISR 地址位置、其值构成 BSL 密码的数据。 到目前为止、修复 ISR 地址是唯一可用的选项、因为由于尺寸限制、无法使用定制 BSL。

那么、我们如何修复 ISR 地址位置呢?

我们将在 MSP FW 中使用以下 ISR。

端口1和2、ADC、计时器1、2、3和 i2c

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

    您好!  

    要修复 ISR 函数地址、请在 #pragma vector = xxxx_vector 下插入以下指令

    • #pragma CODE_SECTION (ISR_symbol、"section name ")

    然后在链接器文件中定义段名、并将段分配给具有您定义的地址的专用存储器区域。 请确保长度足以填充 ISR。  

    谢谢、  

    Lixin

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

    您好!  

    有关更详细的演示、我可以更详细地描述此解决方案。  

    两个步骤:
    1) 1)在正式的链接器文件中、在内存{...}中定义新的 MyFRAM 和 MySection。 以下是一个示例:  

       FRAM:origin = 0x8000、length = 0x1000        //注意:由于 MyFRAM 占用 FRAM 空间、FRAM 长度将被更改。
       MyFRAM:origin = 0x9002,length = 0x6F70     //注:新定义的段长度用于 ISR,该长度需要涵盖 ISR 函数内容

    2) 2)在链接器文件中、定义新的.MySection 并将其分配给新的 MyFRAM 存储器空间。  

      MySection:{}>MyFRAM

    3) 3)在用户代码中的中断函数之前添加"#pragma CODE_SECTION (ISR 函数名称、"new_section")。 下面是一个将 TB1_B0中断 ISR 函数分配给链接器文件中定义的.MySection 的示例。

      #pragma vector = Timer1_B0_vector
      #pragma CODE_SECTION (Timer1_B0_ISR、".MySection");
      _interrupt void Timer1_B0_ISR (void)
      {
       …μ A
      }

    通过这3个步骤、您可以在0xFF80~0xFFFD 中为中断矢量表分配固定地址、以便 BSL 密码固定。  

    谢谢、  

    Lixin  

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

    您好!  

    在为 ISR 定义存储器部分时、上述方法需要计算 ISR 大小。 对于存储器大小较小的 MCU、编译器代码大小优化也会产生副作用。 因此、我们有另一种方法可以为您的可选选择修复 BSL 密码:  

    它使用 设置寄存器 SYSRIVECT=1的功能来将中断表映射到 RAM 的顶部区域。  

    1) 1)在链接器文件中、定义新的存储器以将中断矢量表映射到除复位矢量之外的这个新 FRAM 区域。 代码构建后、中断矢量将位于该新区域中。

    2) 2)在用户代码中、将中断表复制到 RAM 顶部区域、并设置寄存器 SYSRIVECT=1。  

    3) 3)更改 0xFF80 ~ 0xFFFD 的内容以分配 BSL 密码(由于存在新定义的中断矢量、代码构建不会更改此区域)。 由于复位矢量0xFFFE 将在用户代码结构稳定后被固定、BSL 密码将被固定。  

    没有有关如何更改链接器文件的详细说明。 我们将在未来实现这一目标。  

    谢谢、  

    Lixin  

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

    您好、Lixin、

    感谢您的更新。 我有几个疑问:

    1) 1)如您所述。

    [引用用户="Lixin Chen1"]

    1) 1)在正式的链接器文件中、在内存{...}中定义新的 MyFRAM 和 MySection。 以下是一个示例:  

       FRAM:origin = 0x8000、length = 0x1000        //注意:由于 MyFRAM 占用 FRAM 空间、FRAM 长度将被更改。
       MyFRAM:origin = 0x9002,length = 0x6F70     //注:新定义的段长度用于 ISR,该长度需要涵盖 ISR 函数内容

    [/报价]

    我们将如何找到中断处理程序函数大小。 由于存在多个 ISR、并且我的 MSP FRAM 剩余空间小于1KB、因此在为每个 ISR 定义存储器时、我无法给出随机长度。

    2) 2)另外、 在您建议用于修复 MSP BSL PW 的第二种方法中:

    [引用用户="Lixin Chen1"]

    2) 2)在用户代码中、将中断表复制到 RAM 顶部区域、并设置寄存器 SYSRIVECT=1。  

    [/报价]

    如何将 ISR 地址复制到 RAM 顶部区域?

    您能否给出一个代码示例、此示例显示 RAM 存储器的所有地址映射到每个 ISR 地址。 我已经尝试按照0xFF88到0xFFFF 中使用的相同顺序复制 ISR 地址并将其放置在 RAM 区域的末尾(<= 0x2FFF (0x2000到0x2FFF 的4KB RAM)。 但由于某种原因、我的固件会挂起。

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

    您好!  

    1) 1)要查找 ISR 占用的存储器大小、您可以检查 CCS 中生成的编译输出.map 文件或.txt 文件。 如果您的代码已完成、则应最终确定代码大小、以便您可以更改链接器文件的起始地址和新 MyFRAM 存储器空间的长度。  

    2) 2)对于第二种方法、代码构建更灵活、因为它将中断矢量表重新映射到 RAM 中、因此无需计算 ISR 大小。 它只需更改链接器文件中的 RAM 大小(以复制中断矢量表)和 FRAM 大小(用于新的中断矢量表)。 我们有随附的代码示例。 还有用户指南文档可指导您如何使用参考代码。 在 Utilities 文件夹中、有一些小工具(读取 Utilities\Linker_Gen\Readme.txt)可为您生成链接器文件。

    如果您通过 BSL 从 PC 或其他主 MCU 下载代码、您能告诉我吗?

    谢谢、  

    Lixin  

    e2e.ti.com/.../BSL_5F00_FixPassword_5F00_UART_5F00_DemoSoftware_5F00_.zip

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

    您好、Lixin、

    我们将通过 BSL UART 从主机处理器刷写 MSP。 我们已经集成并测试了处理器端 BSL 闪存应用。

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

    您好、Rejath、  

    演示软件是否能帮助您解决问题?  

    谢谢、  

    Lixin   

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

    您好、Lixin、

    是的、这很有帮助、我 通过参考您的演示来研究永久 BSL PW 实现。 感谢您的支持。

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

    您好、Varkey、  

    很高兴听到好消息。  

    如果我的回答帮助您解决问题、您能否点击"这解决了我的问题"按钮?  

    谢谢、  

    Lixin