图4 片内引导加载支持的目标程序格式
4 软件设计
4.1 目标程序格式
图2 28F020的部分译码电路
图3 628128的部分译码电路
图 5 扩展引导加载支持的目标程序格式
片内引导加载程序支持的目标程序应符合如图 4 所示的格式。开始的 4 个字节分别存放目的地址和目标程序长度。 6.63 以上版本的汇编工具包支持这 4 个字节的自动插入,而 6.60 及以下版本则需手工计算并编辑目标代码以符合这种格式。
由于扩展引导加载程序需考虑支持64K以上的用户程序,故需要采用4个字节来存放最终用户目标程序长度,相应的被加载程序格式见图5。
其中,程序长度N=(字节数/2-1);由于片内引导加载程序退出时将程序转移至0000H处,故目的地址只能为0000H。也就是说,片内引导加载程序将首先把28F020中的扩展引导程序加载至程序空间的0000H处。为此,扩展引导程序在开始运行时应首先将自身复制到程序空间的高端,从而为进一步加载最终用户程序让出空间。
4.2 程序流程图
扩展加载程序流程图如图6所示。
图6 扩展加载程序流程图
4.3 复制自身至高端
扩展加载程序如何将自身复制至程序空间高端,是本软件设计要点之一。 TMS320C2xx 不支持程序空间中的指令移动,但允许程序空间和数据空间之间进行数据传送。为此,可考虑利用 TMS320C203 的片内 RAM B0 块,该块可由软件配置为数据或程序存储器。首先,将 B0 块配置为数据存储器,循环利用 TBLR 指令将程序空间 0000H 开始的扩展加载程序读至数据空间 0200H 开始的 B0 块中;移动完毕,再将 B0 块配置为程序存储器( FF00H 开始)。相关代码如下:
.text
XFER_BOOT:
;Config bLOCk B0 to data(0x200H-0x2FFH)
CLRC CNF
MAR *, AR1
;Load B0 start address 0x200H to AR1
LAR AR1, #B0_SADDR
; Load the start address of extended
;boot loader to ACC
LACC #boot_end
;start address-end address=length
SUB #boot_start
SACL TEMP
LACC #boot_start
RPT TEMP
TBLR *+
; Config block B0 to program(FF00H)
SETC CNF
B BOOT
.sect "bootext"
; the start address of extended boot loader
.label boot_start
BOOT:
...( 扩展加载程序主体 )
; the end address of extended boot loader
本文关键字:暂无联系方式DSP/FPGA技术,单片机-工控设备 - DSP/FPGA技术