萌宅千姬变类似的小说:TMS320VC33外部FLASH在系统编程与并行自举引导技术

来源:百度文库 编辑:九乡新闻网 时间:2024/04/25 19:18:11
l TMS320C5402片外存储空间的优化设计
C5402的存储空间可达192 k×16 b。64 k程序空间,64 k数据空间,64 k 1/O空间。C5402片内具有4 k×1 6 b的ROM和16 k×16 b的RAM。片内POM和RAM可以根据PMST寄存器中的DROM,OVLY来灵活设置,使其映像在程序空间和数据空问。程序空间和数据空间未被映像的部分和64 k的1/O空间全部在片外,用片外存储器来补充。在实际的应用中,应该根据程序量的大小来选择作为片外空间的存储芯片的容量,以免造成不必要的浪费,本文选择IS6lLV256l 6AL(256 k×16 b)作为程序存储器的片外存储芯片.SST39LF200A(128 k×16 b)的FLASH作为数据存储器的片外存储芯片,以实现自举家载,使C5402自成独立系统,图l为硬件连接图。

IS61LV256l 6AL的工作电压为3~3.6 V.可以直接与TMS320C5402接口连接,而不必再使用电压接口芯片进行转接,使硬件电路更为简单。Am29LV200B是AMD公司生产的FLASH存储器.其主要特点有:3 V单电源供电.可使内部产生高电压进行编程和擦除操作;支持JE-DEC单电源FLASH存储器标准;只需向其命令寄存器写入标准的微处理器指令.具体编程、擦除操作由内部嵌入算法实现,并且可以通过查询特定的引脚或数据线监控操作是否完成;可以对任一扇区进行渎、写或擦除操作,而不影响其他部分的数据。
在访问存储空间时,当地址落在片内存储区域内,自动对这些区域进行访问;当地址落在片外区域,自动访问外部存储器。使用片内存储器有3个优点:高速执行(不需要等待)、低歼销、低功耗、所以应尽量使用片内存储器。
2 TMS320C5402的Bootload设计
在T1公司的DSP芯片出厂时,片内ROM中固化有引导装载程序Bootloa&dr,其主要功能就是将外部的程序装载到片内RAM中运行,以提高系统的运行速度。TMS320VC5402的Bootloader程序位于片内RoM的0F800H~OFBFFH空间。当系统上电时,DSp将检查外部引脚MP/MC的状态,如果该引脚为高电平,则DSP按微处理器模式启动,从片外OFlF80H地址处开始执行程序;如果该引脚为低电平,则DSP按微计算机模式启动,系统从片内OFF80H地址处开始执行程序,片内OFF80H~OFFFF是固化的中断矢量表,此处有一条跳转指令。因此,如果系统上电时MP/MC的状态为低电平,DSP复位后将从FF80H处跳转到F800H开始执行Bootloadel'自动装载程序。在装载程序之前,先自动进行如下初始化工作:INTM一1(使中断无效),OVLY=1(内部RAM映像程序/数据存储器),对程序和数据区均设置7个等待状态等。然后,选择有效的自举方式进行自举加载程序。
2.1选择自举方式
Bootloader能提供许多种引导方式以适配不同的系统设备,包括2种并行总线方式、串口方式以及主机口方式(HPI),还可以支持8 b和16 b的模式,具有很强的系统灵活性。在判断前面的引导方式无效后,Bootloader会进入并行引导装载模式,Bootloader首先读取地址为OFFFFH的I/O空间单元,并将该单元的值作为引导表的首地址。在数据地址空间中读取引导表的第一个字,来判断是8 b引导模式还是16 b引导模式。在本设计中,引导表的首地址是存放在数据存储器0FFFF单元,Bootloader从I/O地址空间中读取的引导表首地址所对应的引导表中得不到正确的引导信息,于是Bootloader会自动转向数据空间,从数据空间的OFFFFH地址再去读一个字作为引导表首地址,进而再从引导表首地址读取一个字。如果该字为10AAH,则立即进入16 b引导模式;否则,将按8 b方式处理:从OFFFFH读取一字节作为引导表首地址的低字节,从0FFFEH读取一字节作为引导首地址的高字节,再从引导表首地址读取一个值,如果低字节为08H,则再读引导表的下一个值,如果为AAH,则说明外部存储器是8 b宽度,进入8 b引导装载模式。由于在本设计中采用16 b引导模式,Bootloader不会进入8 b模式和后面的串行口引导方式。其选择流程图如图2所示。


2.2 FLASH的数据组织
自举表内容包括Boot表头和欲加载的应用程序代码。Boot表头包括欲加载的应用程序代码长度、代码段存放的目标地址、程序入口地址等信息。若要完成自举引导功能,必须建立正确的自举表,如表1所示。自举表可以由hex500格式转换器自动生成;也可以手动建立自举表,就是把被烧写的程序直接放在烧写程序中,根据被烧写程序的相关信息手动建立自举表。
手动建立自举表的关键是设计Boot表头,下面是一个表头的设计实例,设程序代码长度为0150H,运行地址和存放地址都为0200H。
BOOT.HEADER:
.WORD 0X10AA ;数据宽度16 b
.WORD 0X7FFF ;SWWSR
.WORD OXF800 ;BSCR
.WORD OX0000 ;程序人口XPC
.WORD 0X0200 ;程序入口地址
.WORD OX0150 ;程序段长度
.WORD 0X0000 ;存放目标XPC
.WORD OX0200 ;存放目标地址
手动建立自举表的过程为:连接好DSP开发系统,运行CCS软件;将欲加载程序在CCS上运行生存.out文件,并复制;选用16 b FLASH存储器,生成Boot表头;将要写入存储器的数据存放在cform.dat文件中。然后就可以利用擦写程序将cform.dat文件中的数据在线写到FLASH的8000H FFFFH地址段(首地址为8000H)。
2.3 在线擦写FLASH程序
;先将FLAsH读写跳线设置为写方式
;*****FLASH_ erase_ wr.asm******
.mmregs
.global-C int00,start,FLASHWR,FLASHERASE
FLASHMEMl .set 0xd555
FLASHMEM2 .set 0xaaaa
.data
WORDBEGIN:
.copy "cform.dat"
WORDEND:
.text
_c_int00:B start
NOP
NOP
start:
STM #0,STO
STM #0100001101011 11 1b,STl
NOP
RSBX SXM
STM #0010000000100100b,PMST
NOP
STM #0aoh,SP
NOP
NOP
STM #7fffh,SWWSR
NOP
STM #0,CLKMD
NOP
NOP
STM #17ffh.CLKMD
NOP
RPT #255
NOP
NOP
MAIN:
CALL FLASHERASE
STM #WORDBEGIN,ARO
STM #0x8000,Arl
LD #WORDEND,A
AND #0xffff,A
LDM ARO,B
AND #0xffff,B
SUB B,A
NOP
STLM A,AR2
STM #8000h,AR3
NOP
WRRPT:
NOP
LD *AR0+,B
CALL FLASHWR
NOP
BANZ WRRPT,*AR2一
NOP
WRFFFF:
STM #0xffff,Arl
LD #0x8000,B
CALL FLASHwr
NOP
NOP
B Mainend
FLAsHERAsE: ;FLASH擦除程序
NOP
LD #0xaa,A
STL A。*(FLASHMEMl)
NOP
NOP
LD#0x55,A
STL A,*(FLASHMEM2)
NOP
NOP
LD #0x80,A
STL A,*(FLASHMEMl)
NOP
NOP
LD #0xaa,A
STL
NOP
NOP
LD
STL
NOP
NOP
A,*(FLASHMEMl)
#Ox55,A
A,*(FLASHMEM2)
LD #OxlO,A
STL A,*(FLASHMEMl)
NOP
NOP
NOP
RET
FLAsHwR: ;FLAsH擦除程序
STM #Ox7fff,SWWSR
NOP
NOP
LD #Oxaa,A
STL A,*(FLASHMEMl)
NOP
NOP
LD #Ox55,A
NOP
NOP
STL A,*(FLASHMEM2)
NOP
NOP
NOP
LD#OxaO,A
NOP
NOP
STL A,*(FLASHMEMl)
NOP
NOP
NOP
STL B,*AR3+
NOP
NOP
NOP
NOP
NOP
STM Ox7 000。SWWSR
RET
MAINEND:
End
3 结 语
利用上述方法将程序烧写入FIASH后,复位TMS320C5402,使其处于微计算机工作方式;将FLASH读写跳线设置为读方式。系统重新加电后,在CCS中观察数据存储器空间,其中FLASH所占的空间的内容与cform.dat文件的内容应一致.