TMS320C6713 DSP板Flash二级装载程序设计
摘要:DSP系统的程序都是保存在非易失性存储器中,系统启动的时候,程序加载到系统的RAM中去执行。本文详细描述了TI TMS320C6713 DSP板以Flash 作为引导存储器,采用二级装载的办法来实现程序的加载,并给出了数据传输的代码片断。**介绍的这种二级装载的方法也可以应用于C6000系列其他型号的处理器。
关键字:数字信号处理器;TMS320C6713;Flash;引导装载
0引言
TMS320C6713是TI公司推出的TMS320C67xx系列浮点DSP中最新的一款芯片。TMS320C6713每周期可以执行8条32位指令;支持32/64位数据;具有300MHz、3.3ns指令周期的运行速度和2400MIPS或1800MFLOPS的处理能力。它具有强大的外设支持能力,32位外部存储器接口(EMIF)可以很方便地和SRAM,EPROM,FLASH,SBSRAM 和SDRAM等同步和异步存储器或者512M 字节的外部存储空间连接;Boot方式有HPI和8\16\32位ROM 启动。
本文介绍的TMS320C6713 DSP板框图如图1所示。如果想顺利完成DSP软件的运行,首先需要把CCS编译出的out文件转换为hex文件,hex文件可以装载到FLASH中,因为一级装载只有1K,因此要编写二级装载程序,最后根据不同的FLASH硬件类型编写FLASH的烧写和擦除程序,把编写完的程序套用FlashBurn程序和FBTC源代码程序完成FLASH的烧写和擦除。以下就TMS320C6713 DSP板的Flash二级装载程序设计做详尽的阐述。
1 TMS320C6713 DSP板软件的配置
TMS320C6713 DSP板的JTAG配置情况
(1)安装硬件仿真器SEED-XDSUSB2.0与目标系统板;
(2)硬件连接完毕后,安装SEED-XDSUSB2.0驱动程序;
(3)驱动程序的配置:在Setup CCS 2(6000)下选中C6x1x XDS510 Emulator加载, 选择C6000 XDS驱动的属性,选择seedusb2.cfg配置文件,将I/O Port 改为0x240(也可以设为340);
(4)启动CCS,进行CCS调试DSP程序。
在TMS320C6713板中,为了使SDRAM,FLASH运行起来,需要设置寄存器,同时同步时钟需要进行PLL的设置。
基本寄存器构型:
/* EMIF setup */
*(int *)EMIF_GCTL = 0x00000068;
*(int *)EMIF_CE0 = 0x20f20333; /* CE0 SDRAM */
*(int *)EMIF_CE1 = 0xffffff23; /* CE1 Flash */
*(int *)EMIF_CE2 = 0x20f20323; /* CE2 I/O 32-bit async */
*(int *)EMIF_CE3 = 0xffffff23; /* CE3 I/O 32-bit async */
*(int *)EMIF_SDRAMCTL = 0x53116000; /* SDRAM control (32 Mb) */
*(int *)EMIF_SDRAMTIM = 0x00000578; /* SDRAM timing (refresh) */
*(int *)EMIF_SDRAMEXT = 0x000a8529; /* SDRAM Extension register */
PLL寄存器构型:
/* Set the PLL back to power on reset state*/
*(int *)PLL_CSR = 0x00000048;
*(int *)PLL_DIV3 = 0x00008001;
*(int *)PLL_DIV2 = 0x00008001;
*(int *)PLL_DIV1 = 0x00008000;
*(int *)PLL_DIV0 = 0x00008000;
*(int *)PLL_MULT = 0x00000007;
*(int *)PLL_OSCDIV1 = 0x00008007;
2 TMS320C6713 DSP板的Loader过程
和以往TI公司的DSP(如3x,4x)采用引导表由固化在DSP内部的引导程序实现程序的自引导不同,TMS320C6000系列DSP采用的是一种新的引导方法,对于TMS320C6713,上电后,若选择从EMIF引导程序,则DSP自动将位于地址空间CE1(0x90000000~0x9FFFFFFF)开头的1KB代码传输到地址空间0处。它的数据传输采用默认时序,用户可以选择外部程序存储器的宽度(8位/16位/32位),然后由EMIF自动将几次读入的数据合成32位数据。传输由DSP中的EDMA通道以单帧的形式自动进行,传输完成后,程序从地址空间0处开始运行。因此,要在TMS320C671x中实现基于FLASH的自引导功能,必须将FLASH配置在DSP的CE1地址空间中。
以上工作均由DSP自动完成。很明显,自动传输的代码并不能满足绝大多数编程者对代码长度的要求,因此可在这段代码中加入数据传输功能,从而将实际工作中远大于1KB的代码由FLASH中读入到用户指定的存储空间,然后再将程序跳到实际有用的代码处运行。对FLASH编程并实现程序自引导的具体过程如下。
2.1 DSP程序的文件格式变换
由CCS得到的代码为目标文件格式(COFF)。COFF是二进制的目标文件形式,该文件提供了灵活的方法管理代码段和目标系统存储器。这种格式文件不能直接写入FLASH,而要先用其它语言(如C)编写文件,然后由转换工具进行转化。
在COFF格式下,程序被分成很多段(包括程序段、初始化数据段、未初始化数据段、自定义段等),每段都占据连续的存储空间,段与段之间相互独立。另外,在COFF文件中,除了段内的用户程序和数据外,还包含一些额外的信息,其中有COFF文件的版本、段的数量、段的长度和起始地址等,分析清楚这些信息,就可以编写自己的文件转换工具了。
具体方法是:读入COFF文件,根据格式分析该文件的内容,再把用户程序和数据部分提取出来,仍分成若干段,并在每个段前加入起始位置和段长度信息,同时在最后一个段的末尾加上结束标志,最后写入一个新的文件。在此过程中,因为COFF文件的字长为32bit,而FLASH宽度可能为8bit或16bit,因而要在两者之间进行手工转化。
Hex工具自动完成代码转换。该工具是TI提供的把COFF目标文件转变成标准可装载文件的工具之一,适于把可执行指令转换为ASCII十六进制形式。
Hex转换工具为产生可执行代码的变换有两种基本的方法:
①在命令行上指定选项和文件名。
如把文件post.out转变成TI可执行的二进制指令文件,生产输出文件,post.hex。
hex6x t post.out post.hex
②在一个命令文件里指定选项和文件名。
编写一个批处理文件,保存命令行选项和文件名。因为这种方式更方便实用,一般采用这种命令文件。命令文件里除了命令选项外,可以变换ROMS和SECTIONS。选择参数参考TMS320C6000 Assembly Language Tools User Guide 11.2节 Invoking the Hex Conversion Utility。ROMS部分表示ROMS存储器的构造,确定地址范围参数。SECTIONS部分确切说明哪个部分COFF目标文件的内容被选择。 整个文件转换过程是在DOS提示符下完成的。
本文针对TMS320C6713 DSP板的存储器编写的命令文件为:
post.out
-x
-image
-memwidth 32
ROMS
{ FLASH: org = 0, len = 0x10000,romwidth = 32, files = {post.hex}}
在命令行中调用命令hex6x格式为: hex6x 文件名
2.2 编写boot程序和二级Bootloader
boot程序本身是COFF文件格式,需要格式转换,利用编程器进行编程。由于编程器不支持*.out文件模式,不能直接写入FLASH中,所以必须将*.out文件转换成编程器可读入的*.hex格式。
在DSP中ROM引导自动传输了64K或1K的程序代码,对于TMS320C6713是1KB程序代码时,不能满足绝大多数应用的要求,如果应用代码的大小超过了这个长度,则应当引入二级Bootloader来解决。具体的做法是:使ROM引导自动加载的代码实现数据传输功能,把超过长度的代码人工复制到指定的存储区域,完成传输后程序跳转到实际应用的入口处继续运行。
二级Bootloader代码不能超过ROM加载的长度(64K或1K),TMS320C6000二级Bootloader代码大小在1K以内,步骤如下:
①配置EMIF寄存器使能访问到所连接的外部存储器;
②从Flash中根据各段的地址信息将其复制到相应的物理地址中;
③跳转至实际应用的入口处。这里的入口并非main()函数,而是c_int00()函数,因为系统必须在此函数运行后才能建立起C语言的运行环境,继而才能进入main()函数。
以下是第二步数据传输的代码片断:
mvkl copyTable, a3 ;读取复制表地址指针
mvkh copyTable, a3
copy_section_top:
ldw *a3++, b0 ;段长度
ldw *a3++, b4 ;段在Flash中的地址
ldw *a3++, a4 ;段要存放的目标物理地址
nop 2
[!b0] b copy_done ;判断是否复制完毕
nop 5
copy_loop:
ldb *b4++,b5
sub b0,1,b0
[b0] b copy_loop ;判断该段是否复制完毕
[!b0] b copy_section_top
zero a1
[!b0] and 3, a3, a1
stb b5, *a4++
[!b0] and -4, a3, a5
[a1] add 4, a5, a3
copy_done: ;复制完毕,跳转至c_int00()函数入口
mvkl .S2 _c_int00,B0
mvkh .S2 _c_int00,B0
b .S2 B0
nop 5
3 结束语
引导装载是DSP系统软件运行的前提,文中设计的TI TMS320C6713 DSP板的Flash二级装载程序,解决了程序代码从Flash向RAM的装载,同时也适用于其它TI C6000系列DSP的程序装载,其技术设计开发思想和方法对同类系统或类似系统设计开发提供了有益的借鉴,在实际开发DSP硬件系统中有广泛的应用。
|