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

  • 怎么跳转?

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

    Fullscreen
    1
    2
    3
    ; SBL0x70050000
    LDR R0, =0x70050000 ; SBLR0
    BX R0 ; SBL
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    汇编加载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函数
  • 我写了一段中断示例,您参考一下

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //
    void __attribute__((interrupt)) sbl_interrupt_handler(void) {
    //
    //
    }
    //
    void sbl_init_interrupts() {
    //
    // 使
    }
    // SBL
    int main() {
    //
    sbl_init_interrupts();
    //
    //
    while (1) {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX