C5402 DSP自举引导方法的分析与研究.docx

上传人:b****6 文档编号:6686098 上传时间:2023-01-09 格式:DOCX 页数:9 大小:31.04KB
下载 相关 举报
C5402 DSP自举引导方法的分析与研究.docx_第1页
第1页 / 共9页
C5402 DSP自举引导方法的分析与研究.docx_第2页
第2页 / 共9页
C5402 DSP自举引导方法的分析与研究.docx_第3页
第3页 / 共9页
C5402 DSP自举引导方法的分析与研究.docx_第4页
第4页 / 共9页
C5402 DSP自举引导方法的分析与研究.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

C5402 DSP自举引导方法的分析与研究.docx

《C5402 DSP自举引导方法的分析与研究.docx》由会员分享,可在线阅读,更多相关《C5402 DSP自举引导方法的分析与研究.docx(9页珍藏版)》请在冰豆网上搜索。

C5402 DSP自举引导方法的分析与研究.docx

C5402DSP自举引导方法的分析与研究

'C5402DSP自举引导方法的分析与研究

 

在DSP领域,TI公司一直处于世界霸主地位,它生产的TMS320系列DSP芯片以其独特的哈佛结构、硬件密集型方案和灵活的指令系统成为数字信号处理器产业中的领先者。

其C5000系列DSP芯片具有功耗小、高度并行等优点,可以满足众多领域的实时处理要求。

尤其是新近推出的TMS320VC5402以其独有的高性能、低功耗及低价位等优势。

为充分利用DSP快速运行的优点,通常希望用户程序能在DSP中高速运行,这就需要运用DSP自举引导功能。

本节以C5402为例,说明自举引导的特点及自举表建立的步骤。

1自举引导方式简介

众所周知,欲获得全速的DSP运行速度,对大多数用户而言,可行的方法是利用DSP自举引导功能。

Bootlooader(自举引导程序,也称引导装载程序)是在出厂前固化在DSP芯片内ROM中的一段程序代码,其主要功能是在上电或复位时将用户程序从外部加载至程序存储器(片内RAM或扩展的RAM)中,以便实现高速运行。

因此,用这种方法可以以较低成本实现高速运行。

不同型号的DSP,其Bootlooader也不同。

如TMS320C54X系列的DSP提供了四种自举引导方法:

并行EPROM、并行I/O口、串行口及主机接口HPI自举引导方式,它们适用于不同的应用场合。

2C5402DSP自举引导方式

新近推出的C5402DSP片内ROM掩膜的Bootlooader程序包括以下五种自举引导方式:

主机接口HPI、并行口、标准串行口、8位串行EEPROM及I/O口自举引导方式。

DSP上电复位后,首先检查其MP/MC引脚,如果该引脚为高电平,说明DSP被设置为微处理器工作方式,即从外部程序存储器0FF80h地址开始执行用户程序;若该引脚为低电平说明DSP被设置为微计算机工作方式,即从片内ROM的0FF80h起执行程序。

C5402DSP片内4KROM掩膜了TI设计的几段程序,其中包括自举引导程序,具体内容如表1所示。

因此,为利用自举引导功能,必须将DSP设置为微计算机工作方式,即MP/MC=0。

表1C5402片内ROM分配表

起始地址

内 容

F000h

F800h

FC00h

FD00h

FE00h

FF00h

FF80h

预留

自举引导程序

256字μ律扩充表

256字A律扩充表

256字正弦查找表

预留

中断向量表

在执行自举引导搬移程序之前,首先进行初始化,其程序片段如下:

0000:

F800

SSBXINTM;INTM=1,使中断失效

STM#0FFFFh,IFR;清除IFR标志

LD#0h,DP;DP=0,数据存储器页指针为0

ORM#02B00h,ST1;XF=INTM=OVM=SXM=1

ORM#020h,PMST;OVLY=1

STM#07FFFh,SWWSR;SWWSR=07FFFh

STM#07Dh,SP;SP=07Dh

从以上程序可看出,初始化的内容主要包括:

①关闭所有可屏蔽中断(INTM=1);

②将片内DARAM映射至程序/数据存储空间(OVLY=1);

③将程序、数据及I/O存储空间均设置为7个等待状态(SWWSR=07FFFh)。

初始化完成后,根据外部设定的条件,选择不同的自举引导方式,判断条件是有先后顺序的,其流程如图1的示。

图1中各种自举引导方式各有特点:

①主机接口HPI自举引导方式

欲执行的程序代码通过HPI(主机接口总线)由外部主处理器加载至片内存储器中。

一旦主处理改变了被加载代码的起始地址(存放于内存007Fh处),便开始执行程序。

②8位串行EEPROM自举引导方式引导程序通过一串联的EEPROM读取自举表,并按照自举表中指定的方式加载代码。

该EEPROM与设置为clockstop模式的多通道缓冲串口McBSP1相连接。

③并行自举引导方式

自举引导程序通过外部并行接口总线读取存放于数据存储空间中的自举表。

自举表的内容包括:

欲加载的各段代码、各代码段长度、各代码段存放的目标地址、程序入口地址及其它配置信息。

④标准串行口自举引导方式

自举引导程序通过被设置为标准模式的多通道缓冲串口McBSP0读取自举表,并按照自举表中指定的方式加载代码。

McBSP0及McBSP1分别支持16位及8位串行接收方式。

⑤I/O自举引导方式

自举引导程序通过外部并行接口总线从地址为0h的I/O口读取自举表。

该外部并行接口总线使用了异步握手协议(利用XF及BIO引脚),使数据传输速度可按外部设备的要求设置。

3并行自举引导方式

在C5402的五种自举引导方式中,并行自举引导广度划最常用的一种。

欲加载的各代码段存放在字宽为8位或16位的外部存储器中,在自举引导时,通过外部并行接口总线将这些代码从数据存储空间传送到程序存储空间。

在并行引导方式中,由于可重新设置SWWSR及BSCR寄存器的内容,所以当从快速的外部存储器EEPROM引导用户程序时,可采用较少的软件等待状态(默认为7个等待状态)。

并行自举引导方式流程图如图2所示。

从图2可知,自举表首地址既可从地址为0FFFFh的I/O口读取,也可从地址为0FFFFh的数据存储器获得。

两种方式中,后者更为方便,因在单片的外部存储器EPROM或FLASH中可同时包含自举表内容及自举表存放的首地址。

对'C5402而言,有效的外部数据存储器的地址范围为04000h~0FFFFh。

并行自举引导程序片段如下:

...

xentry.set61H;61h存放程序入口地址的XPC值

entry.set62h;62存放程序入口地址

src.set65H;65h存放自举表首地址

...

0000:

F831

STM#0h,@xentry;初始化程序入口地址

STM#boot,@entry;

PORTR#0FFFFh,@src;从I/O口读取自举表的首地址

MVDK@src,AR1;将自举表的首地址送至AR1口

LD*AR1+,A;(AR1)→A,AR1=AR1+1

SUB#010Aah,A,B;B=A-10AAh

BCpar16,BEQ;若B=0,执行16位并行自举程序

AND#0FFh,A;屏蔽A高16位

SUB#08h,A,B;B=A-08h

BCchk_data,BNEQ;若B≠0,程序跳转至clk_data

LD*AR1+,A;(AR1)→A,AR1=AR1+1

AND#0FFh,A;屏蔽A高16位

SUB#0AAh,A;A=A-0AAh

BCpar08,AEQ;若A=0,执行9位并行自举程序

chk_dataSTM#0FFFFh,AR1;从数据存储器读取自举表首地址

NOP;避免流水线冲突

NOP;避免流水线冲突

LD*AR1+,A;(AR1)→A,AR1=AR1+1

STLMA,AR1;将A低16位内容存入AR1中

NOP;避免流水线冲突

NOP;避免流水线冲突

LD*AR1+,A;(AR1)→A,AR1=AR1+1

SUB#010AAh,A,B;B=A-10AAh

BCpar16,BEQ;若B=0,执行16位并行自举程序

STM#0FFFFh,AR1;(0FFFFh)→AR1

NOP;避免流水线冲突

NOP;避免流水线冲突

LDU*AR1-,A;(AR1)→A,AR1=AR1-1,符号位置0

AND#0FFh,A;屏蔽A高16位

SUB#08h,A,B;B=A-08h

BCser_ini,BNEQ;若B≠0,程序跳转至ser_ini

LD*AR1+,A;(AR1)→A,AR1=AR1+1

AND#0FFh,A;屏蔽A高16位

SUB#0AAh,A;A=A-0AAh

BCpar098,AEQ;若A=0,执行8位并行自举程序

Ser_ini

...;标准串行口自举引导程序

par08

...;8位并行自举搬移程序

par16

...;16位并行自举搬移程序

4自举表的建立

自举表内容不仅包括了欲加载的各段代码,而且包括各段代码长度、各代码段存放的目标地址、程序入口地址等信息。

因此若想利用自举引导功能,首先必须正确建立自举表。

自举表可由hex500格式转换器自动生成。

Hex500实际为一通用程序,它将公共目标文件格式——COFF文件转换成各种EPROM或FLASH的编程格式。

因此,在使用hex500工具之前,首先必须对DSP的汇编语言、C语言或两者的混合编程语言进行汇编、编译、链接,生成COFF格式的.out文件,然后再通过设置适当的选项生成用户所要求的自举表。

为了书写及修改方便,可将hex500的所有选项及输入输出文件名以.cmd批处理命令文件的形式保存。

下面以一个DSP汇编语言程序example.asm为例,说明建立'C5402自举表的具体步骤。

第一步:

对example.asm进行编译,生成example.obj文件。

不论是用Windows环境下的CCS(CodeComposerStudio),还是用DOS环境下的asm500命令文件,编译时必须加选项一v548,且DOS的asm500版本必须在1.2以上,否则无法生成正确的'C5402自举表。

第二步:

链接,生成example.out文件。

第三步:

使用hex500格式转换工具,将example.out文件转换成example.hex文件,命令格式如下:

C:

>hex500example.emd

注:

在上面的命令行中,example的扩展名cmd一定要加上。

以下是命令文件example.cmd的内容:

example.out/*被转换的COFF文件名

-e200h/*程序入口地址被定义为200h

-a/*转换为ASCII-hex格式文件

-oexample.hex/*转换后文件名为example.hex

-memwidth16/*外部数据存储器字宽为16位

-romwidth16/*ROM字宽为16位

-boot/*将COFF文件中各段均转换至自举表

-bootorg8000h/*存放自举表的首地址为8000h

如果example.asm是一个简单的求乘法累加运算,程序内部如下[2]:

*****************************************

*example.asmy=a1*x1+a2*x2+a3*x3+a4*x4*

*****************************************

.title"example.asm";源程序取名为example.adm

STACK.usect"STACK",10h;为名为STACK的椎栈预留16个单元

.bssx,4;在数据存储器中为未初始化变量(续)x,a,y分别预留4,4,1个单元

.bssa,4

.bssy,1

.defstart;

.data以下为数据段

table:

word1,2,3,4;在以标号table开始的8个程序存储单元中存放8个已初始化数据

.word8,6,4,2

.text;以下为程序段

start:

STM#STACK+10,SP;设置堆栈指针

STM#table,AR1;AR1指向table的首地址

STM#x,AR2;AR2指向存放变量x的首地址

STM#7,AR0;AR0=7

LD#0,A;A=0

loop:

LD*AR1+,A;(AR1)→A,AR1=AR1+1

STLA,*AR2+;A→(AR2),AR2=AR2+1

BANZloop,*AR0-;若AR0≠0,循环,AR0=AR0-1

CALLsum;若AR0=0,调用sum子程序

end:

Bend;

sum:

LD#0,A;A=0

STM#a,AR3;AR3指向存放变量a的首地址

STM#x,AR4;AR4指向存放变量x的首地址

RPT#3;

MACAR3+,AR4+,A;完成三次乘法累加运算

STLA,@y;将结果存入顶留的数据存储器中

RET;返回主程序

.end;结束汇编命令

则生成的example.hex文件的内容如表2所示。

表2example.hex文件的内容

$A8000,

10 AA 7F FF F8 00 00 00 02 00 00 1A 00 00 02 00 77 18 00

0B 77 11 00 80 77 12 00 60 77 10 00 07 E8 00 10 91 80 92

6C 88 02 09 F0 74 02 11 F0 73 02 0F E8 00 77 13 00 74 77

14 00 60 EC 03 B0 9A 80 68 FC 00

00 08 00 00 00 80 00 01 00 02 00 03 00 04 00 08 00 06 00 04

00 02 00

如果将example.hex的内容烧写至16位EPROM中,则其数据存储器内部组织结构如表3所示。

表316位FPROM的数据组织结构

数据区地址

内 容

含 义

8000h

8001h

8002h

8003h

8004h

8005h

8006h

8007h

8008h

8009h

……

8020h

8021h

8022h

8023h

8024h

8025h

8026h

……

802Bh

802Ch

802Dh

……

0FFFFh

10AA

7FFF

F800

0000

0200

001A

0000

0200

7718

000B

……

8068

FC00

0008

0000

0080

0001

0002

……

0004

0002

0000

……

8000

16位自举标记

SWWSR

BSCR

程序入口XPC

程序入口地址

程序段长度

存放目标XPC

存放目标地址

程序代码1

程序代码2

……

程序代码25

程序代码26(1Ah)

数据段长度

存放目标XPC

存放目标地址

数据码1

数据码2

……

数据码7

数据码8

块结束标志

……

自举表存放首地址

 

由表3的EPROM数据组织结构可看出,在0FFFFh地址处存放的是自举表首地址8000h。

从8000h处开始是16位自举表的内容。

自举表的第一个字是16位自举标记10AA,第二、三个字分别为寄存器SWWSR及BSCR的内容。

从第四个字开始分别是程序入口地址、各代码段长度、存放各代码段的目标地址及各段代码(本例含有程序段及数据段),最后为块结束标志0000h。

这样,一个正确的自举表就建立起来。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1