Part Number:AM2634
PBL是存储在外部Flash中的,由芯片的ROMboot加载并启动(加载到0x70002000-0x7004FFFF),
PBL起来后通过Can下载SBL到RAM中(0x70050000-0x7009FFFF),然后从PBL跳转到SBL中,怎么跳转?SBL的中断需要怎么设置?需要TI的技术支持提供帮助,18613053797
Gary Lu:
*** XU 说:怎么跳转?
您需要自己编写汇编,执行正确的跳转指令。示例如下:
; 假设SBL的起始地址为0x70050000 LDR R0, =0x70050000 ; 将SBL的起始地址加载到寄存器R0中 BX R0 ; 跳转到SBL的起始地址汇编加载SBL的起始地址到寄存器R0,通过BX指令实现无条件跳转到该地址
,
*** XU:
可以远程看下吗?中断这块也不知道怎么弄?
,
Gary Lu:
*** XU 说:中断这块也不知道怎么弄?
您可以把代码发上来
,
*** XU:
如下操作,PBL跳转之前
/* Wait jump sbl Command. */
Can_TransData(WaitEraseCommand);
/* Close all Peripherals. */
Mcu_DeInit();
SetActivedSblFlag(SBL_ACTIVATE_FLAG);
/* Jump to sbl. */
Wdg_Disable();
MemoryCopy((uint8*)(R5F_VECS_ADDR), (uint8*)(MSRAM_VECS_ADDR), VECS_LENGTH);
// JUMPTO(JUMPTOSBL_ADDR);
SOC_rcmTriggerReset(SOC_CORE_R5SS0);其中Mcu_DeInit调用Drivers_close();与System_deinit();
MemoryCopy((uint8*)(R5F_VECS_ADDR), (uint8*)(MSRAM_VECS_ADDR), VECS_LENGTH);将SBL的中断向量拷贝到0x0这个地址中
SOC_rcmTriggerReset(SOC_CORE_R5SS0);调用SOC_rcmR5SS0PowerOnReset();与SOC_rcmR5SS0TriggerReset();SBL中进不了main函数
,
Gary Lu:
我写了一段中断示例,您参考一下
// 定义中断处理函数 void __attribute__((interrupt)) sbl_interrupt_handler(void) {// 处理中断// 清除中断标志,处理数据 }// 初始化中断控制器 void sbl_init_interrupts() {// 配置中断控制器// 使能中断、设置中断优先级 }// SBL的入口函数 int main() {// 初始化中断sbl_init_interrupts();// 其他初始化工作// 进入主循环while (1) {// 执行操作,进行其他处理}return 0; }