TI中文支持网
TI专业的中文技术问题搜集分享网站

AM2634: PBL跳转SBL问题

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;
}

赞(0)
未经允许不得转载:TI中文支持网 » AM2634: PBL跳转SBL问题
分享到: 更多 (0)