最近在做F28335串口升级,目标是不改变boot方式来实现升级。在参考了大量的学习资料后,调试程序跳转。
分两个工程,bootloader工程和app工程,通过JTAG口分别烧写入FLASHA,FLASHB~H,从反汇编中观察到两个SECTOR区中已经有数据写入,所以想尝试实现bootloader向app工程的跳转。
由于BEGIN : origin = 0x33FFF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */,和reset都设置在bootloader的cmd文件中,因而在开机上电时,复位后运行bootloader的codestart。
做了以下的准备:
1.固定两个工程文件的_c_int00,分别为
flashA,bootloader
CINT00 : origin = 0x338000, length = 0x000050 /* define _c_int00 */
boot : > CINT00 PAGE = 0
{
-l rts2800_fpu32.lib<boot.obj>(.text)
}
flashB~H
CINT00 : origin = 0x300002, length = 0x000050 /*define _c_int00*/
boot : > CINT00 PAGE = 0
{
-l rts2800_fpu32.lib<boot.obj>(.text)
}
2.修改bootloader工程的codestart.asm的汇编文件,如下所示,
***********************************************************************
WD_DISABLE .set 1 ;set to 1 to disable WD, else set to 0
.ref _c_int00
.global code_start
***********************************************************************
* Function: codestart section
*
* Description: Branch to code starting point
***********************************************************************
.sect "codestart"
code_start:
.if WD_DISABLE == 1
LB wd_disable ;Branch to watchdog disable codex
.else
;LB _c_int00 ;Branch to start of boot.asm in RTS library
LB check
.endif
;end codestart section
***********************************************************************
* Function: wd_disable
*
* Description: Disables the watchdog timer
***********************************************************************
.if WD_DISABLE == 1
.text
wd_disable:
SETC OBJMODE ;Set OBJMODE for 28x object code
EALLOW ;Enable EALLOW protected register access
MOVZ DP, #7029h>>6 ;Set data page for WDCR register
MOV @7029h, #0068h ;Set WDDIS bit in WDCR to disable WD
EDIS ;Disable EALLOW protected register access
;LB check ;Branch to start of boot.asm in RTS library
check:
MOVL XAR0, #0x338000 ;
CMP *XAR0, #0x28AD ;never update before;
B app, EQ
LB search
addPTR:
ADDB XAR0, #0x4
search:
CMP *XAR0, #0xFFFF
B addPTR, NEQ
SUBB XAR0, #0x4
CMP *XAR0, #0xFFF0
B app, EQ
LB _c_int00
app:
MOVL XAR7, #0x300000
LB *XAR7
.endif
;end wd_disable
.end
问题是:
在JTAG进行在线仿真调试的时候,发现程序无法正常启动,也无法跳转到app main函数的入口地址处运行??
因为第一次尝试做相关的升级项目,定位问题可能不够清晰,如果有任何说得不清楚的地方,望能及时指出,我及时补充。
很困惑,诚心请教有相关调试经验的DSP高手或者TI的FAE帮忙解答,在线等,谢谢!!!
