TMS320VC5402DSP的并行引导加载.docx
- 文档编号:12756602
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:12
- 大小:127.46KB
TMS320VC5402DSP的并行引导加载.docx
《TMS320VC5402DSP的并行引导加载.docx》由会员分享,可在线阅读,更多相关《TMS320VC5402DSP的并行引导加载.docx(12页珍藏版)》请在冰豆网上搜索。
TMS320VC5402DSP的并行引导加载
摘要
在54’x系列DSP的应用设计中,DSP的运行速度是衡量系统性能的一项重要指标.要达到预期的运行速度,就要给DSP系统的程序空间设计一个高速程序存储空间.引导是将程序存储在低速但停电数据不丢失的器件中,运行时使用存取速度快的RAM作为程序运行存储体,这样既可保证停电时数据不丢失又可进行高速数据存取.本文介绍TMS320VC5402并行引导方案的设计
关键词:
TMS320VC5402FLASHBootLoader
目录
1、主要芯片介绍2
1.1TMS320VC5402简介2
1.2闪存SST39VF400A简介3
2、C5402片内Bootloader的引导原理3
2.1C5402并行引导模式............................................4
2.2Bootloader的引导原理............................................4
3、系统硬件电路的设计6
4、系统软件设计7
4.1测试程序设计7
4.2用户初始化程序设计7
4.3引导表的建立及引导装载过程9
5、课程设计心得12
参考文献14
1、主要芯片介绍
1.1TMS320VC5402简介
TMS320VC5402(以下简称C5402)是德州仪器公司(TI)1999年10月推出的性价比极高(目标价格仅为5美元)的定点数字信号处理器(DSP)。
C5402主要特点如下[1]:
·操作速率达100MIPS;
·具有先进的多总线结构,三条16位数据存储器总线和一条程序存储器总线;
·40位算术逻辑单元(ALU),包括一个40位桶形移位器和两个40位累加器;
·一个17×17乘法器和一个40位专用加法器,允许16位带/不带符号的乘法;
·整合维特比加速器,用于提高维特比编译码的速度;
·单周期正规化及指数译码;
·8个辅助寄存器及一个软件栈,允许使用业界最先进的定点DSPC语言编译器;
·数据/程序寻址空间1M×16bit,内置4K×16bitROM和16K×16bitRAM;
·内置可编程等待状态发生器、锁相环(PLL)时钟产生器、两个多通道缓冲串行口、一个8位并行与外部处理器通信的HPI口、2个16位定时器以及6通道DMA控制器;
·低功耗,工作电源有3V和1.8V(内核),特别适合电池供电设备。
由此可见,与TMS32054X系列的其它芯片相比,C5402以其独有的高性能、低功耗和低价格特性,使得一推出就受到业内用户的欢迎。
但它的内部结构和片内掩模的引导装载(Bootloader)程序与C54X系列的其它DSP处理器有较大的差异,而它的应用对象又大多是要求能脱机运行,如机顶盒(STB)、个人数字助理(PDA)和数字无线通信等内嵌式系统。
1.2闪存SST39VF400A简介
闪烁存储器(flashmemory)是可以在线电擦写、掉电后信息不丢失的存储器。
SST39VF400A是SST公司推出的256K×1位产品,可以直接与DSP相接,具有以下主要特点:
(1)可直接与3.3V的高性能DSP接口,简化了系统的电源要求;
(2)最快的存取速度高达90ns,CMOS工艺,具有100000次写入/擦写寿命;
(3)低功耗;
(4)灵活的块结构支持整片擦除、块擦除、段擦除;
(5)块保护功能,具有防止对任何区段进行编程或擦除的硬件保护机制;
(6)与JEDEC标准兼容,引脚分布和命令集与单电源flash相兼容。
2、C5402的并行Bootloader原理
2.1C5402并行引导模式
C5402加电时,如果芯片检测到MP/MC引脚电平为低电平,系统从0FF80H开始执行代码.此处有一个分支指令(厂家编程设置的),可以跳转到引导程序的开始地址(0F800H).这个程序可以在引导之前设置CPU状态寄存器的初始值.中断被全部禁止,OVLY设置为1,程序和数据存取等待时间被设置为7个等待周期,然后开始程序的引导.当C5402检测到INT2引脚为高电平、INT3引脚为高电平,即2个引脚都无效时,C5402会转到行引导方式.并行引导方式是通过扩展的内存接口从数据地址空间读取所需的引导表,再将代码传送到程序存储区.并行引导既支持8位的数据宽度,也支持16位的数据宽度.软件可编程等待寄存器(SWWSR)和块切换控制寄存器(BSCR)都可以在这2种模式中得到设置.
2.2Bootloader的引导原理
C5402的Bootloader在系统加电时把外部源程序传送到内部存储器或内部程序空间。
它允许程序被存放在外部慢速的存储器中,并调到高速的存储器中运行。
这可大大减小C5402内部RAM掩模的需要,降低电路设计的成本。
C5402的内部ROM中有固化好的加载程序。
如果DSP的MP/MC管脚接低,在DSP加电RESET时,程序就从内部ROM的FF80H地址开始行运行。
在FF80H处,有一条跳转到BOOT程序的指令,执行内部固化好的BOOT程序。
BOOT程序在运行搬移程序之前,首先进行初始化,工作包括关闭中断、将内部RAM映射在程序/数据空间,以及为访问数据和程序空间设置的七个软件等待等;然后根据设计完成不同方式下程序的搬移。
C5402共有上面讲述的5种加载方式。
这里只讨论并口加载方案的设计,其流程如图1所示。
在判断前几种加载方式无效后,Bootloader从I/O空间0FFFFH处读取一个16位的程序起始地址。
然后根据这个地址从外部数据区读入一个字,判断是否为在判断前几种加载方式无效后,Bootloader从I/O空间0FFFFH处读取一个16位的程序起始地址。
然后根据这个地址从外部数据区读入一个字,判断是否为10AAH。
如果是,就采用16位的搬移方式;否则,就判断读入的字的低位字节和下一个地址读入的字的低字节组成的16位字。
如果是08AAH,就采用8位并行加载方式;否则,就在外部数据空间的0FFFFH读取一个16位的程序起始地址,然后重复上面的检测方法。
3、系统硬件电路的设计
Bootloader是通过仿真器和JTAG口借助DSP芯片将Boot表写入FLASH的过程。
这对系统的要求是必须将FLASH与DSP芯片的HPI口或串口或并口等数据通道管脚相连。
FLASH存储器是可以在线电擦写、掉电后信息不丢失的存储器。
FLASH与EPROM相比,具有更高的性能价格比,而且体积小、功耗低、擦写速度快、使用比较方便。
因此,采用FLASH存储程序和固定数据是一种比较好的选择。
各种FLASH芯片大同小异,本文采用存储容量为256KW的SST39VF400芯片作为C5402的外扩FLASH程序存储器,电路见图2。
图2C5402外扩FLASH存储器简图
其中A0~A14作为外部地址引脚,A15~A18通过跳线,将256KW的FLASH存储器分割为大小为32KW的8块,实现手动翻页。
FLASH的0000h~7fffh映射到数据空间的8000h~FFFFh,在本例中将跳线JP1~JP3设为000,将Boot表存放在FLASH从0x8000h开始的空间里。
74LVC139D是一个双四选一数据选择器,按图所示分别连接到C5402的MSTRB、R/W、XF和DS端。
实现DSP对外扩FLASH、数据存储器、程序存储器(外扩数据存储器、程序存储器未画出)片选及读写控制。
4、系统软件设计
4.1测试程序设计
由于Bootloader需要完成的是系统的脱机运行,因此可用一个简单可靠的测试程序验证硬件是否已经协调工作。
下面是一个可行的方法,通过设置XF的电平高低,让XF输出不同频率的方波,或者在XF管脚外接一个发光二极管,就可以直观的看到系统有没有协调工作。
test:
nop
rsbx,1,13/*将XF管脚置为低电平*/
calldelay/*调用延时子程序*/
ssbx1,13/*将XF管脚置为高电平*/
calldelay/*调用延时子程序*/
btest/*循环运行*/
4.2用户初始化程序设计
.c-mode
.mmregs
CONST-COPY.set1
.sect“.boot”
.global–c-int00
.global–main,-exit,-STACK-SIZE
-stack:
.usect“.stack”,0;定义堆栈
-c-int00
****堆栈初始化****
STM#-stack,SP;栈底-->SP
ADDM#(-STACK-SIZE-1),*(SP);SP+栈长度=>栈顶-->SP
ANDM#0fffeh,*(SP);让SP为偶地址
SSBXSXM;STM置位
LD#cinit,A
****寄存器初始化****
SSBXCPL;打开编译模式位
RSBXOVM;清除溢出位
LD#0,ARP
RSBXC16
RSBXCMPT
RSBXFRCT
SSBXXF
****变量区初始化****
stm#0x3a00,arl
st#0,*arl+
st#0,*arl+
st#0,*arl
****常量区初始化*****
-const-init
STM#03a24h,AR2;常量区.const运行地址->AR2
RPT#05fh
MVPD#0f000h,*AR2+;将.const由flash拷贝到RAM区
****程序初始化****
STM#0cc0h,AR2;程序段.text运行地址->AR2
RPT#300h
MVPD#0f000h,*AR2+;将.text由flash拷贝到RAM区
****中断向量表初始化****
STM#080h,AR2;中断向量表.vector运行地址->AR2
RPT#07fh
MVPD#0ff80h,*AR2+;将.vector由flash拷贝到RAM区
CALL-main;转入主程序入口
CALL-exit;转入结束程序入口
RET
.end
4.3引导表的建立及引导装载过程
为了实现DSP加电自举,flash中的数据必须按照引导表的格式“烧写”。
引导表的作用是:
DSP运行此表时,首先根据引导表中前部分用户起始地址,把后面的用户程序代码加载到DSP片内程序空间中相应的用户地址区域(由于Flash与DSP时间不匹配,要设置好SWWR和BSCR寄存器),然后,根据引导表中的程序入口地址,在程序空间相应的地址开始运行程序。
图3为l6位并行引导的代码结构(引导表在空间允许的情况下可以放几个程序代码段。
为便于说明,在此只说明一个程序代码段的情况)。
10AA(并行寻址格式)
SWWSR寄存器的初始值
BSCR寄存器的初始值
用户程序入口的XPC
用户程序入口的地址PC
用户程序的长度
用户程序起始地址XPC
用户程序起始地址PC
用户程序代码…
0000(表示引导表结束)
图3并行自举表的代码结构
下面结合一个实例,说明利用hex500命令生成二进制数据引导表的方法。
所编写的一个用户程序名为fan.C,在编译链接成功后生成的输出文件名为fan.out;程序空间的开始地址为Oxl400,程序执行的入口地址为Oxl44F。
利用hex500工具,生成文件名为fan.hex的二进制数据,hex500命令后添加如下条件:
fan.out;要转换的.out文件
-a;生成ASCII码的形式
-a0x144F;程序空间中程序运行的开始地址
-boot;转换成引导表的形式
-bootorgPARALLEL;并行格式
-byte;按字节分配地址
-memwidthl6;系统存储器字宽度为l6位
-romwidthl6;ROM物理宽度为l6位
-swwsrOx7FFF;SWWSR设置软件等待周期
-bscr0xF800;BSCR设置段开关控制寄存器值
-Ofan.hex;输出的二进制数据文件名
生成的二进制数据文件fan.hex的数据为:
0x1OAA0x7FFFOxF8000x00000xl44F0x00Dl0x00000x1400..(用户程序代码)...OxO000:
前8个数据解释分别为:
0xlOAA:
l6位并行寻址格式:
Ox7FFF:
SWWSR初始值为0x7FFF,因为Flash的运行速度比DSP慢,所以等待7个周期;
0xF800:
BSCR初始值为0xF800:
OxO000:
引导表程序入口的XPC=0:
0x144F:
引导表程序入口的地址=0x144F:
0x00Dl:
引导表程序的长度=0x00Dl;
OxO000:
引导表起始地址XPC=0:
0x1400:
引导表的起始地址=0x1400;
编写一个数据转换程序,把二进制数据文件fan.hex转换为数组头文件fan.h。
在CCS环境下,Flash的“烧写”主程序包含此头文件,编译链接后通过仿真器下载到DSP中,运行DSP,用户程序就被“烧入”到Flash中了。
实际应用时:
在数据空间地址0xFFFF(也就是Flash的空间0xFFFF)中,“烧写”数据0x9000(Flash中存放的引导表起始地址);从Flash的地址0x9000开始,“烧入”用户引导表数据,即fan.h中的数组数据。
DSP运行情况为:
依据图l、2所示的引导装载过程,经过一系列设置,使DSP寻址到数据空间地址0xFFFF,得到引导表的起始地址0x9000;PC指针指向0x9000,执行引导表的数据;根据引导表写入信息,把后面的程序载入程序空间起始地址0x1400(xPc=O)(这时通过仿真器查看程序空间0x1400开始的数据,与仿真器下载的fan.out文件数据是一致的)。
然后,DSP的PC指针指向程序入口地址0x144F(xPc=0),开始执行用户程序,完成了DSP利用Flash实现l6位并行引导装载的过程。
4、课程设计心得
两周的DSP的课程设计,使我从中学习到了很多课堂上很难学到的东西,亲身学习实践了一次DSP的实际应用制作。
在资料的搜集整理过程中,我看了很多程序的代码和硬件电路,过程曲折可谓一语难尽,感想颇多。
从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。
设计确实有些辛苦,但苦中也有乐,在如今单一的理论学习中,很少有机会能有实践的机会。
通过这次课程设计,加强了动手、思考和解决问题的能力。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
这次课程设计终于顺利完成了,在设计中遇到了很多专业知识问题,我学也到很多实用的知识,学习了很多程序思想和硬件电路设计思想,确定设计题目后,通过比较各处的代码和硬件电路,最后确定了比较简洁高效的代码和简单的硬件电路。
也学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高,都受益非浅。
在此,感谢老师的细心指导!
参考文献
1、C54XApplicationsGuide.pdf中关于BootLoader的内容
2、赵红怡,DSP技术与应用实例,电子工业出版社,2003
3、刘益成,TMS320C54xDSP应用程序设计与开发,北京航空航天大学出版社,2002
4、邹彦,DSP原理及应用,电子工业出版社,2005年1月
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TMS320VC5402DSP 并行 引导 加载