两类DSP芯片的引导过程分析
(2)链接文件,将.obj文件生成.out文件。.out文件中应包括初始化的段落。如.text,.const,.cinint等。以上两步在仿真时,也需要执行,以便得到仿真用的.out文件。
(3)使用数制转换工具生成.HEX文件或.BIN文件,C40使用的数据转换工具为hex30.exe,C5402使用数制转换工具编写命令文件,命令文件的编写很重要,下面分别例举了C40和C5402系统引导的两个CMD命令文件。
例1:C40系统引导的CMD文件
myfile.out /*要进行转化的COFF文件名*/
-i /*建立INTEL十六进制文件的输出*/
-image /*产生ROM所指出的内存映射*/
-o n_t_fcom.hex /*输出的文件名*/
-map n_t_hex.map /*输出的MAP文件名*/
-romwidth 8 /*EEPROM的数据宽度*/
-cg 000000000H /*全局数据总线控制字*/
-cl 3e3fbfd0H /*本地数据总线控制字*/
-datawidth 32 /*数据宽度*/
-memwidth 8 /*存储器的宽度*/
-boot /*将所有的输入文件创建引导表*/
-bootorg 0000H /*EPROM的0000H,系统的0030 0000H*/
-ivtp 00700000H /*IVTP指针的初始值*/
-tvtp 00000000H /*TVTP指针的初始值*/
-iack 0300000H /*IACK指令的响应地址*/
-e 00704000H /*程序的开始执行地址*/
ROMS /*ROM的映射范围*/
{
EPROM:org=00300000h,len=8000H
}
例2:C5402系统引导CMD命令文件
Myfile.out /*要进行转化的COFF文件名*/
-e 0300H /*程序运行的入口点*/
-i /*建立INTEL十六进制文件的输出*/
-boot /*将所有的输入文件创建引导表*/
-bootorg 0000H /*EPROM中引导表的始地址*/
-memwidth 8 /*EEPROM的数据宽度是8位*/
-o myfile.hex /*输出的文件名*/
下面给出操作符的几点说明:
(1)-bootorg指定引导表的地址,注意这里使用的是0000H,.HEX文件的始地址就是0000H。在C40中,EEPROM28C256的0000H地址单元,在系统中地址是0030 0000H。若改为-bootorg 0030 0000H,在用烧录器打开.HEX文件时,可以看到起始地址是0030 0000H,若将.HEX文件烧到EEPROM中,需要修改烧录芯片的起始地址,比较麻烦。但你可以将.HEX文件转化为.BIN文件,则地址就不必修改。
(2)输出文件的格式
-a 输出ASCII码的十六进制文件
-I 输出INTEL十六进制文件
-m1 输出Motrorola的S1数据格式文件
-m2 输出Motorola的S2数据格式文件
-m3 输出Motorola的S3数据格式文件
-t 输出TI的数据格式文件
-x 输出Tektronix数据格式文件
(3)检查.HEX文件正确与否,可以查看MAP映射文件,在.MAP文件里列出了.HEX文件中的一些具体配置。如32BIT数据位的排放顺序,即4个字节的排放顺序;系统引导表的参数:引导表的首地址、程序入口点、各个寄存器的初始值等;源程序中各段的起始地址、大小以及宽度等信息。对照它,就可以确定内存资源是否得到了合理的配置和有无地址冲突。
以下是C40 MAP文件的举例:
*********************************************
TMS320C3x/4x Hex Converter Version 5.00
********************************************
Fri Jun 8 09:47:33 2001
INPUT FILE NAME:<n.out>
OUTPUT FORMAT:Intel
PHYSICAL MEMORY PARAMETERS
Default data width:32
Default memory width:8(LS-->MS)
Default output width:8
BOOT LOADER PARAMETERS
Table Address: 00300000,PAGE 0
Entry Point: 00704000
Global Memory Configuration:00000000
Local Memory Configuration: 3e3fbfd0
Interrupt Vector Table Pointer(IVTP):00700000
Trap Vector Table Pointer(TVTP):00000000
IACK Location: 00300000
OUTPUT TRANSLATION MAP
-------------------------------------
00300000..00307fff Page=0 Memory Width=8 ROM Width=8 "EPROM"
-------------------------------------
OUTPUT FILES:n_t_fcom.hex [b0..b7]
CONTENTS:00300000..003013ff BOOT TABLE
intvect:dest=00700000 size=00000040 width=00000004
.text:dest=00704000 size=0000048a width=00000004
.data:dest=00705000 size=00000026 width=00000004
003004f0..00307fff FILL = 00000000
(4)烧录芯片。C40可以直接将生成的INTEL格式的.HEX文件烧到28LV256中。或将十六进制的文件用hexbin.exe转化为二进制的.BIN文件,再烧录到芯片中。对于C5402,还需要手动添加EEPROM在系统中的起始地址。如果采用28LV256(32K×8BIT),引导表的首地址为8000H,那么生成的.HEX文件用芯片烧录器加载到烧录器软件的内存后,手动修改28LV256的7FFEH和7FFFH单元(即系统的FFFEH和FFFFH单元)为80和00H,再绕到芯片中。
以上步骤的操作都是在DOS环境中执行的。新版本的DSP开发软件可以在WINDOWS环境中使用,其原理是一样的,这里不再多述。
源程序数据的存储格式(8位并行装载)如表2所示,当烧录时可以对比一下。
表2 源程序数据的储存格式
C40引导程序 | C5402引导程序表格 |
内存宽度(00000008H)32 全局数据总线控制字32 本地数据总线控制字32 第一段的存储空间范围32 第一段程序的目的地址32 程序代码(1)32 …… 程序代码(N)32 …… 最后一段的存储空间范围32 最后一段程序的目的地址32 程序代码(1)32 …… 程序代码(N)32 0000 0000H程序块装载结束标志 IVTP TVTP IACK指令的响应地址0030 0000H | C8AAH16 软件可编程等待状态寄存器的初值SWWSR16 块切换控制寄存器的初值BSCR16 XPC16 PC16 第一段的存储空间范围16 第一段的目的(XPC)16 第一段的目的地址(PC)16 程序代码(1)16 …… 程序代码(N)16 …… 最后一段的存储空间范围16 最后一段的目的(XPC)16 最后一段的目的地址(PC)16 程序代码(1)16 …… 程序代码(N)16 0000(指示引导表格的结束) |
本文详细介绍了C4X和C54XX两类DSP芯片系统引导的详细设计步骤,其它型号的DSP也大同小异,如C3X与C4X类似。笔者希望通过共享系统引导的经验,使系统引导不再成为DSP设计中的最大障碍,从而加速DSP的抗推广和使用。