C54x的存储空间与CMD文件编写_第1页
C54x的存储空间与CMD文件编写_第2页
C54x的存储空间与CMD文件编写_第3页
C54x的存储空间与CMD文件编写_第4页
C54x的存储空间与CMD文件编写_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序寻址空间占64KW

(可扩展到1MW)

数据存储空间占64KWI/O访问空间占64KW第6讲C54x的存储器与CMD文件编写存储器介质类型存储器物理位置存储器寻址空间片内存储器片外存储器片外I/O设备RAM(DARAM、SARAM)ROMFlash等(接口类型)本讲包含以下章节的内容:2.5C54x的存储空间结构4.5链接器的使用8.4DSP存储器和I/O扩展异步接口存储器SRAM、Flash、NvRAM……许多模拟/数字I/O也采用异步存储器接口形式同步接口存储器同步静态存储器:SBSRAM、ZBTSRAM同步动态存储器:SDRAM同步FIFO存储器按接口类型可分为:存储器类型

TIDSP外部存储器接口存储器类型C2000C3xC54xC55xC62x/C67xC64x异步存储器√√√√√√SBSRAM

√√√ZBTSRAM

√SDRAM

√√√同步FIFO

√√√数据宽度-16位--32位-16位8位16位32位8位16位32位8位16位32位64位只能与异步器件连接,如要与同步器件则需外加同步控制器异步、同步接口、FLASH接口(上电搬移程序)片内双访问RAM(DARAM)

DARAM是每个机器周期可被访问两次的存储器。所有的’C54x器件都具有片内DARAM,大小随不同型号而不同,它们主要被配置成数据存储器(可双访问操作)。但在需要时也可配置成程序存储器。片内DARAM配置成程序存储空间还是数据存储空间,要根据状态寄存器PMST的OVLY位的值判断决定。

C54x异步存储器片内单访问RAM(SARAM)

SARAM是每个机器周期仅能访问一次的存储器。’C54x器件中某些片种具有单访问RAM(SARAM),其大小随不同型号而不同,与这些SARAM相关联的地址可用于程序存储器和/或数据存储器,。

根据器件不同,可由软件或硬件配置为片内的或片外的SARAM。当配置为外部存储器时,这些地址可用于片外数据和程序存储器;当配置为内部SARAM时,程序代码可从片外ROM引导装入到片内SARAM中,并且一旦代码装入到片内SARAM中,它就可以被全速执行。由于SARAM能被分配到程序和/或数据存储器空间,因此与DARAM相比,SARAM允许更加灵活的地址分配。工厂掩模的片内ROM’C54x器件中大部分片种具有片内掩模型ROM来作为程序存储器,例如’C5402配置4K字

ROM,’C5416则配置16K字

ROM等。复位(reset)时驱动引脚为低即可选中该ROM。若不选该ROM,器件将从片外存储器开始启动执行。闪烁存储器flash’C2000器件中一些片种具有片内flash(C54x一般不具有),它是电可擦除、可编程、非易失性(可长久保存)的存储器。每块flash都有一组控制寄存器,用来擦除、编程和测试该flash块。这些flash块可以在复位期间驱动引脚为低来选择。若不选flash,器件将从片外的存储器开始执行。有的器件片内FLASH带有加密位,如LF/LC240XA系列就带有加密位。

C54xDSP的存储器空间可以分为三个单独选择的空间,即64K字的程序空间、64K字的数据空间和64K字的I/O空间。一些C54xDSP芯片采用了分页扩展方法可访问8M的程序空间。在任何一个存储空间内,RAM、ROM、EPROM、EEPROM或存储器映射外设都可以驻留在片内或者片外。存储器地址空间分配

C54xDSP具有三个CPU状态寄存器位,影响存储器的配置,这三个状态位是处理器模式状态寄存器(PMST)中的:、OVLY和DROM。注意:若用户需要运行BOOT程序应选用微计算机模式TMS320VC5402存储器映射图F000hHPIRAM1000h17FFh

(1)位:①若=0,则片内ROM映射到程序存储空间;②若=1,则片内ROM不映射到程序存储空间。

(2) OVLY位:①若OVLY=1,则片内RAM映射到程序和数据存储空间;②若OVLY=0,则片内RAM只映射到数据存储空间。

(3) DROM位:①若DROM=1,则部分片内ROM映射到数据存储空间;②若DROM=0,则片内ROM不映射到数据存储空间。注意:DROM的用法与MP/MC的用法无关。程序存储空间用来存放要执行的指令和执行中所需的系数表。’C5402共有20条地址线,可寻址1M字的外部程序存储器。它的内部ROM和DARAM可通过软件映射到程序空间。当存储单元映射到程序空间时,CPU可自动地按程序存储器对它们进行寻址。如果程序地址生成器(PAGEN)产生的地址处于外部存储器,CPU可自动地对外部存储器寻址。1、程序存储器1.程序存储空间的配置

(1)MP/MC控制位用来决定程序存储空间是否使用内部存储器。①当MP/MC=0时,称为微计算机模式。

4000H~EFFFH程序存储空间定义为外部存储器;

F000H~FEFFH程序存储空间定义为内部ROM;

FF00H~FFFFH程序存储空间定义为内部存储器。②当MP/MC=1时,称为微处理器模式。

4000H~FFFFH程序存储空间定义为外部存储器。程序存储空间可通过PMST寄存器的状态位MP/MC和OVLY来设置内部存储器的映射地址。(2)OVLY控制位用来决定程序存储空间是否使用内部RAM。

①当OVLY=0时,程序存储空间不使用内部RAM。

0000H~3FFFH全部定义外部程序存储,此时内部RAM只作数据存储器。②当OVLY=1时,程序存储空间使用内部RAM。内部RAM同时被映射到程序存储空间和数据存储空间。

0000H~007FH保留,程序无法占用;

0080H~3FFFH定义为内部DARAM。

2.程序存储空间的分页扩展

在’C54x系列芯片中,有些芯片采用分页扩展的方法,使程序存储空间可扩展到1M~8M。TMS320VC5402中的程序空间有20根外部程序地址总线,可扩展到1M字,分成16页,每页64K字。TMS320VC5402的扩展程序存储器映射使用专门的指令来访问这些扩展的程序空间:FB[D]、FBACC[D]、FCALA[D]、

FCALL[D]、

FRET[D]、FRETE[D]若处于MC模式,则内部ROM只能在第0页被寻址。不能映射到扩展程序空间的其它页。如果OVLY=1,程序空间使用内部RAM,此时,不管XPC为何值,所有低32K字(x0000~x7FFFh)都被映射到内部RAM(0000~7FFFh)中。因此为了访问全部1M字,必须设置OVLY=0(此时程序代码都存储于外部存储器中)扩展的程序空间OVLY=1时为片内RAM;OVLY=0时为片外只能为片外

3.片内ROM的组织及代码内容

C54xDSP提供了各种容量的ROM(2KB、4KB、8KB、28KB或48KB)。容量大的片内ROM可以把用户的程序代码编写进去,然而片内高2KBROM中的内容是由TI公司定义的。这2KB程序空间(F800h~FFFFh)中包含如下内容:

(1)自举加载程序。

从串行口、外部存储器、I/O端口或者主机接口自举加载。(2)256Bμ律扩展表。(3)256BA律扩展表。(4)256B正弦函数值查找表。(5)128B中断向量表。TMS320C54x片内高2K字地址ROM的分块图F000HF7FFH高2K字由TI定义低2K字由用户定义对于VC5402,为4K字的内部ROM用户代码程序存储器扩展电路

TMS320C54x的数据存储器的容量最多可64K字。除了单寻址和双寻址RAM(SARAM和DARAM)外,TMS320C54x还可以通过软件将片内ROM映像为数据存储空间。当处理器发出的地址处在片内存储器的范围内时,就对片内的RAM或数据ROM(当ROM设为数据存储器时)寻址。当数据存储器地址产生器发出的地址不在片内存储器的范围内时,处理器就会自动地对外部数据存储器寻址。2、数据存储器

1.数据存储器的可配置性数据存储器可以驻留在片内或者片外。片内DARAM都是数据存储空间。对于某些TMS320C54x,用户可以通过设置PMST寄存器的DROM位,将部分片内ROM映像到数据库存储空间。这一部分片内ROM既可以在数据库空间使能(DROM=1),也可以在程序空间使能(MP/=0)。复位时,处理器将DROM位清0。对数据ROM的单操作数寻址,包括32位长字操作数寻址,单个周期就可完成。而在双操作数寻址时,如果操作数驻留在同一块内,则要2个周期;若操作数驻留在不同块内,则只需一个周期就可以了。

2.片内RAM的组织为了提高处理器的性能,片内RAM也可细分成若干块。分块组织可以让用户在同一个周期内从同一块DARAM中取出两个操作数,并将数据写入到另一块DARAM中。所有C54xDSP上的DARAM的起始1KB块包括程序存储器映射CPU和外设寄存器,32B暂存存储器DARAM和896BDARAM。C54x的存储器映射寄存器MMR‘C54xDSP中的一些寄存器不单独分配寄存器空间,而是使用数据存储空间映射的办法寻址,因此其访问也按存储器来访问。寻址存储器映像CPU寄存器,不需要插入等待周期。片内外设寄存器用于对片内外设的控制和存放数据,对它们寻址需要2个机器周期。

C54xDSPCPU寄存器(在数据存储器的第0页)

C54xDSP片内外设寄存器(在数据存储器的第0页)

C54xDSP片内外设寄存器(在数据存储器的第0页)

C54xDSP片内外设寄存器(在数据存储器的第0页)示例

TMS320C54x除了程序和数据存储器空间外,还有一个I/O存储器空间。I/O是一个64KB的地址空间(0000H~FFFFH),都在片外。可以用两条指令(输入指令PORTR和输出指令PORTW)对I/O空间寻址。可以扩展外部I/O,外部I/O必须使用缓冲或锁存电路,配合外部I/O读写控制构成外部I/O的控制电路。3、I/O空间I/O端口的扩展数据采集

STM#1000h,AR3;AR3指向目的地址

STM#0063h,AR4;AR4为采集的长度

LOOP:PORTR4000H,*AR3+BANZLOOP,*AR4-#pragma

DATA_SECTION(buf,”adsect”)intbuf[100];ioportunsignedport4000;inti;for(i=0;i<100;i++){buf[i]=port4000;}汇编程序C程序由3部分组成:输入/输出定义与链接器选项:.obj文件:链接器要链接的目标文件.lib文件:链接器要链接的库文件.map文件:链接器生成的交叉索引文件.out文件:链接器生成的可执行代码MEMORY命令:描述系统实际的硬件资源SECTIONS命令:描述“段”如何定位4、链接控制命令文件CMD控制链接器工作的是命令链接文件.cmd,它的作用为:①链接参数指定(指出输入目标文件列表、控制产生输出文件列表等);②存储器资源说明(确定可用的存储器范围);③存储器资源配置(落实存储器定位)。这一部分现在基本上在CCS集成调试环境中的编译选项中设置,所以在.cmd文件中可不再需要汇编语言编写主程序时需要命令链接文件*.CMD

指出输入目标文件列表;控制产生输出文件列表;指出连接器选项。格式如下:

file1.objfile2.obj……filen.obj

-o

file.out

-m

file.map

-estart第一部分:输入文件名与链接器选项-cr

-c-l

rts.lib-stack400-heap20用C编程时告诉链接器做哪些事情、如何做与在DOS命令窗口下执行lnk500file1.objfile2.obj–o.\Debug

\file.out–m.\Debug\file.map–estart效果是一样的。描述系统实际的存储器资源,即哪些存储器空间可用,格式如下:MEMORY{PAGE0:name1[(attr)]:origin=constant,length=constant;PAGEn

:namen[(attr)]:origin=constant,length=constant;}第二部分:MEMORY伪指令例:用MEMORY命令描述目标系统的存储空间MEMORY{PAGE0: PRAM: origin=0x0080,length=0x1080 VECT: origin=0x2000,length=0x0040 EXPRAM: origin=0x4000,length=0xC000PAGE1: STACK: origin=0x2040,length=0x0FC0 DRAM: origin=0x3000,length=0x1000 EXDRAM: origin=0x4000,length=0xC000}MEMORYDirectivePAGEoptionsnamesoriginsLengths利用CMD文件根据实际硬件资源配置存储器空间保留片内DARAM外部OVLY=1DROM=0根据实验室C5402EVM硬件资源,可将片外256KW的RAM存储器CY7C1041分配到此处根据实验室C5402EVM硬件资源,可将片外32KW的RAM存储器IS61C3216分配到此处这些区域应该在外部,但外部没有实际硬件资源(存储器)与之对应,因此这部分不可用107FhDARAM1DARAM21200h120FhEXPRAM5000h5FFFhDARAM31500h26FFhEXDRAM5000h5FFFh初始化时STM#00A0h,PMST这样使IPTR=0,即中断矢量从0080h开始;MP/MC=0(第6位),OVLY=1(第5位)、DROM=0(第3位)MEMORY{PAGE0:DARAM1:org=0080h,len=1000hDARAM2

org=1200h,len=10hEXPRAM:org=5000h,len=1000hPAGE1:

DARAM3:

org=1500h,len=1200hEXDRAM:org=5000h,len=1000h}指定输出段在存储器中的定位,格式如下:SECTIONS{name1:[property,property,property,...]name2:[property,property,property,...]name3:[property,property,property,...]}第三部分:SECTIONS伪指令例:用SECTIONS命令描述“段”如何定位SECTIONS{ .vectors>VECTPAGE0 .text >PRAMPAGE0 .data {}

>PRAMPAGE0 .bss >DRAMPAGE1 .stack>STACKPAGE1}DSP汇编语言:SECTION伪指令5个SECTION伪指令

.bss symbol,sizeinword.text.data.sect “sectionname”symbol.usect “sectionname”,sizeinword其中symbol相当于变量名,sizeinword保留的存储单元长度初试化段和未初试化段.bss和.usect为未初试化段,用于为变量、堆栈等保留一块存储空间.text、.data和.sect为初试化段,用于存放代码块或有初值的数据块系统定义的段和用户定义的段.text、.data和.bss为系统已定义好的段名用户根据需要用.sect和.usect伪指令来定义段名,创建相应的“段”汇编程序中,程序员用“段”伪指令来组织程序的代码和数据段定义伪指令初始化段:√.text√.data√.sect“sectionname”

非初始化段√.bsssymbol,sizeinwords√[symbol].usect

“sectionname”,sizeinwords.text.text定义代码段,用于代码段开始前,通常.text段用来存放可执行代码。.text是默认段,在汇编一开始如不指定其它段(.data段或.sect段),则自动汇编到.text段。举例:

.textAdcproc: clrc

sxm …;从此段开始处放置一个子程序Adcprog.data.data定义数据段,用于数据段开始前,通常.data段用来存放数据表或初始化后的变量。举例:

.data sym

.word 0abcdh,01234h,9876

;从此段开始处定义三个常数对应的C语言表示方法为:intsym[3]={0x0abcd,0x1234,9876};.sect.sect“sectionname”定义自定义命名段(已初始化段),给其后的段取名以便调用。注意:段名必须用引号引起。

buf

.sect“var_defs” .word17,18;Startassemblingintoanamed,initialized;section,var_defs对应的C语言表示方法为:#pragma

DATA_SECTION(buf,”var_defs”)intbuf[2]={17,18};.bss.bsssymbol,sizeinwords定义非初始化变量空间,为未初始化变量在RAM中保留若干字空间举例:

.bsssym,19;Reservespacein.bss

对应的C语言表示方法为:intsym[19];.usect[symbol].usect“sectionname”,sizeinwords定义自定义命名段(未初始化段),为该名称的段保留若干字空间。举例:usym .usect ”xy”,20

;Reservespaceinxy对应的C语言表示方法为:#pragma

DATA_SECTION(usym,”xy”)intusym[20];段的定位:在编程时,“段”没有绝对定位,每个“段”都认为是从0地址开始的一块连续的储存空间,所以软件开发人员只需要将不同代码块和数据块放到不同的“段”中,而无需关心这些“段”究竟定位于系统何处。重定位:由于所有的“段”都是从0地址开始,所以程序编译完成后无法直接运行的,要让程序正确运行,必须对“段”进行重新定位,这个工作由链接器完成优点:便于程序的模块化编程;便于工程化管理:可将软件开发人员和硬件开发人员基本上分离开段的定位DSP汇编语言:汇编器对“段”的处理汇编器第一次遇到新“段”时,将该“段”的段程序计数器(SPC)置为0,并将随后的程序代码或数据顺序编译进该“段”中汇编器遇到同名“段”时,将它们合并,然后将随后的程序代码或数据顺序编译进该“段”中当汇编器遇到.text、.data和.sect伪指令时,汇编器停止将随后的程序代码或数据顺序编译进当前“段”中,而是顺序编译进遇到的“段”中当汇编器遇到.bss和.usect伪指令时,汇编器并不结束当前“段”,而只是简单地暂时脱离当前“段”,随后的程序代码或数据仍将顺序编译进当前“段”中。.bss和.usect伪指令,可以出现在.text、.data或.sect“段”中的任何位置,它们不会影响这些“段”的内容DSP汇编语言:链接器对“段”的处理链接器对“段”的处理有2个方面:将输入“段”组合产生输出“段”将多个.obj文件中的同名“段”合并一个输出“段”也可将不同名的“段”合并产生一个输出“段”将输出“段”定位到实际的存储空间中MEMORY命令:用于扫描系统实际的硬件资源SECTIONS命令:用于描述程序中定义了哪些“段”,这些“段”是否需要合并?如何合并?合并产生的输出“段”定位到实际硬件资源的何处?链接器通过.cmd文件来获得上述这些信息链接器还将检查各输出“段”是否重叠、是否超界,避免了人工检查边界带来的隐患链接器对段的处理数据采集buf.usect“adsect”,100STM#buf,AR3;AR3指向目的地址

STM#0063h,AR4;AR4为采集的长度

LOOP:PORTR4000H,*AR3+BANZLOOP,*AR4-#pragma

DATA_SECTION(buf,”adsect”)intbuf[100];ioportunsignedport4000;inti;for(i=0;i<100;i++){buf[i]=port4000;}汇编程序C程序需要在CMD文件中将adsect段定位到数据存储器1000h处,即:SECTIONS{…

adsect:{}>0x1000page1}run属性:规定输出段将被运行在存储器中的位置。Possiblepropertieswhichdefineswhereinmemorythesectionistobeloaded Syntax:

load=allocation

or allocation

or {}>allocationrun=allocation

or run>allocationLoad&Runallocation是MEMORY所定义的范围内的地址,包括ROM、RAM、实际地址值(16位常数)等load属性:规定输出段将被装载在存储器中的位置。当运行地址与加载地址一致时,可省掉run,直接写成{}>allocation利用CMD文件根据实际硬件资源定位保留片内DARAM外部OVLY=1DROM=0将程序代码、系数表放在EXPRAM处(即片外256KW的RAM存储器CY7C1041中)将未初始化变量存放在EXDRAM处(即片外32KW的RAM存储器IS61C3216中)107Fhvectors.data1200h120Fh.text5000h5FFFhSTACK1500h26FFh.bss5000h5FFFhSECTIONS{.text:>EXPRAMPAGE0.data:>DARAM2PAGE0vectors:>DARAM1PAGE0

STACK:>DARAM3PAGE1.bss:>EXDRAMPAGE1}DARAM2

DARAM1

DARAM3EXDRAMEXPRAM-oexample.out-mexample.map-estartMEMORY{PAGE0:/*PM–Programmemory*/DARAM1:org=0080h,len=1000hDARAM2

org=1200h,len=10hEXPRAM:org=5000h,len=1000hPAGE1:

DARAM3:

org=1500h,len=1200hEXDRAM:org=5000h,len=1000h}SECTIONS{.text:>EXPRAMPAGE0.data:>DARAM2PAGE0vectors:>DARAM1PAGE0

STACK:>DARAM3PAGE1.bss:>EXDRAMPAGE1}*********************example.asm*********************… stack.usect"STACK",10h…CMD文件编写举例example.asm程序清单*************************************************example.asmy=a1*x1+a2*x2+a3*x3+a4*x4*************************************************.title"example.asm"stack.usect"STACK",10h;allocatespaceforstack.bssx,4;allocate9wordforvariables.bssa,4.bssy,1.defstart.datatable:.word1,2,3,4;datafollows....word8,6,4,2示例程序:

.text;codefollows...start:STM#stack+10h,SP;setstackpointerSTM#table,AR1;AR1pointtotableSTM#x,AR2;AR2pointtoxSTM#7,AR0LD#0,Aloop:LD*AR1+,A;move8valuesSTLA,*AR2+;fromprogrammemoryBANZloop,*AR0-;intodatamemoryCALLSUM;callSUMsubroutineend:BendSUM:STM#a,AR3;Thesubroutine;implementSTM#x,AR4;multiply--;accumulateRPTZA,#3

MAC*AR3+,*AR4+,ASTLA,@yRET.end中断向量文件vectors.asm******************************vectors.asmResetvector*****************************.title"vectors.asm".refstart .sect".vectors"Bstart.endvectors.objexample.obj-oexample.out-mexample.map-estartMEMORY{PAGE0:EPROM:org=0E000h,len=100hVECS:org=0FF80h,len=80hPAGE1:

SPRAM:org=0060h,len=20hDARAM:org=0080h,len=100h}SECTIONS{.text:>EPROMPAGE0.bss:>SPRAMPAGE1.data:>DARAMPAGE1STACK:>DARAMPAGE1vectors:>VECSPAGE0}链接命令文件example.cmdEPROME000hE0FFhEPROME000hE0FFhSPRAMDARAM017Fh利用CMD文件配置存储器空间VECSVECS映象文件(.map).map文件给出了存储器的配置情况程序段、数据段、堆栈段以及向量段在存储器中的定位表全局符号在存储器中的位置映象文件举例*****************************************TMS320C54xCOFFLinkerVersion1.10*****************************************TueMay2011:13:052002OUTPUTFILENAME:<example.out>ENTRYPOINTSYMBOL:"start"address:0000e000MEMORYCONFIGURATIONnameoriginlengthattribut

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论