DSP外挂Flash在系统编程及并行引导装载方法
3.2 链接配置文件编写
(文件名为TestLedLink.cmd)
MEMORY {
PAGE 0:
VEC: org=0100h, len=0080h ;中断向量的首地址和块长度
CODE: org=0180h, len=0F80h ;程序块的首地址和块长度
PAGE 1:
STACKS: org=1100h, len=0100h ;堆栈区的首地址和块长度
DATA: org=1200h, len=1000h ;数据块的首地址和块长度
}
SECTIONS{
.vectors:> VEC PAGE 0 ;将中断向量放入程序页的VEC区
.text> CODE PAGE 0 ;将程序代码放入程序页的CODE区
.stack> STACKS PAGE 1 ;将堆栈放入数据页的STACKS区
.bss> DATA PAGE 1 ;将未初始化变量放入数据页的DATA区
.data> DATA PAGE 1 ;将初始化数据放入数据页的DATA区
}
链接配置文件写好后,通过DSP仿真软件CCS编译链接即可生成TestLed.out文件。在汇编时要注意,不论是DOS下的ASM500还是WINDOWS下的CCS都必须加上-v548开关量,否则不能生成正确的引导表。
3.3 HEX转换配置文件编写
(文件名为TestLedHex.cmd)
TestLed.out ;转换的文件名,即编译链接后的.out文件
-a ;ASCII-HEX格式
-map TestLed.mxp ;生成的映射文件名,可不生成该文件
-o TestLed.hex ;转换后的HEX文件名
-memwidth 16 ;系统存储器宽度为16位
-romwidth 16 ;ROM器件宽度为16位
-boot ;将COFF文件中各段转换为引导表的格式(替代SECTIONS伪指令)
-bootorg 0x8000 ;引导表放在FLASH的8000H开始的单元
-e 0x0100 ;装入引导表后程序运行的起始地址
HEX转换配置文件写好后,使用CCS提供的转换工具HEX500将生成的COFF目标文件TestLed.out转化为标准的ASCII—HEX格式的文件TestLed.hex。注意在转换时一定要把TestLedHex.cmd文件的扩展名cmd加上。
3.4 构造引导表并写入FLASH
经过HEX转换生成的TestLed.hex文件内容。
文件开始为ASCII STX字符,结束为ASCII ETX字符,$A8000表示引导表存放的首地址,接下来的数据就是从8000H单元存放的引导表的内容,转换后的TestLed.hex文件可直接由编程器烧写进FLASH,也可通过在系统编程的方法由上述的DSP烧写程序写进FLASH。执行烧写程序前需要编写一个简单的程序将.HEX文件中起始符、首地址、结束符等与引导表无关的信息去掉,并转换为DSP能识别的文件格式(如.Dat),采用.copy或.include命令将该文件作为数据段嵌入烧写进程序中同时注意在FLASH的0FFFFH单元写入引导表起始地址8000H。烧写FLASH后数据存放格式。
引导表烧写进FLASH后,将MP/Mc引脚置低,上电复位后引导程序就会自动将FLASH中的用户程序搬进片内RAM,搬运完毕后即跳转到程序入口地址,高速运行用户程序。
此方法适用于程序代码小于16K的情况,将用户程序全部导入C5402片内RAM中即可;当用户程序较大而超过16K时,需要外扩程序存储器,此时在引导表中需用到扩展的程序计数器(XPC),来寻址扩展的程序存储空间。