您当前的位置:五五电子网电子知识单片机-工控设备DSP/FPGA技术用DSP软件编程实现的引导装载系统(三) 正文
用DSP软件编程实现的引导装载系统(三)

用DSP软件编程实现的引导装载系统(三)

点击数:7335 次   录入时间:03-04 11:36:20   整理:http://www.55dianzi.com   DSP/FPGA技术

仔细分析FLASH的命令字序列可知,其实前三句命令字序列中真正起作用的地址位是A0-A14,而高地址位A15-A17可以是任意值,于是考虑加一个地址偏移量0x8000,以使得重映射后的FLASH地址在DSP中是可见的。修改后的代码为:

#define OFFSET Ox8000

FlashWrite(((k5555L+OFFSET),0x00AA);// 19tcycle

FlashWrite((0x2AAAL+OFFSET),0x0055);// 2ndcycle

FlashWrite((0x5555L+OFFSET),0x00A0);

// 3rdf cycle(重映射的写入命令)

FlashWrite(myaddress,mydata): // 将数据mydata

写入FLASH地址myaddress

这样,在DSP中就可以对外部FLASH进行写入操作了,而其前提是FLASH地址myaddress在DSP中可见。其它的擦除和读操作也要对照图1作类似的地址重映射。

在DSP将数据写入FLASH之前,只有先删除数据所在块,然后才能重新写入。擦除和写操作之前都要执行如表2所示的相应命令字序列。其中要写入的数据部分即为引导程序以及用户程序经过编译、连接后的目标代码,为M29W400T可识别的HEX格式。

3 软件描述

3.1 功能分析

引导装载系统主要由引导程序和用户程序两部分构成,最后都存储在外扩的M29W400T的指定地址中。以上主要叙述的是如何将目标代码写入M29W400T,下面叙述如何设计引导程序和用户程序,以及生成最后目标代码的方法。

由于DSP采用微计算机工作模式。因此,在加电后,DSP将首先执行0xFF80处的中断向量表起始处的跳转命令,然后转向0xF800处的引导程序并实现代码移植功能。完毕后,再次跳转到移植后的用户程序的起始地址并执行。

以一个完整的引导装载系统为例,设用户程序是从TMS320VC5410的XF管脚输出一个均匀方波。此段代码也可以被其它用户程序替代,因此本文的引导装载系统具有一定的通用性。

3.2 代码实现

利用TI公司的DSP集成开发套件CCS可以生成*.out格式的目标代码,首先要建立引导程序段、用户程序段、中断向量表和连接命令文件四部分。引导程序段负责将用户程序段和中断向量表装载到目标地址,用户程序段是实现用户系统功能的核心代码(本文仅以实现输出一个方波为例),中断向量表包括自启时的跳转处理和中断服务程序的人口;连接命令文件则是分配各个程序段在DSP地址空间中的位置,协助生成目标代码,在这四部分中,引导程序段是设计重点,它负责将中断向量表和用户代码段从片外的M29W400T移植到片内的RAM中,并且将程序指针指向用户代码段起始地址。其引导程序段(1Oad. asm)的命令代码如下:

.def load_start

.sect,"load_prg"

load_start:

ssbx intm ;关中断

rsbx sxm ;符号扩展模式设置为0

ld #0,dp ;定义数据页指针为0

nop

nop

nop

1d #0ff80h,a ;移植中断向量表,

0xff80为中断向量表的旧起始地址

stm # VECT_NEW,arl;VECT_NEW表示中断向量表的新起始地址

rpt#(VECT_LEN_1);VECT_LEN表示中断向量表的长度

reada * arl+

nop

ld # MAIN_OLD,a ;移植用户程序段,

MAm_OlD表示用户程序段的旧起始地址

stm # MAIN-NEW,arl ;MAIN_NEW表示用户程序段的新起始地址

rpt#(MAIN_LEN_1) ;MAIN_LEN表示用户程序段的长度

reada * arl+

endboot:

orm # 020h,@ldh ;

设置OVLY=1,使得内部RAM同时映射到DSP数据和程序空间

ld # MAIN_NEW,a

bacc a ;程序指针指向用户程序段的起始地址

.end

用户程序段(main.asm)代码如下:

.def main_start

.sect "main_prg"

main_start:

loop: rsbx xf ;实现XF的复位和置位

nop

ssbx Xf

nop

b loop

.end

中断向量表(vect.asm)如下:

.mmregs

.Ief main_ start

.ref lOad_start

.def reset

.def nmi

.sect"".vectors""

reset: bd load_start ;加电后,跳转到自启程序段起始地址

stm #200,sp

nmi: rete ;

此表中只包含NMI中断入口,也可以类似添加其他中断入口

nop

nop

nop

.end

连接命令文件(boot.cmd)的配置如下:

vect.obj

main.obj

load.obj

-O boot.out

SECTIONS

{

main_prg:load=MAIN_OID,run=MAIN_NEW

vectors: load=0ff80h,run=VECF_NEW

load_prg:load=0f800h

}

上述引导程序经过CCS编译及连接后,生成的目标文件boot.out是TMS320VC5410能够识别的COFF格式,但是M29W400T不支持这种格式,所以不能直接写入FLASH中。而CCS自身带有多种HEX类型的转换程序。因此,在经过格式转换后,即可得到对应于上文提到的一系列数据和地址mydata和myaddress,此时就可以在联机情况下利用CCS以DSP软件编程方式将目标代码写入到M29W400T之中。一旦写入成功,便可以脱机加电自启系统。同时,在经一段时间后,还可用示波器测得XF管脚输出的均匀脉冲方波,以证明引导装载成功。




本文关键字:软件编程  DSP/FPGA技术单片机-工控设备 - DSP/FPGA技术