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.

TMS320F280049: CodeStartBranch.asm文件执行过程

Part Number: TMS320F280049

 设计F280049的CAN在线升级代码,设计思路如下:

步骤1、28004x_generic_flash_ink.cmd文件定义

MEMORY
{
PAGE 0 :
/* BEGIN is used for the "boot to Flash" bootloader mode */

BEGIN : origin = 0x080000, length = 0x000002

FLASH_UPDATE_CODE : origin = 0x098000, length = 0x008000 

FLASH_APP_CODE: origin = 0x081000, length = 0x016FFC

FLASH_APP_LB_POINT : origin = 0x097FFC, length = 0x000002

FLASH_UPDATE_FLAG : origin = 0x097FFF, length = 0x000001

RESET                            : origin = 0x3FFFC0, length = 0x000002

}

SECTIONS
{

codestart        : > BEGIN,     PAGE = 0, ALIGN(4)

UPDATE_CODE : > FLASH_UPDATE_CODE   PAGE = 0

LB_APP : > FLASH_APP_LB_POINT     PAGE = 0

flashflag    : > FLASH_UPDATE_FLAG  PAGE = 0

}

说明:BEGIN为BOOT-TO-FLASH入口地址,存放跳转到升级选择函数_SwitchFunction指令;FLASH_UPDATE_CODE为升级程序存放地址;FLASH_APP_CODE为应用程序存放地址;FLASH_APP_LB_POINT为应用程序入口地址,存放跳转到 _c_int00指令;FLASH_UPDATE_FLAG地址存放是否升级标志位,初始值为0x55FF。

步骤2、f28004x_codestartbranch.asm编写

.sect "flashflag"
.WORD 55FFH

.ref _c_int00
.global code_start
.global _SwitchFunction

.sect "codestart"
code_start:
LB _SwitchFunction

.sect "LB_APP"
LB _c_int00

.text
.end

步骤3、DSP上电后,首先会跳到一个固定的中断向量,成为RESET,其地址是0x3F FFC0,RESET指向存在于boot ROM里的InitBoot函数,在Boot 到Flash模式下,会到0x08 0000所在的位置(BEGIN)开始取指令,BEGIN存放的是跳转到升级选择函数_SwitchFunction指令,在f28004x_codestartbranch.asm中执行跳转到_SwitchFunction()函数。

步骤4、在_SwitchFunction()函数中,判断升级标志位,此时FLAG = 0x55FF,则跳转到0x09 7FFC(FLASH_APP_LB_POINT),此处存放的是存放跳转到 _c_int00指令,在f28004x_codestartbranch.asm中执行跳转到 _c_int00,_c_int00是C语言运行环境的设置函数,经过_c_int00后,跳转到用C语言编写应用程序的main函数入口。

步骤5、在应用程序中,用CAN接收上位机下发的升级标志位,如果FLAG = 0x5500,则跳转到0x08 0000(BEGIN),BEGIN存放的是跳转到升级选择函数_SwitchFunction指令,在f28004x_codestartbranch.asm中执行跳转到_SwitchFunction()函数。

步骤6、在_SwitchFunction()函数中,判断升级标志位,此时FLAG = 0x5500,则执行升级程序,同时将FLASH_UPDATE_FLAG写入数据为0x55FF。升级完成后,则跳转到0x09 7FFC(FLASH_APP_LB_POINT),再次进入步骤4或者停止喂狗,DSP重启,再次进入步骤3。

现在有2个疑问:

1、步骤5,如果DSP不重启,在主函数中还能再次进入f28004x_codestartbranch.asm吗?

2、步骤6,升级完成后两种方案,跳转和重启,是否都可行?