DSP 课件汇编语言_第1页
DSP 课件汇编语言_第2页
DSP 课件汇编语言_第3页
DSP 课件汇编语言_第4页
DSP 课件汇编语言_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

第6章汇编语言6.1汇编语言格式TMS320汇编语言源程序由源语句组成。源语句包括汇编指令、伪指令、宏指令。源语句的一般格式为[标号][:]助记符[操作数1,操作数2,…][;注释]标号域助记符域操作数域注释域注:“[]〞表示该项可缺省。例6.1SYM1.set2 ;符号SYM1等于2BEGIN:LDPSYM1;将2装入DP .word016h;初始化一个字为16h1、标号域标号包含1~32个字母、数字、字符(A~Z,a~2,0~9,—及$),可识别符号的大小写,且规定第一个字符不能是数字。标号可以后随冒号(:),冒号并不作为标号的一局部被处理。如果不使用标号,那么第一个字必须是空格或分号或星号。中选用标号时,其值是段程序计数器(SPC)的当前值,标号指向与它们相关联的语句。例如,如果用.word伪指令初始化几个字,那么标号将指向第一个字。行号SPC目标代码源语句100040000ASTART:.word0Ah,3,70041000300420007标号也可以单独出现在行中,此时它指向下一行中的指令。如:30050HERE:400500003.word3;此行SPC无增量2、助记符域助记符是源语句中的关键局部,不能缺省,它表示本指令的操作类型。助记符不能从源语句的第一列开始,如果从第一列开始,将被解释为标号。助记符包括以下操作码之一:(1)汇编指令(例如ABS,MPY,SPH);(2)伪指令(例如.data,.fist,.set);(3)宏指令(例如.macro,.mexit)。3、操作数域

操作数域是跟在助记符域后面的操作数列表,可缺省。如果多于两个操作数,那么只用逗号隔开。操作数可以是常数、符号和表达式。4、注释域注释域可以从源语句行的任一列开始并直至本行的末尾,即仅包括注释的源语句是有效的。如果它从第一列开始那么可以用分号(;)或星号(*)开始;在行的其他地方开始的注释,必须以分号开始。上述各个域必须用一个或多个空格分开。6、1、1常数、字符串和符号

(1)二进制整数:以字母B(或b)结尾,由二进制数字(0,1)组成的数字串。数字串长度长度最多可达16个二进制数字,如01000110B。(2)八进制整数:以字母Q(或q)结尾,由八进制数字(0~7)组成的数字串。数字串长度最多可达6个八进制数字,如100000Q。(3)十进制整数:以字母D(或d)结尾(也可缺省),十进制整数由0~9数字组成,范围从-32678~65535,如-30000。(4)十六进制整数:以字母H(或h)结尾,由十六进制数字0~9和A~F(或a~f)组成的数字串。数字串长度最多可达4个十六进制数字。(5)字符常数:包含在单引号中的一个或两个字符的串。每个字符表示为8位ASCII码,如‘a’定义字符a,并在内部用61H表示。(6)汇编时间常数:用.set伪指令对符号进行赋值,赋值的内容不同,汇编时符号所表达的含义也就不同。1、常数例如,用.set向符号赋值,那么符号成为常数,为了在表达式中使用此常数,赋予它的值必须是绝对值。SHIFT .set3 LACC*,SHIFT,AR1也可用.set将存放器名赋予符号常数,此时符号与存放器为同一词,如: AUXR1.setAR1 LACC*,0,AUXR12、字符串字符串是包含在双引号内的一串字符,双引号是字符串的一局部。串的最大长度是变化的,并由每一个使用字符串的伪指令定义。字符在内部被表示为8位ASCII字符,如:“sampleprogram〞定义13个字符的字符串sampleprogram。字符串用于以下场合:(1).copy“filename〞中的文件名;(2).sect“sectionname〞中的段名;(3).byte“chasing〞中数据初始化伪指令;(4).string伪指令的操作数。字符串与字符常数不同,字符常数代表一个单独的整数值,而字符串是字符的列表。3、符号

符号被用做标号、常数及替代符号。符号名最多可由32个字母和数字混合组成(A~Z,a~z,0~9,$和_)。符号的第一个字符不能是数字,符号内不能有空格。用户定义的符号分大小写,例如汇编时ABC,Abc及abc被识别为3个不同的符号。

表达式由运算符、常数和符号组成。有效表达式值的范围是-32768~+32767。6、1、2表达式和运算符

表达式内使用的运算符的优先级见下表:高组运算符说明优先级1+-~取正取负求反

低2*/%«»乘除求模左移右移3+-^|&加减按位逻辑异或按位逻辑或按位逻辑与4<><=>==或==!=小于大于小于或等于大于或等于等于不等于6.2宏指令

为了简化汇编语言源程序的书写,常常将一些频繁出现的程序段定义为宏指令。

TMS320系列DSP汇编器支持宏语言。使用宏的过程要经过以下3个步骤。(1)定义宏:用户在使用宏之前必须先定义宏。在程序的任何地方都可以定义一个宏。一般是在源文件开始处定义,或者在.include/.copy文件中定义,或者在宏库中定义。宏定义语句格式如下:宏名.macro[形式参数1][,形式参数2]…[,形式参数n]..[.mexit] .endm(2)调用宏:在定义了宏以后,就可以在源程序中将宏的名字作为操作码来调用。格式:宏名[实参数1][,实参数2][,实参数n](3)展开宏:汇编器在对源文件进行汇编时,对调用的宏进行展开。在展开过程中,汇编器用宏体取代宏调用语句,宏体中的形式参数(替代符号)用实际参数代替。①如果某个形式参数没有对应的实参数为其赋值,该形式参数将被空串(“〞)代替。②如果实参数的个数多于形式参数,那么余下的实参数将赋给最后一个形式参数(用逗号隔开)。③如果要把一串变量赋给一个形式参数,或者把一个逗号(或分号)传给一个形式参数,就必须用引号将它们引起来。④汇编时,汇编器先用实参数代替形式参数并展开宏,然后把源语句汇编为目标代码,并输出到列表文件中。例宏定义:parms.macrox,y,za=x b=y c=z .endm调用宏:汇编时展开宏parms100,200;a=100;b=200 ;c=

“〞parms“100,200,300〞,55,66,77;a=“100,200,300〞 ;b=55 ;c=

66,77

6.3通用目标文件格式

CCS开发环境可以看成是一个大的软件包,里面包含了源代码编辑器,以及工程文件组织、编译和调试等一切功能模块。该软件包里,shell程序可以完成3个功能:编译、汇编和链接。shell程序缺省在C盘安装时,被安装在C:\ti\c2400\cgtool子目录下,对应的文件名为。〔1〕编辑器:包括分析器、优化器、代码产生器。把C语言程序编译成汇编语言程序。〔2〕汇编器:把汇编语言源代码或C语言已经编译成汇编语言代码进行汇编,以产生COFF目标文件。〔3〕链接器:将文件链接,产生可执行的目标文件。使用汇编器可以将汇编语言源程序汇编为目标文件,用链接器将假设干个目标文件连接成—个可被芯片执行的可执行文件。这些目标文件的格式称为通用目标文件格式(COFF,CommonObjectFileFormat)。通用目标文件格式的核心是使程序员在编写DSP程序时基于代码块和数据块的概念,而不是一条条指令或一个个数据,基于这种文件格式编写的DSP程序可读性强、可移植性好。在COFF文件中,将代码块和数据块称为Section,编译器/汇编器和链接器都提供了有关的命令来创立块和对块进行处理,编译器/汇编器创立的块的名称有些是已经定义好的,程序员也可以自己定义块名。6.3.1块

目标文件的最小单位被称为块,它是在存储器中占有连续空间的一块代码或数据。目标文件中的每一个块都是独立的。一般地,COFF目标文件应包含3个缺省的块:.text块:通常包含可执行代码。.data块:通常包含已初始化的数据。.bss块:通常为未初始化的变量保存空间。此外,汇编器和连接器允许用户建立和链接自定义的块,这些块与.text,.data类似。所有的块可以分为两类:已初始化块:包含程序代码和数据。如.text和.data及用.sect或.asect汇编器命令创立的块。未初始化块:为未初始化数据在存储器映像中保存空间。.bss段和用.usect汇编器命令创立的块是未初始化的段。6.3.2汇编器对块的处理

汇编器对块的处理功能主要是确定汇编语言程序的各局部属于哪个特定的块。汇编器有六个命令来完成这种功能:.bss,.usect,.text,.data,.sect及.asect。其中.bss和.usect命令创立未初始化块,而.text,.data,.sect及.asect命令那么建立已初始化块。如果在程序中未用任何命令来指示,汇编器将把所有程序块或数据块统一汇编至.text中。〔1〕未初始化块未初始化块主要用来在存储器中保存空间,它们通常分配在RAM中。这些块在目标文件中没有实际内容,只是保存空间而已。程序可以在运行时利用这些空间建立和存储变量。未初始化数据块是通过使用.bss和.usect汇编器命令来建立。.bss命令在.bss块中保存空间,而.usect命令在自定义块中保存空间。格式为:.bss符号,字数符号.usect“块名〞,字数其中,符号指向由.bss或.usect保存的第一个字,它对应于为变量保存空间的变量名,可以在其他任何块中被访问,也可以用.global定义为全局符号。字数表示空间的大小,块名是程序员自己定义的名字。汇编器遇到.text,.data,.sect和.asect命令时立即停止汇编至当前块中且开始汇编至相应块中。汇编器遇到.bss或.usect命令并不结束当前块开始一个新块,它们只是暂时离开当前块。〔2〕已初始化块已初始化块包含可执行代码或已初始化数据。块的内容存储在目标文件中,当程序装入时存放在DSP存储器中。每个已初始化块可以独立地进行重定位,且可访问在其他块中定义的符号。链接器可自动解决块与块之间符号访问的问题。有四个命令通知汇编器将代码或数据存放在严格块中,格式为:.text.data.sect“块名〞.asect“块名〞,地址上述命令中,.text和.data建立的块名就是.text和.data,而后两命令建立的是自定义块,其中.asect建立的块有绝对地址,一般不建议使用。

当汇编器遇到上述命令时,立即停止汇编至当前块中,且开始将随后的代码或数据汇编至相应的块中。块是通过迭代过程建立的。如,当汇编器首次遇到一个.data命令,.data块是空的,.data后面的语句被汇编到.data块中,直到遇到一个.text,.sect或.asect命令为止。如果汇编器在后面又遇到.data命令,那么将.data后面的语句加到已存在于.data块中语句的后面,这样建立的唯一的.data块可以在存储器中分配一个连续的空间。〔3〕自定义块自定义块就是程序员自己建立的块,与缺省的.text,.data和.bss块一样使用,但它与缺省块分开汇编。如,重复使用.text命令在目标文件中只建立一个.text块,链接后这个.text块也作为一个单位分配到存储器中。有时候程序员想把一局部程序放至不同于.text的存储器中,那么须使用自定义块,对数据也可同样处理。有三条指令可建立自定义块:.usect,.sect和.asect,其中.usect建立的块用法类似于.bss,是在RAM中为变量保存空间;而.sect和.asect建立包含代码或数据的块,用法类似于.text和.data。.sect建立的块是可重定位的,而.asect建立具有绝对地址的块。符号.usect“块名〞,字数.sect“块名〞.asect“块名〞,地址例此例表示如何用.usect伪指令定义两个未初始化的命名段var1和var2。符号ptr指向var1段中保存的第一个字。符号array指向var1段中100个字块内的第一个字。符号dflag指向var1段中50个字块内的第一个字。符号vec指向Var2段中保存的第一个字。0000.text;汇编到.text段00002003LAC03h0000ptr.usect“var1〞,1;在var1段保存1个字0001array.usect“var1〞,100;在var1段保存100个字00010037ADD037h;还在.text段0065dflag.usect“var1〞,50;在var1段保存50个字00020065ADDdflag;还在.text段0000vec.usect“var2〞,100;在var2段保存100个字00030000ADDvec;还在.text段.globalarray;将array定义为外部符号名6.3.3链接器对块的处理

链接器对块的处理有两个功能。首先,将COFF目标文件中的块用来建立程序块或数据块,将输入块组合起来以建立可执行的COFF输出模块;其次,链接器为输出块选择存储器地址。链接器提供两个命令完成上述功能:MEMORY和SECTION。MEMORY命令定义目标系统的存储器,程序员可定义每一块存储器,指定每一块的起始地址和长度。SECTION命令告诉链接器如何组合输入块以及在存储器何处存放输出块。假设不用这两个命令,那么链接器采用缺省的分配算法。假设要用这两条命令,那么一般需要建立一个链接命令文件,扩展名为d。6.3.4程序的重定位

汇编器对每块汇编时都假定其起始地址为0,每块中所有的重定位符号〔标号〕都是相对于0地址而言的。当然,实际上并不是所有块在存储器中都是以0地址定位的,因此链接器必须通过以下方法对每块进行重定位。〔1〕分配块至存储器,使各块有适宜的起始地址。〔2〕调整符号值,使之对应于新的块地址。〔3〕调整重定位后符号的参考值,以反映调整后的符号值。链接器利用重定位项来调整符号的参考值。汇编器每次在可重定位符号被参考时建立一个重定位项,链接器那么在符号被重定位之后利用这些项来修正参考值。COFF目标文件中的每一块都有一个重定位工程表。表中包含了块中每一个可重定位参考的一个重定位项。链接器在使用完重定位项后将其去除以防止对输出块再次重定位。产生重定位项的代码

1.refX

20000.text30000FF80BX;产生一个重定位项

00010000!

40002D001LALKY;产生一个重定位项0003000450004CEIFY:IDLE链接后,假定X重定位至地址100h,且.text块重定位到起始地址200h,那么Y重定位后的地址为204h。链接器利用这两个重定位项在目标代码中补上这两个参考:FF80BX变为FF80

00000100D001LALKY变为D00100040204有时,一块程序装入在某块存储器中但需在另一块存储器中运行。如,程序中的一段关键代码装在ROM中,但需在速度更高的RAM中运行。此时,必须进行运行时的重定位。实现运行时的重定位的方法,可在链接器命令文件的SECTION中将块分配两次:一次设定装入地址,另一次那么设定运行地址。如:.text:load=ROM,run=ROM06.3.5COFF中的符号

COFF中包含一个存储程序中符号信息的信息表,链接器在进行重定位时要用到这个符号表。在一个模块中定义在另一个模块中引用的符号称为外部符号。一般可用.def、.ref、.global等命令来标明某一符号为外部符号。在一个源模块中,外部符号可以用.def、.ref、.global来定义:〔1〕定义〔.def〕:在当前模块中定义,在其他模块中引用〔2〕参考〔.ref〕::在当前模块中引用,在其他模块中定义〔3〕全局〔.global〕:包含上两者

.globleX;X在本模块中定义,可在其他模块中引用.globleY;Y在其他模块中定义,在本模块中引用X:ADD056h;定义XMPYY;引用Y6.4链接命令文件链接器的缺省分配算法是:〔1〕程序存储器的起始地址是0x1000h,长度为0xEFFF。〔2〕数据存储器的起始地址是0x300h,长度为0xFCFF。〔3〕将.text分配到起始地址为0x1000h的程序存储器中。〔4〕将.data分配到紧跟在.text的程序存储器中。〔5〕将.cinit分配到紧跟在.data的程序存储器中。〔6〕将自定义的已初始化块分配到紧跟在.data的存储器中,假设自定义块不止1个,那么按自定义块在输入文件的先后顺序存放。〔7〕将.bss分配到起始地址为0x300h的数据存储器中。〔8〕将自定义的未初始化块分配到紧跟在.bss的存储器中,假设自定义块不止1个,那么按自定义块在输入文件的先后顺序存放。1、MEMORY伪指令MEMORY伪指令的一般语句格式为:MEMORY{PAGE0:存储器名1[〔属性〕]:origin=常数,length=常数··········PAGEn:存储器名n[〔属性〕]:origin=常数,length=常数}〔1〕PAGE:定义一个存储器空间,用户可以定义多达255页。通常PAGE0定义程序存储器,PAGE1定义数据存储器。如果用户没有使用PAGE选项,那么连接器把段定位到PAGE0。每个PAGE代表一个完全独立的地址空间。在PAGE0上已配置的存储器可以和在PAGE1上已配置的存储器重叠。〔2〕存储器名:命名存储器范围。存储器名由1~8个字符组成,有效的字符包括A~Z,a~z,$及_。名字对于连接器没有特殊的意义,仅指明存储器的区域。在不同页上存储器范围可以有相同的名字,而在同一页,所有的存储器范围不能有相同的名字,且不能重叠。〔3〕属性:对于已命名的范围有1~4个属性。属性是可选项,当被使用时,必须用括号括起来。属性把输出段的定位限制在某些存储器范围内。如果用户不使用任何属性,那么输出段即可以定位到任何范围内。有效的属性包括:R:规定存储器可以被读出;W:规定存储器可以被写入;I:规定存储器可以被初始化。〔4〕origin:指定一个存储器区域的起始地址,也可以写成org或0。这个值是以字节规定的16位常数,也可以是十进制、八进制或十六进制。〔5〕length:指定一个存储器的长度,也可以写成len或1。数值的表示方法与origin相同。例:

MEMORY指令举例/*SampleCommandfilewithMEMORYdirective*/file1.objfile2.Obj-oMEMORY{PAGE0:ROM:ORIGIN=0h,LENGTH=1000hPAGE1:B2:ORIGIN=60h,LENGTH=20hB0B1:ORIGIN=200h,LENGTH=200h}SECTIONS伪指令的一般语法形式是:

SECTIONS{段名1:[特性1,特性2,……]段名2:[特性1,特性2,……]…….}2、SECTION伪指令

特性列表的选项(块所具备的特性)有以下几种:(1)装载地址:规定块将被装载在存储器中的位置。

语法:load=allocation

allocation

或{}>allocationallocation是MEMORY伪指令所定义的范围内地址,包括ROM、RAM、实际地址值(16位常数)等。(2)运行地址:定义块在存储器内运行的位置。

语法:run=allocation

run>allocation

如果在一个块中load和run的地址相同,run可以省略。(3)调准地址:规定块应在地址边界上开始。调准可以使连接器把输出块放在位于n字边界的地址,其中/2是2的幂。

语法:align=n

align=(n)

如.textalign=128,即将.text段定位于页边界。(4)块地址:规定块必须装在两个地址边界之间,它把块定位在大小为n的块内任何地方,如果块大于大小为的n块,那么块将从该边界开始。和调准一样,n必须是2的幂。语法:block=n或

block(n)如.bssload=block(0x80)。定位.bss块使其包含在单个128字的页内或者从新页开始。用户可以单独使用调准或块,也可以和装入地址、运行地址结合在一起使用,但是调准和块不能一起使用。(5)输入块:定义组成输出块的输入块。

语法:{input_sections}输入文件中的块组合起来形成输出块,连接器按照所列出的输入块的次序连接并组合它们。输出块的大小是组成它的输入块的大小之和。通用类型的块的规格说明中没有输入块。如SECTIONS{.text:.data:.bss:}此时链接器从输入文件取出所有.text块并把它们组合到.text输出块内。链接器按照它在输入文件中遇到的次序连接.text输入块,对.data和.bss块的操作与.text相同。例:SECTIONS{.text/*创立.text输出段*/{f1.obj(.text)/*从输入文件中连接.text段*/f2.obj(sec1)/*从输入文件中连接.sec1段*/f3.obj/*连接输入文件中所有的段*/f4.obj(.text,sec2)/*从输入文件中连接.text和.sec1段*/}}(6)块类型:定义特殊块类型的标志。语法:type=COPY或type=DSECT或type=NOLOAD用户可以把这3种特殊的类型赋予输出块。用COPY和DSECT创立的块是一个虚块,它不包括在输出块存储器分配内,也不占据存储器空间,不包括在存储器映象列表中。但在虚块中定义的全局符号可以被其他输入块引用,COPY段可以将块的内容、重定位信息及行号信息放在输出模块中,而DSECT块那么不放置。NOLOAD创立的块不将块的内容、重定位信息及行号信息放在输出模块中,但链接器为其分配空间并包括在存储器映象列表中。例SETIONS伪指令的使用

file1.objfile2.obj/*输入文件*/-o/*输出文件*/

SECTIONS{.text:load=ROMrun=0800h .const:load=ROM .bss:load=ROM Vectors:load=0h { t1.obj(.intvec1) t2.obj(.intvec2) endvec=.;/*将vectors段的最后连接地址赋给endvec符号*/ } .data:align=16 }(7)填充值:定义用于填充初始化空位的数值。语法:file=value或

name:…{…}:value当初始化输出块内有空位存在时,链接器必须提供原始数据以填充它值填充空位,该数值在存储器内复制直至它填满空位为止。

程序存储器:地址范围内容 0000~0FFF片内ROM FF00~FFFF片内RAM块B0数据存储器:地址范围内容 0000~0005I/O存放器 0060~007F片内RAM块B20300~03FF片内RAM块B13、链接器举例命令文件exmp.cmd/**定义连接器选项**/-eSETUP/*定义程序入口*/-o/*命名输出文件*/-m/*创立一个输出列表文件*//**定义输入文件**//*连接三个目标文件*//**定义存储器配置**/MEMORY{PAGE0:ROM:ORIGIN=0000h,LENGTH=1000hRAM_B0:ORIGIN=FF00h,LENGTH=100hPAGE1:IO:ORIGlN=0000h,LENGTH=06hRAM_B2:ORIGIN=0060h,LENGTH=20hRAM_B1:ORIGIN=0300h,LENGTH=100h RAM:ORIGIN=0400h,LENGTH=FC00h}/**定义输出段SECTIONS{.text:{}>ROM,PAGE=0/*将包含在和中的.text块链接到ROM中*/int_vecs:load=0,PAGE=0/*将来自中int_vecs块的一组中断矢量连接到ROM中的0地址处*/.data:file=7A1Ch,load=RAM_B0,PAGE=0/*将和中的.data块链接到程序存储器RAM块B0中,并在其后创立256字的空位,用7Alh填充*/{tables.obj(.data)fft.obj(.data).=l00h;}fftvars:{}>RAM_B2,page=1/*创立新块fftvars,并将来自的.bss块链入数据存储器RAM块的B2中*/{fft.obj(.bss)}.bss:{}>RAM_B1,PAGE=1,FILL=0FFFFh/*中的.bss块链接到RAM块B1中。RAM的未用局部被初始化为FFFh*/}/**命令文件结束**/然后用以下命令调用连接器:dsplnk这样将生成一个名为的输出文件,可以在TMS320上运行。同时还生成一个列表文件。6.5程序举例在程序设计时,如果需要在多个模块中使用相同的设置和中断处理,通常将芯片中映射至I/O空间的存放器地址及标号、预置变量和常数的空间等设置语句集中在一个文件中,称为I/O存放器头文件〔如〕;将转移中断矢量地址的指令集中在一个文件中,称为中断矢量头文件(如);将定义程序、数据和I/O空间地址块大小和位置的伪指令集中在一个文件中,称为命令文件(如F206d)。这3个文件称为公用文件。用户在编写自己的应用程序时,用.copy或.include伪指令将I/O存放器头文件和中断矢量头文件复制到该应用程序中,形成一个汇编源程序(如),由汇编器进行汇编后生成一个目标文件(如)。再由连接器把该目标文件和命令文件相连接,生成一个可执行文件(如)。对于简单的单个应用程序也可不使用这两个头文件,直接在应用程序中对用到的I/O存放器和中断转移地址进行设置。1、公用文件该文件可为LF2407芯片定义程序、数据和I/O空间地址块的大小和位置,用于和汇编后的TMS320C2000文件(*.obj)相连接,输出文件名为.out。对于其他芯片,应对该文件作相应的修改。/*File:LF2407_PMdMEMORY{PAGE0: /*程序存储空间*/PM:ORIGIN=0h,LENGTH=0044h/*中断矢量*/PVECS:ORIGIN=0044h,LENGTH=0100h/*外设中断矢量*/PROG:ORIGIN=0150h,LENGTH=7EAFh/*以上为32K字片内闪速存储器(0000h~8000h)*/SARAM_P:ORIGIN=8000h,LENGTH=0800h/*程序空间上的2K字SARAM*/EX1_PM:ORIGIN=8800h,LENGTH=7600h/*外部RAM*/B0_PM:ORIGIN=0FF00h,LENGTH=0100h/*如果CNF=1为片上DARAM,否那么为外部B0:FF00h~FFFFh*/(1)命令文件:PAGE1:/*数据存储空间*/REGS:ORIGIN=0h,LENGTH=60h/*内存映射存放区和保存地址*/BLK_B2:ORIGIN=60h,LENGTH=20h/*块B2*/BLK_B0:ORIGIN=200h,LENGTH=100h/*块B0,如果CNF=0为片内DARAM*/BLK_B1:ORIGIN=300h,LENGTH=100h/*片内存储器块B1*/SARAM_D:ORIGIN=0800h,LENGTH=0800h/*数据空间2K字SARAM*/PERIPH:ORIGIN=7000h,LENGTH=1000h/*外设存放器空间*/EX1_DM:ORIGIN=8000h,LENGTH=0800h/*数据空间2K字SARAM*/PAGE2:/*I/O存储空间*/IO_EX:ORIGIN=0000h,LENGTH=0FFF0h/*外部I/O映射空间*/IO_EX:ORIGIN=0FFF0h,LENGTH=0Fh/*片内的I/O映射空间*/}SECTIONS{.vectors:{}>PMPAGE0.pvecs:{}>PVECSPAGE0.text:{}>PROGPAGE0.bss:{}>BLK_B2PAGE1.data:{}>BLlBlPAGEl}(2)240x存放器头文件:;Fllename:;240xCPU核存放器IMR .set0004h ;中断屏蔽存放器IFR .set0006h ;中断标志存放器;系统配置和中断存放器SCSR1 .set7018h ;系统控制和状态存放器lSCSR2 .set7019h ;系统控制和状态存放器2DINR .set701Ch ;器件版本号存放器PIVR .set701Eh ;外部中断矢量存放器PIRQR0 .set7010h ;外部中断请求存放器0PIRQR1 .set7011h ;外部中断请求存放器1PIRQR2 .set7012h ;外部中断请求存放器2该文件包含了240x芯片所有外部存放器的地址、标号、预置变量和常数,在片内,所有外部存放器都被映射到数据空间。该文件还定义了看门狗宏指令。可用.copy或.include伪指令将复制到应用程序中。PIACKR0 .set7014h;外部中断响应存放器0PIACKR1 .set7015h;外部中断响应存放器1PIACKR2 .set7016h;外部中断响应存放器2;外部中断配置存放器XINT1CR .set7070h;外部中断1控制存放器XINT2CR .set7071h;外部中断2控制存放器;数据I/O存放器MCRA .set7090h;I/O复用控制存放器AMCRB .set7092h;I/O复用控制存放器BMCRC .set7094h;I/O复用控制存放器CPADATDIR .set7098h;I/O口A数据和方向存放器PBDATDIR .set709Ah;I/O口B数据和方向存放器PCDATDIR .set709Ch;I/O口C数据和方向存放器PDDATDIR .set709Eh;I/O口D数据和方向存放器PEDATDIR .set7095h;I/O口E数据和方向存放器PFDATDIR .set7096h;I/O口F数据和方向存放器;看门狗(WD)存放器WDCNTR .set7023h;WD计数器存放器WDKEY .set7025h;WD复位关键字存放器WDCR .set7029h;WD定时器控制存放器:模数转换(ADC)存放器ADCCTRL1 .set70A0h;ADC控制存放器1ADCCTRL2 .set70A1h;ADC控制存放器2MAXCONV .set70A2h;最大转换通道个数存放器CHSELSEQ1 .set70A3h;通道选择排序控制存放器1CHSELSEQ2 .set70A4h;通道选择排序控制存放器2CHSELSEQ3 .set70A5h;通道选择排序控制存放器3CHSELSEQ4 .set70A6h;通道选择排序控制存放器4AUTOSEQ-SR.set70A7h;自动排序状态存放器RESULT0 .set70A8h;A/D转换结果存放器0RESULT1 .set70A9h;A/D转换结果存放器1RESULT2 .set70AAh;A/D转换结果存放器2RESULT3 .set70ABh;A/D转换结果存放器3RESULT4 .set70ACh;A/D转换结果存放器4RESULT5 .set70ADh;A/D转换结果存放器5RESULT6 .set70AEh;A/D转换结果存放器6RESULT7 .set70AFh;A/D转换结果存放器7RESULT8 .set70B0h;A/D转换结果存放器8RESULT9 .set70B1h;A/D转换结果存放器9RESULTl0 .set70B2h;A/D转换结果存放器10RESULT11 .set70B3h;A/D转换结果存放器11RESULT12 .set70B4h;A/D转换结果存放器12RESULT13 .set70B5h;A/D转换结果存放器13RESULT14 .set70B6h;A/D转换结果存放器14RESULT15 .set70B7h;A/D转换结果存放器15CALIBRATION .set70B8h;校准结果存放器:串行外设接口〔SPI〕存放器SPICCR .set7040h;配置控制存放器SPICTL .set7041h;操作控制存放器SPISTS .set7042h;状态存放器SPIBRR .set7044h;波特率控制存放器SPIEMU .set7046h;仿真缓冲存放器SPIRXBUF .set7047h;串行接收缓冲存放器SPITXBUF .set7048h;串行发送缓冲存放器SPIDAT .set7049h;串行数据存放器SPIPRI .set704Fh;中断优先级控制存放器;串行通信接口SCICCR .set7050h;SCI通信控制存放器SCICTL1 .set7050h;SCI控制存放器1SCIHBAUD .set7050h;SCI波特率高位字节存放器SCILBAUD .set7050h;SCI波特率低位字节存放器SCICTL2 .set7050h;SCI控制存放器2SCIRXST .set7050h;SCI接收状态存放器SCIRXEMU .set7050h;SCI接收数据缓冲存放器SCIRXBUF .set7050h;SCI仿真数据缓冲存放器SCITXBUF .set7050h;SCI发送数据缓冲存放器SCIPRI .set7050h;SCl中断优先级控制存放器;事件管理器A〔EVA〕存放器GPTCONA .set7400h;全局通用定时器控制存放器AT1CNT .set7401h;通用定时器1计数存放器T1CMPR .set7402h;通用定时器1比较存放器T1PR .set7403h;通用定时器1周期存放器T1CON .set7404h;通用定时器1控制存放器T2CNT .set7405h;通用定时器2计数存放器T2CMPR .set7406h;通用定时器2比较存放器T2PR .set7407h;通用定时器2周期存放器T2CON .set7408h;通用定时器2控制存放器COMCONA .set7411h;比较控制存放器AACTRA .set7413h;全比较操作控制存放器ADBTCONA .set7415h;死区时间控制存放器ACMPR1 .set7417h;全比较单元1比较存放器CMPR2 .set7418h;全比较单元2比较存放器CMPR3 .set7419h;全比较单元3比较存放器CAPCONA .set7420h;捕获控制存放器ACAPFIFOA .set7422h;捕获FIFO状态存放器ACAP1FIFO .set7423h;捕获1FIFO栈项存放器CAP2FIFO .set7424h;捕获2FIFO栈顶存放器CAP3FIFO .set7425h;捕获3FIFO栈顶存放器CAP1FBOT .set7427h;捕获1FIFO栈底存放器CAP2FBOT .set7428h;捕获2FIFO栈底存放器CAP3FBOT .set7429h;捕获3FIFO栈底存放器EVAIMRA .set742Ch;EVA中断屏蔽存放器AEVAIMRB .set742Dh;EVA中断屏蔽存放器BEVAIMRC .set742Eh;EVA中断屏蔽存放器CEVAIFRA.set742Fh;EVA中断标志存放器AEVAIFRB.set7430h;EVA中断标志存放器BEVAIFRC.set7431h;EVA中断标志存放器C;事件管理器B(EVB)GPTCONB .set7500h;全局通用定时器控制存放器BT3CNT .set7501h;通用定时器3计数存放器T3CMPR .set7502h;通用定时器3比较存放器T3PR .set7503h;通用定时器3周期存放器T3CON .set7504h;通用定时器3控制存放器T4CNT .set7505h;通用定时器4计数存放器T4CMPR .set7506h;通用定时器4比较存放器T4PR .set7507h;通用定时器4周期存放器T4CON .set7508h;通用定时器4控制存放器COMCONB .set7511h;比较控制存放器BACTRB .set7513h;全比较操作控制存放器BDBTCONB .set7515h;死区时间控制存放器BCMPR4 .set7517h;全比较单元比较存放器4CMPR5 .set7518h;全比较单元比较存放器5CMPR6 .set7519h;全比较单元比较存放器6CAPCONB .set7520h;捕获控制存放器BCAPFIFOB .set7522h;捕获FIFO状态存放器BCAP4FIFO .set7523h;捕获4FIFO栈项存放器CAP5FIFO .set7524h;捕获5FIFO栈顶存放器CAP6FIFO .set7525h;捕获6FIFO栈顶存放器CAP4FBOT .set7527h;捕获4FIFO栈底存放器CAP5FBOT .set7528h;捕获5FIFO栈底存放器CAP6FBOT .set7529h;捕获6FIFO栈底存放器EVBIMRA .set752Ch;EVB中断屏蔽存放器AEVBIMRB .set752Dh;EVB中断屏蔽存放器BEVBIMRC .set752Eh;EVB中断屏蔽存放器CEVBIFRA.set752Fh;EVB中断标志存放器AEVBIFRB.set7530h;EVB中断标志存放器BEVBIFRC.set7531h;EVB中断标志存放器C;CAN存放器CANMDER.set7100h;CAN邮箱方向/使能存放器CANTCR .set7101h;CAN发送控制存放器CANRCR .set7102h;CAN接收控制存放器CANMCR .set7103h;CAN主控制存放器CANBCR2 .set7104h;CAN位配置存放器2CANBCR1 .set7105h;CAN位配置存放器1CANESR .set7106h;CAN错误状态存放器CANGSR .set7107h;CAN全局状态存放器CANCEC .set7108h;CAN传送和接收错误计数器CANIFR .set7109h;CAN中断标志存放器CANIMR .set710ah;CAN中断屏蔽存放器CANLAM0H.set710bh;CAN本地接收屏蔽高位字存放器(MBX0/1)CANLAM0L.set710ch;CAN本地接收屏蔽低位字存放器(MBX0/1)CANLAM1H.set710dh;CAN本地接收屏蔽高位字存放器(MBX2/3)CANLAM1L.set710eh;CAN本地接收屏蔽低位字存放器(MBX2/3)CANMSGIDOL.set7200h;CAN邮箱0消息标识符(低16位字)CANMSGIDOH.set7201h;CAN邮箱0消息标识符(高16位字)CANMSGCTRl0.set7202h;CAN邮箱0消息控制域存放器CANMBX0A .set7204h;CAN邮箱0中邮箱RAM的2个字节CANMBX0B .set7205h;CAN邮箱0中邮箱RAM的2个字节CANMBX0C .set7206h;CAN邮箱0中邮箱RAM的2个字节CANMBX0D .set7207h;CAN邮箱0中邮箱RAM的2个字节CANMSGID1L .set7208h;CAN邮箱1消息标识符(低16位字)CANMSGID1H .set7209h;CAN邮箱1消息标识符(高16位字)CANMSGCTRL1 .set720Ah;CAN邮箱1消息控制域存放器CANMBX1A .set720Ch;CAN邮箱1中邮箱RAM的2个字节CANMBX1B .set720Dh;CAN邮箱1中邮箱趾M的2个字节CANMBX1C .set720Eh;CAN邮箱1中邮箱RAM的2个字节CANMBX1D .set720Fh;CAN邮箱1中邮箱RAM的2个字节CANMSGID2L .set7210h;CAN邮箱2消息标识符(低16位字)CANMSGID2H .set7211h;CAN邮箱2消息标识符(高16位字)CANMSGCTRL2 .set7212h;CAN邮箱2消息控制域存放器CANMBX2A .set7214h;CAN邮箱2中邮箱RAM的2个字节CANMBX2B .set7215h;CAN邮箱2中邮箱RAM的2个字节CANMBX2C .set7216h;CAN邮箱2中邮箱RAM的2个字节CANMBX2D .set7217h;CAN邮箱2中邮箱RAM的2个字节CANMSGID3L .set7218h;CAN邮箱3消息标识符(低16位字)CANMSGID3H .set7219h;CAN邮箱3消息标识符(高16位字)CANMSGCTRL3 .set721Ah;CAN邮箱3消息控制域存放器CANMBX3A .set

温馨提示

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

评论

0/150

提交评论