TI中文支持网
TI专业的中文技术问题搜集分享网站

F28335,程序跳转调试问题……..诚心请教……….

最近在做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 == 1LB wd_disable			;Branch to watchdog disable codex	.else;LB _c_int00;Branch to start of boot.asm in RTS libraryLB 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 codeEALLOW					;Enable EALLOW protected register accessMOVZ DP, #7029h>>6  			;Set data page for WDCR registerMOV @7029h, #0068h  			;Set WDDIS bit in WDCR to disable WDEDIS							;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帮忙解答,在线等,谢谢!!!

 

Huihong LIU1:

LB check;调试过程中未注释,此处贴错。

问题是:
在JTAG进行在线仿真调试的时候,发现程序无法正常启动,也无法跳转到app main函数的入口地址处运行??
因为第一次尝试做相关的升级项目,定位问题可能不够清晰,如果有任何说得不清楚的地方,望能及时指出,我及时补充。
很困惑,诚心请教有相关调试经验的DSP高手或者TI的FAE帮忙解答,在线等,谢谢!!!

 

最近在做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 == 1LB wd_disable			;Branch to watchdog disable codex	.else;LB _c_int00;Branch to start of boot.asm in RTS libraryLB 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 codeEALLOW					;Enable EALLOW protected register accessMOVZ DP, #7029h>>6  			;Set data page for WDCR registerMOV @7029h, #0068h  			;Set WDDIS bit in WDCR to disable WDEDIS							;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帮忙解答,在线等,谢谢!!!

 

Terry Deng:

回复 Huihong LIU1:

下载 spraaq2文档和相关例程,有详细关于bootloader的制作

最近在做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 == 1LB wd_disable			;Branch to watchdog disable codex	.else;LB _c_int00;Branch to start of boot.asm in RTS libraryLB 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 codeEALLOW					;Enable EALLOW protected register accessMOVZ DP, #7029h>>6  			;Set data page for WDCR registerMOV @7029h, #0068h  			;Set WDDIS bit in WDCR to disable WDEDIS							;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帮忙解答,在线等,谢谢!!!

 

Lu Hui:

回复 Huihong LIU1:

请问一下,你的问题解决了吗?

赞(0)
未经允许不得转载:TI中文支持网 » F28335,程序跳转调试问题……..诚心请教……….
分享到: 更多 (0)