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.

AM2634: PBL跳转SBL问题

Part Number: AM2634

PBL是存储在外部Flash中的,由芯片的ROMboot加载并启动(加载到0x70002000-0x7004FFFF),

PBL起来后通过Can下载SBL到RAM中(0x70050000-0x7009FFFF),然后从PBL跳转到SBL中,怎么跳转?SBL的中断需要怎么设置?需要TI的技术支持提供帮助,18613053797

  • 怎么跳转?

    您需要自己编写汇编,执行正确的跳转指令。示例如下:

    ; 假设SBL的起始地址为0x70050000
    LDR R0, =0x70050000 ; 将SBL的起始地址加载到寄存器R0中
    BX R0 ; 跳转到SBL的起始地址

    汇编加载SBL的起始地址到寄存器R0,通过BX指令实现无条件跳转到该地址

  • 可以远程看下吗?中断这块也不知道怎么弄?

  • 中断这块也不知道怎么弄?

    您可以把代码发上来

  • 如下操作,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函数
  • 我写了一段中断示例,您参考一下

    // 定义中断处理函数
    void __attribute__((interrupt)) sbl_interrupt_handler(void) {
        // 处理中断
        // 清除中断标志,处理数据
    }
    
    // 初始化中断控制器
    void sbl_init_interrupts() {
        // 配置中断控制器
        // 使能中断、设置中断优先级
    }
    
    // SBL的入口函数
    int main() {
        // 初始化中断
        sbl_init_interrupts();
    
        // 其他初始化工作
    
        // 进入主循环
        while (1) {
            // 执行操作,进行其他处理
        }
    
        return 0;
    }