TMS320C5410烧写Flash实现并行自举引导
_ERASEFlash ;擦除Flash
WRIFlashSTART: ;开始编程Flash
SSBX SXM
RSBX OVM
_RESETFLASH ; Flash复位
STM #8000H,AR0 ;Flash起始地址8000H
STM BOOTTABLE,AR5 ;被烧写的源地址(自举
;表首地址)
STM #( LOADEND- BOOTTABLE),AR4
; 写入011E个字
WRI_RPT
_WRITEFlash *AR0,*AR5 ;调入编程宏
LD *AR0+,A
LD *AR5+,A ;完成AR0和AR5地址自动加1
BANZ WRI_RPT,*AR4-
STM #0FFFFH,AR0; AR0指向数据空间的FFFF
;地址
STM FINDTABLE,AR5
_WRITEFlash *AR0,*AR5 ; 向数据空间的FFFF
;地址写入自举表的首地址8000H
ENDD: NOP
B ENDD
.end
被烧写的主程序是从MAIN_START开始,一直到LOADEND。程序的主要功能是不断改变XF引脚的状态。LOADSTART是中断向量文件(vector.asm)的开始,在中断复位(RESET)处放入一条跳转到MAIN_START指令(BD MAIN_START)。ERASE_WRITE_FLASH是烧写程序的开始,只要程序指针( PC)指向ERASE_WRITE_FLASH,开始运行就可以完成对Flash的烧写操作。从自举表首地址BOOTTABLE (0F8H)到LOADEND(0216H)存放的数据就是要写入Flash的内容,从LOADSTART到LOADEND的数据是DSP自举程序从Flash搬运到片内RAM的程序,具体如下:
00F8H: BOOTTABLE ; 自举表开始
0100H: LOADSTART ;中断向量表首地址
0100H: RESET :BD MAIN_START
... ;中断向量表的内容
0178H: RESERVED
0200H: MAIN_START
... ;主程序
0216H: LOADEND
被烧写的程序只需一个段,根据以上信息就可以完成自举表的内容,如表3所列。
表1 自举表
数据区地址 | 内 容 | 含 义 |
8000H | 10AA | 16位自举标记 |
8001H | 7FFF | SWWSR |
8002H | F000 | BSCR |
8003H | 0000 | 程序入口XPC |
8004H | 0200 | 程序入口地址 |
8005H | 0123 | 程序段长度 |
8006H | 0000 | 存放目标XPC |
8007H | 0100 | 存放目标地址 |
8008H | F273 | 程序代码1 |
8009H | 0200 | 程序代码2 |
…… | …… | …… |
811DH | FC00 | 程序代码 |
811EH | 0000 | 结束 |
…… | …… | …… |
FFFFH | 8000 | 自举表存放首地址 |
整个并行自举引导过程为:C5410上电复位后,判断MP/MC=0 处于微计算机工作方式,从片内ROM的0FF80H处执行中断向量表的分支转移指令(BD 0F800H),使程序跳转至0F800H处执行自举引导程序。自举引导程序完成初始化后,读取数据空间的0FFFFH地址的内容,找到自举表首地址8000H,从8000H处开始读取内容。首先,是16位自举标记(10AA)。然后分别是寄存器SWWSR及BSCR的内容,程序入口地址、代码段长度、存放代码段的目标地址等信息。最后,根据这些信息把Flash的8008H到811EH的程序搬运到片内RAM的100H开始的地址中,跳转至片内RAM 100H、即PC为100H、XPC为0,开始执行用户程序,完成用户程序的并行自举过程。
结 语
把程序烧写入Flash后,复位C5410,使其处于微计算机工作方式;使用示波器测试XF引脚,观察程序运行正确与否。通过上述方法可完成C5410对Am29LV200B Flash 的烧写,很好地实现了C5410上电后的用户程序自举引导功能。