DSP 课件 第六章 汇编语言.ppt_第1页
DSP 课件 第六章 汇编语言.ppt_第2页
DSP 课件 第六章 汇编语言.ppt_第3页
DSP 课件 第六章 汇编语言.ppt_第4页
DSP 课件 第六章 汇编语言.ppt_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

第6章汇编语言,6.1汇编语言格式,TMS320汇编语言源程序由源语句组成。源语句包括汇编指令、伪指令、宏指令。源语句的一般格式为标号:助记符操作数1,操作数2,;注释标号域助记符域操作数域注释域注:“”表示该项可缺省。例6.1SYM1.set2;符号SYM1等于2BEGIN:LDPSYM1;将2装入DP.word016h;初始化一个字为16h,1、标号域,标号包含132个字母、数字、字符(AZ,a2,09,及$),可识别符号的大小写,且规定第一个字符不能是数字。标号可以后随冒号(:),冒号并不作为标号的一部分被处理。如果不使用标号,则第一个字必须是空格或分号或星号。当选用标号时,其值是段程序计数器(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)结尾,由八进制数字(07)组成的数字串。数字串长度最多可达6个八进制数字,如100000Q。(3)十进制整数:以字母D(或d)结尾(也可缺省),十进制整数由09数字组成,范围从-3267865535,如-30000。(4)十六进制整数:以字母H(或h)结尾,由十六进制数字09和AF(或af)组成的数字串。数字串长度最多可达4个十六进制数字。(5)字符常数:包含在单引号中的一个或两个字符的串。每个字符表示为8位ASCII码,如a定义字符a,并在内部用61H表示。(6)汇编时间常数:用.set伪指令对符号进行赋值,赋值的内容不同,汇编时符号所表达的含义也就不同。,1、常数,例如,用.set向符号赋值,则符号成为常数,为了在表达式中使用此常数,赋予它的值必须是绝对值。SHIFT.set3LACC*,SHIFT,AR1也可用.set将寄存器名赋予符号常数,此时符号与寄存器为同一词,如:AUXR1.setAR1LACC*,0,AUXR1,2、字符串,字符串是包含在双引号内的一串字符,双引号是字符串的一部分。串的最大长度是变化的,并由每一个使用字符串的伪指令定义。字符在内部被表示为8位ASCII字符,如:“sampleprogram”定义13个字符的字符串sampleprogram。字符串用于下列场合:(1).copy“filename”中的文件名;(2).sect“sectionname”中的段名;(3).byte“chasing”中数据初始化伪指令;(4).string伪指令的操作数。字符串与字符常数不同,字符常数代表一个单独的整数值,而字符串是字符的列表。,3、符号,符号被用做标号、常数及替代符号。符号名最多可由32个字母和数字混合组成(AZ,az,09,$和_)。符号的第一个字符不能是数字,符号内不能有空格。用户定义的符号分大小写,例如汇编时ABC,Abc及abc被识别为3个不同的符号。,表达式由运算符、常数和符号组成。有效表达式值的范围是-32768+32767。,6、1、2表达式和运算符,表达式内使用的运算符的优先级见下表:,高,6.2宏指令,为了简化汇编语言源程序的书写,常常将一些频繁出现的程序段定义为宏指令。TMS320系列DSP汇编器支持宏语言。使用宏的过程要经过以下3个步骤。(1)定义宏:用户在使用宏之前必须先定义宏。在程序的任何地方都可以定义一个宏。一般是在源文件开始处定义,或者在.include.copy文件中定义,或者在宏库中定义。宏定义语句格式如下:宏名.macro形式参数1,形式参数2,形式参数n.mexit.endm,(2)调用宏:在定义了宏以后,就可以在源程序中将宏的名字作为操作码来调用。格式:宏名实参数1,实参数2,实参数n(3)展开宏:汇编器在对源文件进行汇编时,对调用的宏进行展开。在展开过程中,汇编器用宏体取代宏调用语句,宏体中的形式参数(替代符号)用实际参数代替。如果某个形式参数没有对应的实参数为其赋值,该形式参数将被空串(“”)代替。如果实参数的个数多于形式参数,则余下的实参数将赋给最后一个形式参数(用逗号隔开)。如果要把一串变量赋给一个形式参数,或者把一个逗号(或分号)传给一个形式参数,就必须用引号将它们引起来。汇编时,汇编器先用实参数代替形式参数并展开宏,然后把源语句汇编为目标代码,并输出到列表文件中。,例宏定义:parms.macrox,y,za=xb=yc=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:tic2400cgtool子目录下,对应的文件名为dspcl.exe。,(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命令告诉链接器如何组合输入块以及在存储器何处存放输出块。若不用这两个命令,则链接器采用缺省的分配算法。若要用这两条命令,则一般需要建立一个链接命令文件,扩展名为.cmd。,6.3.4程序的重定位,汇编器对每块汇编时都假定其起始地址为0,每块中所有的重定位符号(标号)都是相对于0地址而言的。当然,实际上并不是所有块在存储器中都是以0地址定位的,因此链接器必须通过下列方法对每块进行重定位。(1)分配块至存储器,使各块有合适的起始地址。(2)调整符号值,使之对应于新的块地址。(3)调整重定位后符号的参考值,以反映调整后的符号值。链接器利用重定位项来调整符号的参考值。汇编器每次在可重定位符号被参考时建立一个重定位项,链接器则在符号被重定位之后利用这些项来修正参考值。,COFF目标文件中的每一块都有一个重定位项目表。表中包含了块中每一个可重定位参考的一个重定位项。链接器在使用完重定位项后将其去除以防止对输出块再次重定位。,产生重定位项的代码,1.refX20000.text30000FF80BX;产生一个重定位项00010000!40002D001LALKY;产生一个重定位项0003000450004CEIFY:IDLE,链接后,假定X重定位至地址100h,且.text块重定位到起始地址200h,则Y重定位后的地址为204h。链接器利用这两个重定位项在目标代码中补上这两个参考:,FF80BX变为FF8000000100D001LALKY变为D00100040204,有时,一块程序装入在某块存储器中但需在另一块存储器中运行。如,程序中的一段关键代码装在ROM中,但需在速度更高的RAM中运行。此时,必须进行运行时的重定位。实现运行时的重定位的方法,可在链接器命令文件的SECTION中将块分配两次:一次设定装入地址,另一次则设定运行地址。如:.text:load=ROM,run=ROM0,6.3.5COFF中的符号,COFF中包含一个存储程序中符号信息的信息表,链接器在进行重定位时要用到这个符号表。在一个模块中定义在另一个模块中引用的符号称为外部符号。一般可用.def、.ref、.global等命令来标明某一符号为外部符号。在一个源模块中,外部符号可以用.def、.ref、.global来定义:(1)定义(.def):在当前模块中定义,在其他模块中引用(2)参考(.ref):在当前模块中引用,在其他模块中定义(3)全局(.global):包含上两者,.globleX;X在本模块中定义,可在其他模块中引用.globleY;Y在其他模块中定义,在本模块中引用X:ADD056h;定义XMPYY;引用Y,6.4链接命令文件,链接器的缺省分配算法是:(1)程序存储器的起始地址是0 x1000h,长度为0 xEFFF。(2)数据存储器的起始地址是0 x300h,长度为0 xFCFF。(3)将.text分配到起始地址为0 x1000h的程序存储器中。(4)将.data分配到紧跟在.text的程序存储器中。(5)将.cinit分配到紧跟在.data的程序存储器中。(6)将自定义的已初始化块分配到紧跟在.data的存储器中,若自定义块不止1个,则按自定义块在输入文件的先后顺序存放。(7)将.bss分配到起始地址为0 x300h的数据存储器中。(8)将自定义的未初始化块分配到紧跟在.bss的存储器中,若自定义块不止1个,则按自定义块在输入文件的先后顺序存放。,1、MEMORY伪指令,MEMORY伪指令的一般语句格式为:MEMORYPAGE0:存储器名1(属性):origin=常数,length=常数PAGEn:存储器名n(属性):origin=常数,length=常数,(1)PAGE:定义一个存储器空间,用户可以定义多达255页。通常PAGE0定义程序存储器,PAGE1定义数据存储器。如果用户没有使用PAGE选项,那么连接器把段定位到PAGE0。每个PAGE代表一个完全独立的地址空间。在PAGE0上已配置的存储器可以和在PAGE1上已配置的存储器重叠。(2)存储器名:命名存储器范围。存储器名由18个字符组成,有效的字符包括AZ,az,$及_。名字对于连接器没有特殊的意义,仅指明存储器的区域。在不同页上存储器范围可以有相同的名字,而在同一页,所有的存储器范围不能有相同的名字,且不能重叠。(3)属性:对于已命名的范围有14个属性。属性是可选项,当被使用时,必须用括号括起来。属性把输出段的定位限制在某些存储器范围内。如果用户不使用任何属性,则输出段即可以定位到任何范围内。有效的属性包括:R:规定存储器可以被读出;W:规定存储器可以被写入;I:规定存储器可以被初始化。,(4)origin:指定一个存储器区域的起始地址,也可以写成org或0。这个值是以字节规定的16位常数,也可以是十进制、八进制或十六进制。(5)length:指定一个存储器的长度,也可以写成len或1。数值的表示方法与origin相同。,例:MEMORY指令举例*SampleCommandfilewithMEMORYdirective*/file1objfile2Obj-oprog.outMEMORYPAGE0: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或runallocation如果在一个块中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(0 x80)。定位.bss块使其包含在单个128字的页内或者从新页开始。用户可以单独使用调准或块,也可以和装入地址、运行地址结合在一起使用,但是调准和块不能一起使用。,(5)输入块:定义组成输出块的输入块。语法:input_sections输入文件中的块组合起来形成输出块,连接器按照所列出的输入块的次序连接并组合它们。输出块的大小是组成它的输入块的大小之和。通用类型的块的规格说明中没有输入块。如SECTIONS.text:.data:.bss:此时链接器从输入文件取出所有.text块并把它们组合到.text输出块内。链接器按照它在输入文件中遇到的次序连接.text输入块,对.data和.bss块的操作与.text相同。,例:SECTIONS.text/*创建.text输出段*f1.obj(.text)/*从f1.obj输入文件中连接.text段*f2.obj(sec1)/*从f2.obj输入文件中连接.sec1段*f3.obj/*连接f3.obj输入文件中所有的段*f4.obj(.text,sec2)/*从f4.obj输入文件中连接.text和.sec1段*,(6)块类型:定义特殊块类型的标志。语法:type=COPY或type=DSECT或type=NOLOAD用户可以把这3种特殊的类型赋予输出块。用COPY和DSECT创建的块是一个虚块,它不包括在输出块存储器分配内,也不占据存储器空间,不包括在存储器映象列表中。但在虚块中定义的全局符号可以被其他输入块引用,COPY段可以将块的内容、重定位信息及行号信息放在输出模块中,而DSECT块则不放置。NOLOAD创建的块不将块的内容、重定位信息及行号信息放在输出模块中,但链接器为其分配空间并包括在存储器映象列表中。,例SETIONS伪指令的使用file1.objfile2.obj*输入文件*-oprog.out*输出文件*SECTIONS.text:load=ROMrun=0800h.const:load=ROM.bss:load=ROMVectors:load=0ht1.obj(.intvec1)t2.obj(.intvec2)endvec=.;/*将vectors段的最后连接地址赋给endvec符号*.data:align=16,(7)填充值:定义用于填充初始化空位的数值。语法:file=value或name:value当初始化输出块内有空位存在时,链接器必须提供原始数据以填充它值填充空位,该数值在存储器内复制直至它填满空位为止。,程序存储器:地址范围内容00000FFF片内ROMFF00FFFF片内RAM块B0数据存储器:地址范围内容00000005I/O寄存器0060007F片内RAM块B2030003FF片内RAM块B1,3、链接器举例,命令文件exmpcmd/*定义连接器选项*/-eSETUP/*定义程序入口*/-oexmp.out/*命名输出文件*/-mexmp.map/*创建一个输出列表文件*/*定义输入文件*/exmp.obj/*连接三个目标文件*/fft.objtables.obj/*定义存储器配置*/MEMORYPAGE0:ROM:ORIGIN=0000h,LENGTH=1000hRAM_B0:ORIGIN=FF00h,LENGTH=100hPAGE1:IO:ORIGlN=0000h,LENGTH=06hRAM_B2:ORIGIN=0060h,LENGTH=20hRAM_B1:ORIGIN=0300h,LENGTH=100hRAM:ORIGIN=0400h,LENGTH=FC00h,/*定义输出段SECTIONS.text:ROM,PAGE=0/*将包含在exmp.obj和fft.obj中的.text块链接到ROM中*/int_vecs:load=0,PAGE=0/*将来自table.obj中int_vecs块的一组中断矢量连接到ROM中的0地址处*/.data:file=7A1Ch,load=RAM_B0,PAGE=0/*将tabales.obj和fft.obj中的.data块链接到程序存储器RAM块B0中,并在其后创建256字的空位,用7Alh填充*/tables.obj(.data)fft.obj(.data).=l00h;,fftvars:RAM_B2,page=1/*创建新块fftvars,并将来自fft.obj的.bss块链入数据存储器RAM块的B2中*/fft.obj(.bss).bss:RAM_B1,PAGE=1,FILL=0FFFFh*exmp.obj中的.bss块链接到RAM块B1中。RAM的未用部分被初始化为FFFh*/*命令文件结束*/然后用下列命令调用连接器:dsplnkexmp.cmd这样将生成一个名为exmp.out的输出文件,可以在TMS320上运行。同时还生成一个列表文件exmp.map。,6.5程序举例,在程序设计时,如果需要在多个模块中使用相同的设置和中断处理,通常将芯片中映射至I/O空间的寄存器地址及标号、预置变量和常数的空间等设置语句集中在一个文件中,称为I/O寄存器头文件(如init.h);将转移中断矢量地址的指令集中在一个文件中,称为中断矢量头文件(如vector.h);将定义程序、数据和I/O空间地址块大小和位置的伪指令集中在一个文件中,称为命令文件(如F206.cmd)。这3个文件称为公用文件。用户在编写自己的应用程序时,用.copy或.include伪指令将I/O寄存器头文件和中断矢量头文件复制到该应用程序中,形成一个汇编源程序(如delay.asm),由汇编器进行汇编后生成一个目标文件(如delay.obj)。再由连接器把该目标文件和命令文件相连接,生成一个可执行文件(如delay.out)。对于简单的单个应用程序也可不使用这两个头文件,直接在应用程序中对用到的I/O寄存器和中断转移地址进行设置。,1、公用文件,该文件可为LF2407芯片定义程序、数据和I/O空间地址块的大小和位置,用于和汇编后的TMS320C2000文件(*.obj)相连接,输出文件名为.out。对于其他芯片,应对该文件作相应的修改。,/*File:LF2407_PM.cmdMEMORYPAGE0:/*程序存储空间*PM:ORIGIN=0h,LENGTH=0044h/*中断矢量*PVECS:ORIGIN=0044h,LENGTH=0100h/*外设中断矢量*PROG:ORIGIN=0150h,LENGTH=7EAFh/*以上为32K字片内闪速存储器(0000h8000h)*/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:FF00hFFFFh*/,(1)命令文件LF2407_PM.cmd:,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)240 x寄存器头文件240 xA.h:,;Fllename:240 xA.h;240 xCPU核寄存器IMR.set0004h;中断屏蔽寄存器IFR.set0006h;中断标志寄存器;系统配置和中断寄存器SCSR1.set7018h;系统控制和状态寄存器lSCSR2.set7019h;系统控制和状态寄存器2DINR.set701Ch;器件版本号寄存器PIVR.set701Eh;外部中断矢量寄存器PIRQR0.set7010h;外部中断请求寄存器0PIRQR1.set7011h;外部中断请求寄存器1PIRQR2.set7012h;外部中断请求寄存器2,该文件包含了240 x芯片所有外部寄存器的地址、标号、预置变量和常数,在片内,所有外部寄存器都被映射到数据空间。该文件还定义了看门狗宏指令。可用.copy或.include伪指令将240 xA.h复制到应用程序中。,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转换结果寄存器4,RESULT5.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状态寄存器B,CAP4FIFO.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.set721Ch;CAN邮箱3中邮箱RAM的2个字节CANMBX3B.set721Dh;CAN邮箱3中邮箱RAM的2个字节CANMBX3C.set721Eh;CAN邮箱3中邮箱RAM的2个字节CANMBX3D.set721Fh;CAN邮箱3中邮箱RAM的2个字节CANMSGID4L.set7220h;CAN邮箱4消息标识符(低16位字)CANMSGID4H.set7221h;CAN邮箱4消息标识符(高16位字)CANMSGCTRL4.set7222h;CAN邮箱4消息控制域寄存器CANMBX4A.set7224h;CAN邮箱4中邮箱RAM的2个字节CANMBX4B.set7225h;CAN邮箱4中邮箱RAM的2个字节,CANMBX4(2.set7226h;CAN邮箱4中邮箱RAM的2个字节CANMBX4D.set7227h;CAN邮箱4中邮箱RAM的2个字节CANMSGID5L.set7228h;CAN邮箱5消息标识符(低16位字)CANMSGID5H.set7229h;CAN邮箱5消息标识符高16位字)CANMSGCTRL5.set722Ah;CAN邮箱5消息控制域寄存器CANMBX5A.set722Ch;CAN邮箱5中邮箱RAM的2个字节CANMBX5B.set722Dh;CAN邮箱5中邮箱RAM的2个字节CANMBX5C.set722Eh;CAN邮箱5中邮箱RAM的2个字节CANMBX5D.set722Fh;CAN邮箱5中邮箱RAM的2个字节;代码安全模块(CSM)寄存器(数据存储器)KEY3.set77F0h;64位KEY寄存器高16位字KEY2.set77F1h;64位KEY寄存器第3个字KEY1.set77F2h;64位KEY寄存器第2个字KEY0.set77F3h;64位KEY寄存器低16位字;代码安全模块(CSM)寄存器(程序存储器)PWL3.set0040h;64位密码第3个字PWL2.set0041h;64位密码第2个字PWL1.set0042h;64位密码低字PWL0.set0043h;64位密码高字,;I/O空间映射寄存器WSGR.setFFFFh;等待状态产生控制寄存器FCMR.setFF0Fh;闪烁控制模式寄存器;位测试指令的位代码(BIT)BITl5.set0000h;位代码15BITl4.set0001h;位代码14BIT13.set0002h;位代码13BIT12.set0003h;位代码12BIT11.set0004h;位代码11BIT10.set0005h;位代码10BIT9.set0006h;位代码9BIT8.set0007h;位代码8BIT7.set0008h;位代码7BIT6.set0009h;位代码6BIT5.set000Ah;位代码5BIT4.set000Bh;位代码4BIT3.set000Ch;位代码3B1T2.set000Dh;位代码2BIT1.set0

温馨提示

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

评论

0/150

提交评论