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.

[参考译文] MSP430G2955:自定义引导加载程序中断矢量表数据被覆盖

Guru**** 2582405 points
Other Parts Discussed in Thread: MSP430G2955, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/859625/msp430g2955-custom-bootloader-interrupt-vector-table-data-getting-overwritten

器件型号:MSP430G2955
主题中讨论的其他器件: UNIFLASH

您好!

我正在为 MSP430G2955开发定制的引导加载程序代码。

写入源代码后、我观察到 INT00位置要复位的数据(0xFFE0到0xFFFF)与我提供的值不同。 闪存部分包含正确的数据。 我对整个源文件使用了类似的写语句。

我想知道我们是否需要在引导加载时写入这些位置。 如果是、他们是否需要任何其他陈述。

我使用文档 SLAA600D 及其 链接中提供的源代码作为参考、找不到以上任何内容。

谢谢

Srikrishna

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

    您好 Srikrishna、

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

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

    您好、Ling、

    感谢您的回答。 但该文件不能帮助解决我的问题。 请让我更具体一点。

    我使用 Motorola M-2 S 类型记录作为源文件。 以下十六进制代码是 LED 闪烁的代码。

    我忽略 S0记录、因为它不提供目标地址。

    S00600004844521B

    我要将下面的 S2记录写入上述目标地址。 这里没有问题。
    S2220031002183B240805A2001C2432900D2D32A00D2E22900B140102700008193000004
    S22200311EF8279183000081930000F327FA3F31400021B0124E310C43B01200311C4380
    S21A00313CB012483132D01000FD3F03430343FF3F03431C4330410F

    下面的 S2记录将上述地址设置为0xFFDE 至0xFFFF、根据文件是中断矢量表。 稍后使用 Uniflash - Memory 检查时、发现此数据损坏。 此外、当这些地址被写入时、我认为程序会陷入某种不确定状态、并且不会按预期继续。 当忽略这些记录时、引导加载函数会成功执行、但应用程序的行为不符合预期。 (在这种情况下、LED 是稳定的、而不是闪烁、这可能是引脚处于不确定状态的情况)。
    S20600FFDEFFFF1E
    S20600FFE04031A9
    S20600FFE24031A7
    S20600FFE44031A5
    S20600FFE64031A3
    S20600FFE84031A1
    S20600FFEA40319F
    S20600FFEC40319D
    S20600FFEE40319B
    S20600FFF0403199
    S20600FFF2403197
    S20600FFF4403195
    S20600FFF6403193
    S20600FFF8403191
    S20600FFFA40318F
    S20600FFFC40318D
    S20600FFFE2C319F

    我将使用 S8记录下的 TH 中提供的地址调用代码跳转函数。
    S80400312C9E

    我需要知道错误在哪里。

     

    谢谢、此致

    Srikrishna

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

    你(们)好  

    首先、 在 SLAA600D 演示中、主机端只能提供从.txt 文件转换的.c 文件。 .txt 文件可由 CCS 或 IAR 生成。 您使用哪种软件?

    对于目标器件中的中断表、您可以看到我们在引导端项目中名为"TI_MSPBoot_VecRed_G2553_Boot.c"的文件中定义了向量表中的值。 矢量表中的值(来自0xFFE0- 0xFFFF)应为  

    @FFe0
    C2 FB FF 3F C6 FB CA FB FF 3F CE FB D2 FB D6 FB
    DA FB DE FB E2 FB E6 FB EA FB EE FB F2 FB B6 FF

    因为 app_proxy_vector 数组的地址在 cmd 文件中定义为0xFBC2

    因此、中断将跳转到 APP_PROXY 矢量数组、该值在应用程序的代码中定义、如下所示

    const uint16_t ProxyVectorTable[]=

    0x4030、(uint16_t)虚拟 ISR、// app_proxy_vector (0) TRAPINT
    0x4030、(uint16_t) P1_ISR、// app_proxy_vector (1) Port1
    0x4030、(uint16_t)虚拟 ISR、// app_proxy_vector (2) port2
    0x4030、(uint16_t)虚拟 ISR、// app_proxy_vector (3) ADC10
    0x4030、(uint16_t)虚拟 ISR、// app_proxy_vector (4) USCIAB0TX
    0x4030、(uint16_t)虚拟 ISR、// app_proxy_vector (5) USCIAB0RX
    0x4030、(uint16_t)虚拟 ISR、// app_proxy_vector (6) TIMER0_A1
    0x4030、(uint16_t) Timer_A、// app_proxy_vector (7) TIMER0_A0
    0x4030、(uint16_t)虚拟 ISR、// app_proxy_vector (8) WDT
    0x4030、(uint16_t)虚拟 ISR、// app_proxy_vector (9) COMPARATORA
    0x4030、(uint16_t)虚拟 ISR、// app_proxy_vector (10) Timer1_A1
    0x4030、(uint16_t)虚拟 ISR、// app_proxy_vector (11) Timer1_A0
    0x4030、(uint16_t)虚拟 ISR、// app_proxy_vector (12) NMI
    };

    此致

    Gary

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

    您好!

    我使用的是 CCS 版本8.3。

    那么、是否有必要通过在.cmd 文件中定义应用程序代码和引导加载程序代码的单独中断表?

    谢谢

    Srikrishna

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

    你(们)好  

    是的、对于引导代码、只需使用复位矢量0xFFFE、应用程序就会使用另一个中断矢量。 我们通过.cmd 文件来组织它。

    此致

    Gary

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

    您好、Gary、

    谢谢、这解决了我的问题。

    但是、如果需要在引导加载程序中使用任何 ISR、我们是否启用相应的矢量? 它们是否可以重复用于应用程序?

    谢谢

    Srikrishna

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

    你好 ,Srikrishna

    我没有尝试过这个。 但这似乎是可行的。  

    我们有一些可供引导代码和应用程序代码使用的共享函数。与文件 TI_MSPBoot_CI_PHYDL_I2C_Slave_x2xx.c 中的代码类似  

    const uint16_t Boot2App_Vector_Table[]=

    (uint16_t)&TI_MSPBoot_CI_PHYDL_Init、/*! 初始化例程*/
    (uint16_t)&TI_MSPBoot_CI_PHYDL_Poll、/*! 轮询例程*/
    };

    引导代码和应用程序代码可以使用函数"TI_MSPBoot_CI_PHYDL_Init"和"TI_MSPBoot_CI_PHYDL_Poll"。

    您可以在我们的演示代码中看到 App2的应用程序代码已使用此功能。

    此致

    Gary

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

    谢谢