主题中讨论的其他器件: UNIFLASH
您好!
我正在为 MSP430G2955开发定制的引导加载程序代码。
写入源代码后、我观察到 INT00位置要复位的数据(0xFFE0到0xFFFF)与我提供的值不同。 闪存部分包含正确的数据。 我对整个源文件使用了类似的写语句。
我想知道我们是否需要在引导加载时写入这些位置。 如果是、他们是否需要任何其他陈述。
我使用文档 SLAA600D 及其 链接中提供的源代码作为参考、找不到以上任何内容。
谢谢
Srikrishna
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开发定制的引导加载程序代码。
写入源代码后、我观察到 INT00位置要复位的数据(0xFFE0到0xFFFF)与我提供的值不同。 闪存部分包含正确的数据。 我对整个源文件使用了类似的写语句。
我想知道我们是否需要在引导加载时写入这些位置。 如果是、他们是否需要任何其他陈述。
我使用文档 SLAA600D 及其 链接中提供的源代码作为参考、找不到以上任何内容。
谢谢
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
你好 ,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