三峡大学科技学院电气工程及其自动化系 徐晶晶
TMS320C6713B是TI公司生产的TMS320系列产品中一款高性能的DSP芯片,特别适用于高速数字信号处理。它主要由三个部分组成:CPU内核、外设和存储器。CPU中8个功能单元可以并行工作,这些功能单元被分成类似的两组,每组由4个基本功能单元组成。CPU有两组寄存器,每组寄存器由16个32位寄存器组成。由于在运行期间不做硬件数据相关性检查,所以程序运行时可以同时执行8条指令,极大地提高了芯片处理速度,使得该芯片在电子测量、测控、图像、雷达、声纳和软件无线电等领域得到了广泛的应用。
一般的DSP应用系统如图1所示,主要包括了电源、存储器、外部接口、数/模和模/数转换电路等部分。利用这样一个DSP系统,就可以实现对外部信号的数据采集、存储、处理,并利用程序指令实现对外部设备的控制操作。其中,FLASH存储器非常重要,因为开发这样一个有特殊应用的DSP系统,最终必然要脱离仿真器独立运行,这时就需要一个能在断电后保存程序及初始化数据的存储器。由于FLASH具有电信号擦除功能且擦除速度快,集成度高,因此成为了构建DSP应用系统时存储器的首选。系统上电时,由DSP自带的引导程序将应用程序从该存储器引导到DSP应用板上的高速存储器(如内部SRAM,SDRAM等)中,而如何实现该过程就成了DSP开发中不可避免的问题。
DSP系统的引导(BOOT)是在系统加电或复位时,DSP将一段存储在外部的非易失性存储器的程序代码通过DMA/EDMA方式拷贝到内部的高速内存中运行。这样既能扩展DSP有限的存储空间,又能充分发挥DSP内部资源的效能。当然用户的代码也可以通过掩膜方式写入到DSP内部的ROM中,但这样会受到容量和价格的限制,且不便于扩展和升级。DSP系统的引导方式 不是唯一的,对于TMS320C6713B系统来说,加电后RESET信号为低,芯片复位,在RESET信号上升沿处,锁存Bootmode(HD[4:3])信号,从而决定芯片的引导方式,具体方式如表1所示。因此,只需要对HD[4:3]管脚电平通过电阻上拉或下拉即可实现不同的引导方式。
下面简要叙述一下三种不同的引导模式。
(1)主机(host)引导
CPU停留在保持状态,其余硬件部分均保持正常状态。在这期间,外部主机通过主机口初始化CPU的存储空间,包括寄存器的初始化,例如控制EMIF和其它一些外围设备的配置寄存器。主机完成所有的初始化工作后,将主机口控制寄存器中的DSPINT位设置为1,结束引导过程。此时CPU退出复位状态,开始执行地址0处的指令。在这个过程中,DSPINT并不是通过CPU来触发,因为此时CPU仍然处于保持状态。而且,也只有在主机引导过程中,DSPINT才能将CPU从保持状态唤醒。另外,主机可以对DSP所有的存储空间进行读和写,这样就允许主机在必要的时候更改发送给DSP的内容。值得注意的是,在CPU跳出保持状态后需要清除DSPINT,否则,就收不到其它的DSPINT了。
(2)Emulation引导
这种模式不是通过主机加载代码和设置DSPINT,而是利用仿真器来设置DSPINT,从而CPU开始从地址0处执行指令。在每次操作之前,仿真器就在地址0处设有断点。这种模式在调试阶段是一个很好的手段。
(3)EMIF引导
这种模式是把程序代码或数据表保存在ROM、FLASH或其它非易失性存储器中,它们对应着DSP的CE1空间,数据格式跟系统一样。在内部复位时,DSP使用默认的ROM时序从CE1空间拷贝1kB数据到地址0处。用户可以指定外部ROM的存储宽度,EMIF会自动将相邻的8bit/16bit数据合并成32bit。DSP用EDMA进行的这一加载过程是一个单帧的数据块传输。传输过程完成之后,CPU退出复位状态,开始执行地址0处的程序。一般来说,这段1kB程序的功能是先将外部主程序数据读入到DSP内部程序空间相应地址,然后跳转到主程序运行。在DSP系统应用中,用户就需要编写这段1kB大小的程序,实现二次引导,此即为用户的引导程序。其过程简单归纳如下:
1)在CCS环境中,编写主程序、装载程序以及相应的命令文件(link.cmd),编译链接以形成.hex(COFF格式)文件,通过编程器转化成.bin文件(二进制文件),烧到ROM中;
2)系统加电复位,芯片从ROM中拷贝固定长度的数据块(其中包括用户自身的引导代码)到RAM中,用以初始化部分存储器;
表1 TMS320C6713B系统的不同引导方式
图1 典型的DSP应用系统
图2 FLASH引导程序的组成
3)执行用户的引导代码和其它数据段以及程序段初始化所必需的段复制;
4)程序从main()处开始执行。
如果程序代码或数据表保存在ROM、FLASH或其它非易失性存储器中,在开发引导程序时,必须考虑以下几点:
1)用户引导代码必须链接到应用程序中,这样在系统加电复位后,用户的引导程序才能被合适地加载和执行;
2)只有通过编写自己的引导代码用户才能正确地从ROM中拷贝COFF格式的段,而引导代码的大小不能超过1kB;
3)在程序连接时,只有通过合理编写命令文件(.cmd),使这些段被合理地连接后,才能实现从ROM中加载,从DSP内部RAM中执行。
在这个过程中,所用到的命令文件和用户引导代码如图2所示,它们对于程序能否正确地执行起着非常重要的作用。在某软件无线电工程的开发中,笔者就是在C语言环境下,成功地开发了TMS320C6713B系统基于EMIF的自引导程序。下面就针对这两个方面加以详细说明,以供大家借鉴。
利用TI的代码产生工具,可以按照图2所示的步骤生成可执行文件(.out)。汇编器接收汇编优化器或编译器产生的.asm文件,经过汇编后产生可重新分配地址的COFF格式的目标文件.obj。该格式文件包含了汇编器所生成的各个段(如表2所示),命令文件就是指导链接如何将各段分配到相应的存储器中。编写命令文件时,有一点需要注意,那就是在很多情况下需要对某段说明两个不同的地址:加载地址和运行地址。加载地址决定了二进制程序代码的存储位置和程序的引导地址,但在运行过程中对于该段的任何引用则是以它的运行地址作为参考的。因此,当用户对某段分别说明了加载地址和运行地址时,只有将该段从加载地址复制到运行地址上,该段才可以被访问。
在命令文件中,合理地分配各段对于整个程序的正确运行起到关键的作用。在TI可查阅的文档和相关网站上,很少有涉及这方面内容的文章。经过反复实践,笔者取得了一些经验,下面是在实践中编写的命令文件(.cmd)
表2 编译器产生的默认代码段和数据段
DSP加电复位后,自动从CE1空间中拷贝1kB数据(程序代码)到地址0处,然后从0地址处开始执行指令。下面这段程序,其主要作用是将程序从外部ROM中搬到片内RAM区,然后跳转到C程序的入口地址C_int00处,保证程序顺利启动运行。
编写程序的具体步骤如下:
TI高速信号处理器TMS320C6713B需要从外部的存储器(ROM或FLASH)中引导应用程序,这是开发中的重点和难点之一,关系到系统的可靠性和处理速度,它在整个DSP嵌入式系统开发中有着至关重要的作用。如果开发者在设计之初就掌握了这项技术,就会大大方便系统的调试,缩短开发时间。
[1]王凤臣,乔卫民,李庆瑞.TI TMS320C6713B DSP板FIashBurn程序设计[J].微计算机信息(嵌入式与SOC),2006,22(7).
[2]TMS320C6713B,TMS320C6713BB FLOATINGPOINT DIGITAL SIGNAL PROCESSORS[R].Texas Instruments,SPRS294B-OCTOBER,2005-REVISED JUNE 2006.
[3]唐冰.TMS320C5410烧写FLASH实现并行自举引导[J].单片机与嵌入式系统应用,2003(01).
[4]赵凡,丑武胜等.TMS320C6000系列DSP的FLASH启动设计[J].单片机与嵌入式系统应用,2007(05).
[5]夏爽.通过JTAG口对DSP外部FLASH存储器的在线编程[J].单片机与嵌入式系统应用,2003(08).