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.

[参考译文] TM4C129EKCPDT:如何从引导加载程序跳转到应用程序地址

Guru**** 2382630 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/627180/tm4c129ekcpdt-how-to-jump-to-application-address-from-bootloader

器件型号:TM4C129EKCPDT

你(们)好

我将引导加载程序放置在 闪存0x0~0x10000中、应用程序放置在  0x10000~0x7FFFF 中。

您能否告诉我在完成固件下载后如何跳转至0x10000? 是否有跳转示例?  

我编写以下代码、但它不会跳转到应用 程序地址。  谢谢。

#define ApplicationAddress  0x10000

void Jump2App (空)

        //在进入之前关闭 SysTick 及其中断

        ROM_SysTickIntDisable();

        ROM_SysTickDisable();

        //禁用所有处理器中断。

        HWREG (NVIC_DIS0)= 0xffffffff;

        HWREG (NVIC_DIS1)= 0xffffffff;

        HWREG (NVIC_DIS2)= 0xffffffff;

        HWREG (NVIC_DIS3)= 0xffffffff;

        HWREG (NVIC_DIS4)= 0xffffffff;

        (*(void (*)(void))(*(uint32_t *) ApplicationAddress))();

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Daniel、您好!

     您是否已经尝试过 TivaWare 库随附的各种引导加载程序示例? 请查看引导加载程序示例中的 BL_STARTUP_CCS.s 启动文件。 下面是代码的一个片段。

    ;
    ;从应用程序的向量表加载栈指针。
    ;
    ;.if (app_start_address!= VTABLE _start_address)
    movw r0、#(app_start_address 和0xFFFF)
    .if (app_start_address > 0xFFFF)
    movt r0、#(app_start_address >> 16)
    .endif
    .endif
    LDR SP、[r0]
    
    ;
    ;从应用程序的矢量表加载初始 PC 并分支到
    ;应用程序的入口点。
    ;
    LDR R0、[r0、#4]
    BX R0
    endasmfunc