工具/软件:
大家好、 我正在针对 28388D 开发引导加载程序工程。 操作方式与此 CPU1 是主器件、它会引导 CPU2 和 CM。CPU1 从通信总线接收数据包并通过 IPC 中断发送到 CPU2/CM。 CM 将二进制文件写入自己的闪存。 当更新序列完成时、CM 和 CPU1 握手、CM 尝试跳转到新的应用程序代码启动。
CM 引导加载程序应用程序驻留在 CMBANK 扇区 0 上。 它由 CPU1 引导 DEVICE_BOOTCM ( BOOT_BOOT_BOOT_TO_FLASH_SECTOR0)。 在运行并获得二进制文件后,它会更新 CMBANK 扇区 4 的闪存部分。(我已经通过 CCS debug 中的内存保存函数检查了, Amy 应用程序的二进制文件和引导加载程序更新了一个是相同的。 我还检查了 ECC 是正确的并且没有引起错误)。 更新完成后、CM 尝试 使用以下代码跳接以启动新的应用程序、但会进入故障状态。
#pragma CODE_SECTION (JUMP_TO_APP、“.TI.ramfunc")“)
typedef void (* AppEntryFunc_t)(void);
静态内联 void JUMP_TO_APP (void)
{
__disable_irq();
1) 将 Re 点矢量表映射到应用的表
SCB_VTOR = 0x00210000;
uint32_t appStack =*((volatile uint32_t *)(0x00210000+ 0U));
uint32_t appEntry =*((volatile uint32_t *)(0x00210000+ 4U));//例如 0x00210BB1
__set_MSP (appStack);
AppEntryFunc_t AppStart =(AppEntryFunc_t )( appEntry );
AppStart();
}
根据我们的朋友聊天这个布局是正确的:
位置的矢量表 0x00210000 VTOR 设置为 0x00210000
.text活在后面 0x00210800 μ s
重置处理程序、位置为 0x00210C60 _c_int00_noinit_noargs在处输入 0x00210BB1 (Thumb 位= 1)
这一问题的原因是什么?我该如何解决?
我认为 TI 资源中缺少有关此过渡的示例和文档。
此致、