资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第,6,章,汇编语言,6.1,汇编语言格式,TMS320汇编语言源程序由源语句组成。源语句包括汇编指令、伪指令、宏指令。,源语句的一般格式为,标号: 助记符 操作数1,操作数2, ;注释,标号域 助记符域 操作数域 注释域,注:“ 表示该项可缺省。,例6.1 SYM1 .set 2 ;符号SYM1等于2,BEGIN: LDP SYM1 ;将2装入DP,.word 016h ;初始化一个字为16h,1,、标号域,标号包含132个字母、数字、字符(AZ,a2,09,及$),可识别符号的大小写,且规定第一个字符不能是数字。,标号可以后随冒号(:),冒号并不作为标号的一局部被处理。,如果不使用标号,那么第一个字必须是空格或分号或星号。,中选用标号时,其值是段程序计数器(SPC)的当前值,标号指向与它们相关联的语句。例如,如果用.word伪指令初始化几个字,那么标号将指向第一个字。,行号 SPC 目标代码 源语句,10 0040 000A START:.word 0Ah,3,7,0041 0003,0042 0007,标号也可以单独出现在行中,此时它指向下一行中的指令。如:,3 0050 HERE:,4 0050 0003 .word 3 ;此行SPC无增量,2,、助记符域,助记符是源语句中的关键局部,不能缺省,它表示本指令的操作类型。助记符不能从源语句的第一列开始,如果从第一列开始,将被解释为标号。,助记符包括以下操作码之一:,(1)汇编指令(例如ABS,MPY,SPH);,(2)伪指令(例如.data,.fist,.set);,(3)宏指令(例如.macro,.mexit)。,3,、操作数域,操作数域是跟在助记符域后面的操作数列表,可缺省。如果多于两个操作数,那么只用逗号隔开。操作数可以是常数、符号和表达式。,4,、注释域,注释域可以从源语句行的任一列开始并直至本行的末尾,即仅包括注释的源语句是有效的。如果它从第一列开始那么可以用分号(;)或星号(*)开始;在行的其他地方开始的注释,必须以分号开始。,上述各个域必须用一个或多个空格分开。,6、1、1,常数、字符串和符号,(1),二进制整数:以字母,B(,或,b),结尾,由二进制数字,(0,,,1),组成的数字串。数字串长度长度最多可达,16,个二进制数字,如,01000110,B,。,(2),八进制整数:以字母,Q(,或,q),结尾,由八进制数字,(0,7),组成的数字串。数字串长度最多可达,6,个八进制数字,如,100000,Q,。,(3),十进制整数:以字母,D(,或,d),结尾,(,也可缺省,),,十进制整数由,0,9,数字组成,范围从,-32678,65535,,如,-30000,。,(4),十六进制整数:以字母,H(,或,h),结尾,由十六进制数字,09,和,A,F(,或,a,f),组成的数字串。数字串长度最多可达,4,个十六进制数字。,(5),字符常数:包含在单引号中的一个或两个字符的串。每个字符表示为,8,位,ASCII,码,如,a,定义字符,a,,,并在内部用,61,H,表示。,(6),汇编时间常数:用,.,set,伪指令对符号进行赋值,赋值的内容不同,汇编时符号所表达的含义也就不同。,1,、常数,例如,用.set向符号赋值,那么符号成为常数,为了在表达式中使用此常数,赋予它的值必须是绝对值。,SHIFT .set 3,LACC *,SHIFT,AR1,也可用.set将存放器名赋予符号常数,此时符号与存放器为同一词,如:,AUXR1 .set AR1,LACC *,0,AUXR1,2,、字符串,字符串是包含在双引号内的一串字符,双引号是字符串的一局部。串的最大长度是变化的,并由每一个使用字符串的伪指令定义。字符在内部被表示为8位ASCII字符,如:“sample program定义13个字符的字符串sample program。,字符串用于以下场合:,(1).copy “filename中的文件名;,(2).sect “section name中的段名;,(3).byte “chasing中数据初始化伪指令;,(4).string伪指令的操作数。,字符串与字符常数不同,字符常数代表一个单独的整数值,而字符串是字符的列表。,3,、符号,符号被用做标号、常数及替代符号。符号名最多可由,32,个字母和数字混合组成,(,AZ,,,az,,,09,,$,和,_),。符号的第一个字符不能是数字,符号内不能有空格。用户定义的符号分大小写,例如汇编时,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 .macro x,y,z,a=x,b=y,c=z,.endm,调用宏: 汇编时展开宏,parms 100,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,子目录下,对应的文件名为。,1编辑器:包括分析器、优化器、代码产生器。把C语言程序编译成汇编语言程序。,2汇编器:把汇编语言源代码或C语言已经编译成汇编语言代码进行汇编,以产生COFF目标文件。,3链接器:将文件链接,产生可执行的目标文件。,使用汇编器可以将汇编语言源程序汇编为目标文件,用链接器将假设干个目标文件连接成个可被芯片执行的可执行文件。这些目标文件的格式称为通用目标文件格式(COFF,Common Object File Format)。,通用目标文件格式的核心是使程序员在编写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段,0000 2003 LAC 03h,0000 ptr .usect “var1,1 ;在var1段保存1个字,0001 array .usect “var1,100 ;在var1段保存100个字,0001 0037 ADD 037h ;还在.text段,0065 dflag .usect “var1,50 ;在var1段保存50个字,0002 0065 ADD dflag ;还在.text段,0000 vec .usect “var2,100 ;在var2段保存100个字,0003 0000 ADD vec ;还在.text段,.global array ;将array定义为外部符号名,6.3.3,链接器对块的处理,链接器对块的处理有两个功能。首先,将COFF目标文件中的块用来建立程序块或数据块,将输入块组合起来以建立可执行的COFF输出模块;其次,链接器为输出块选择存储器地址。链接器提供两个命令完成上述功能:MEMORY和SECTION。 MEMORY命令定义目标系统的存储器,程序员可定义每一块存储器,指定每一块的起始地址和长度。 SECTION命令告诉链接器如何组合输入块以及在存储器何处存放输出块。假设不用这两个命令,那么链接器采用缺省的分配算法。假设要用这两条命令,那么一般需要建立一个链接命令文件,扩展名为 d。,6.3.4,程序的重定位,汇编器对每块汇编时都假定其起始地址为0,每块中所有的重定位符号标号都是相对于0地址而言的。当然,实际上并不是所有块在存储器中都是以0地址定位的,因此链接器必须通过以下方法对每块进行重定位。,1分配块至存储器,使各块有适宜的起始地址。,2调整符号值,使之对应于新的块地址。,3调整重定位后符号的参考值,以反映调整后的符号值。,链接器利用重定位项来调整符号的参考值。汇编器每次在可重定位符号被参考时建立一个重定位项,链接器那么在符号被重定位之后利用这些项来修正参考值。,COFF目标文件中的每一块都有一个重定位工程表。表中包含了块中每一个可重定位参考的一个重定位项。链接器在使用完重定位项后将其去除以防止对输出块再次重定位。,产生重定位项的代码,1 .ref X,2 0000 .text,3 0000 FF80 B X,;产生一个重定位项,0001 0000,!,4 0002 D001 LALK Y,;产生一个重定位项,0003 0004,5 0004 CEIF Y: IDLE,链接后,假定X重定位至地址100h,且.text块重定位到起始地址200h,那么Y重定位后的地址为204h。链接器利用这两个重定位项在目标代码中补上这两个参考:,FF80 B X,变为,FF80,0000 0100,D001 LALK Y,变为,D001,0004 0204,有时,一块程序装入在某块存储器中但需在另一块存储器中运行。如,程序中的一段关键代码装在ROM中,但需在速度更高的RAM中运行。此时,必须进行运行时的重定位。实现运行时的重定位的方法,可在链接器命令文件的SECTION中将块分配两次:一次设定装入地址,另一次那么设定运行地址。如:,.text: load=ROM, run=ROM0,6.3.5 COFF,中的符号,COFF中包含一个存储程序中符号信息的信息表,链接器在进行重定位时要用到这个符号表。,在一个模块中定义在另一个模块中引用的符号称为外部符号。一般可用.def、.ref、.global等命令来标明某一符号为外部符号。在一个源模块中,外部符号可以用.def、.ref、.global来定义:,1定义 .def :在当前模块中定义,在其他模块中引用,2参考 .ref : :在当前模块中引用,在其他模块中定义,3全局 .global :包含上两者,.globle X,;,X,在本模块中定义,可在其他模块中引用,.globle Y,;,Y,在其他模块中定义,在本模块中引用,X,:,ADD 056h,;定义,X,MPY Y,;引用,Y,6.,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=常数,1PAGE:定义一个存储器空间,用户可以定义多达255页。通常PAGE0定义程序存储器,PAGE1定义数据存储器。如果用户没有使用PAGE选项,那么连接器把段定位到PAGE0。每个PAGE代表一个完全独立的地址空间。在PAGE0上已配置的存储器可以和在PAGE1上已配置的存储器重叠。,2存储器名:命名存储器范围。存储器名由18个字符组成,有效的字符包括AZ,az,$及_。名字对于连接器没有特殊的意义,仅指明存储器的区域。在不同页上存储器范围可以有相同的名字,而在同一页,所有的存储器范围不能有相同的名字,且不能重叠。,3属性:对于已命名的范围有14个属性。属性是可选项,当被使用时,必须用括号括起来。属性把输出段的定位限制在某些存储器范围内。如果用户不使用任何属性,那么输出段即可以定位到任何范围内。有效的属性包括:,R:规定存储器可以被读出;,W:规定存储器可以被写入;,I:规定存储器可以被初始化。,4origin:指定一个存储器区域的起始地址,也可以写成org或0。这个值是以字节规定的16位常数,也可以是十进制、八进制或十六进制。,5length:指定一个存储器的长度,也可以写成len或1。数值的表示方法与origin相同。,例:,MEMORY,指令举例,*,SampleCommandfilewithMEMORYdirective */,file1,obj file2,Obj,-o,MEMORY,PAGE0,:,ROM,:,ORIGIN=0h,,,LENGTH=1000h,PAGE1,:,B2,:,ORIGIN=60h,,,LENGTH=20h,B0B1,:,ORIGIN=200h,,,LENGTH=200h,SECTIONS,伪指令的一般语法形式是:,SECTIONS,段名,1,:,特性,1,,特性,2,,,段名,2,:,特性,1,,特性,2,,,.,2,、,SECTION,伪指令,特性列表的选项,(块,所具备的特性,),有以下几种:,(1),装载地址:规定,块,将被装载在存储器中的位置。,语法:,load=allocation,或,allocation,或,allocation,allocation,是,MEMORY,伪指令所定义的范围内地址,包括,ROM,、,RAM,、,实际地址值,(16,位常数,),等。,(2),运行地址:定义,块,在存储器内运行的位置。,语法:,run,=,allocation,或,runallocation,如果在一个,块,中,load,和,run,的地址相同,,run,可以省略,。,(3),调准地址:规定块应在地址边界上开始。调准可以使连接器把输出块放在位于,n,字边界的地址,其中,2,是,2,的幂。,语法:,align=n,或,align=(n),如,.,text align=128,,,即将,.,text,段定位于页边界。,(4),块地址:规定块必须装在两个地址边界之间,它把块定位在大小为,n,的块内任何地方,如果块大于大小为的,n,块,那么块将从该边界开始。和调准一样,,n,必须是,2,的幂。,语法:,block=n,或,block(n),如,.,bss load=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.obj file2.obj,*,输入文件,*,-,o,*,输出文件,*,SECTIONS,.text: load=ROM run=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,当初始化输出块内有空位存在时,链接器必须提供原始数据以填充它值填充空位,该数值在存储器内复制直至它填满空位为止。,程序存储器: 地址范围 内容,00000FFF 片内ROM,FF00FFFF 片内RAM块B0,数据存储器: 地址范围 内容,00000005 I/O存放器,0060007F 片内RAM块B2,030003FF 片内RAM块B1,3,、链接器举例,命令文件exmpcmd,/* 定义连接器选项 */,-e SETUP /* 定义程序入口 */,-o /* 命名输出文件 */,-m /* 创立一个输出列表文件 */,/* 定义输入文件 */,/* 连接三个目标文件 */,/* 定义存储器配置 */,MEMORY,PAGE0: ROM: ORIGIN=0000h, LENGTH=1000h,RAM_B0: ORIGIN=FF00h, LENGTH=100h,PAGE1: IO: ORIGlN=0000h, LENGTH=06h,RAM_B2: ORIGIN=0060h, LENGTH=20h,RAM_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空间地址块大小和位置的伪指令集中在一个文件中,称为命令文件(如F206 d)。这3个文件称为公用文件。,用户在编写自己的应用程序时,用.copy或.include伪指令将I/O存放器头文件和中断矢量头文件复制到该应用程序中,形成一个汇编源程序(如),由汇编器进行汇编后生成一个目标文件(如)。再由连接器把该目标文件和命令文件相连接,生成一个可执行文件(如)。,对于简单的单个应用程序也可不使用这两个头文件,直接在应用程序中对用到的I/O存放器和中断转移地址进行设置。,1,、公用文件,该文件可为,LF2407,芯片定义程序、数据和,I/O,空间地址块的大小和位置,用于和汇编后的,TMS320C2000,文件,(*.obj),相连接,输出文件名为,.out,。对于其他芯片,应对该文件作相应的修改。,/* File: LF2407_PM d,MEMORY,PAGE0 : /* 程序存储空间 *,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),命令文件:,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,:,PM PAGE0,.pvecs,:,PVECS PAGE0,.text,:,PROG PAGE0,.bss,:,BLK_B2 PAGE1,.data,:,BLlBl PAGEl,(2)240x存放器头文件:,;Flle name:,;240xCPU核存放器,IMR .set 0004h;中断屏蔽存放器,IFR .set 0006h;中断标志存放器,;系统配置和中断存放器,SCSR1 .set 7018h ;系统控制和状态存放器l,SCSR2 .set 7019h;系统控制和状态存放器2,DINR .set 701Ch ;器件版本号存放器,PIVR .set 701Eh ;外部中断矢量存放器,PIRQR0 .set 7010h ;外部中断请求存放器0,PIRQR1 .set 7011h ;外部中断请求存放器1,PIRQR2 .set 7012h ;外部中断请求存放器2,该文件包含了240x芯片所有外部存放器的地址、标号、预置变量和常数,在片内,所有外部存放器都被映射到数据空间。该文件还定义了看门狗宏指令。可用.copy或.include伪指令将复制到应用程序中。,PIACKR0 .set 7014h ;外部中断响应存放器0,PIACKR1 .set 7015h ;外部中断响应存放器1,PIACKR2 .set 7016h ;外部中断响应存放器2,;外部中断配置存放器,XINT1CR .set 7070h ;外部中断1控制存放器,XINT2CR .set 7071h ;外部中断2控制存放器,;数据I/O存放器,MCRA .set 7090h ;I/O复用控制存放器A,MCRB .set 7092h ;I/O复用控制存放器B,MCRC .set 7094h ;I/O复用控制存放器C,PADATDIR .set 7098h ;I/O口A数据和方向存放器,PBDATDIR .set 709Ah ;I/O口B数据和方向存放器,PCDATDIR .set 709Ch ;I/O口C数据和方向存放器,PDDATDIR .set 709Eh ;I/O口D数据和方向存放器,PEDATDIR .set 7095h ;I/O口E数据和方向存放器,PFDATDIR .set 7096h ;I/O口F数据和方向存放器,;看门狗(WD)存放器,WDCNTR .set 7023h ;WD计数器存放器,WDKEY .set 7025h ;WD复位关键字存放器,WDCR .set 7029h ;WD定时器控制存放器,:模数转换(ADC)存放器,ADCCTRL1 .set 70A0h ; ADC控制存放器1,ADCCTRL2 .set 70A1h ;ADC控制存放器2,MAXCONV .set 70A2h ;最大转换通道个数存放器,CHSELSEQ1 .set 70A3h ;通道选择排序控制存放器1,CHSELSEQ2 .set 70A4h ;通道选择排序控制存放器2,CHSELSEQ3 .set 70A5h ;通道选择排序控制存放器3,CHSELSEQ4 .set 70A6h ;通道选择排序控制存放器4,AUTO SEQ-SR .set 70A7h ;自动排序状态存放器,RESULT0 .set 70A8h ;A/D转换结果存放器0,RESULT1 .set 70A9h ;A/D转换结果存放器1,RESULT2 .set 70AAh ;A/D转换结果存放器2,RESULT3 .set 70ABh ;A/D转换结果存放器3,RESULT4 .set 70ACh ;A/D转换结果存放器4,RESULT5 .set 70ADh ;A/D转换结果存放器5,RESULT6.set 70AEh ;A/D转换结果存放器6,RESULT7.set 70AFh ;A/D转换结果存放器7,RESULT8.set 70B0h ;A/D转换结果存放器8,RESULT9.set 70B1h ;A/D转换结果存放器9,RESULTl0.set 70B2h ;A/D转换结果存放器10,RESULT11.set 70B3h ;A/D转换结果存放器11,RESULT12.set 70B4h ;A/D转换结果存放器12,RESULT13.set 70B5h ;A/D转换结果存放器13,RESULT14.set 70B6h ;A/D转换结果存放器14,RESULT15.set 70B7h ;A/D转换结果存放器15,CALIBRATION.set 70B8h ;校准结果存放器,:串行外设接口SPI存放器,SPICCR.set 7040h ;配置控制存放器,SPICTL.set 7041h ;操作控制存放器,SPISTS.set 7042h ;状态存放器,SPIBRR.set 7044h ;波特率控制存放器,SPIEMU.set 7046h ;仿真缓冲存放器,SPIRXBUF.set 7047h ;串行接收缓冲存放器,SPITXBUF.set 7048h ;串行发送缓冲存放器,SPIDAT.set 7049h ;串行数据存放器,SPIPRI .set 704Fh ;中断优先级控制存放器,;串行通信接口,SCICCR.set 7050h ;SCI通信控制存放器,SCICTL1.set 7050h ;SCI控制存放器1,SCIHBAUD.set 7050h ;SCI波特率高位字节存放器,SCILBAUD.set 7050h ;SCI波特率低位字节存放器,SCICTL2.set 7050h ; SCI控制存放器2,SCIRXST.set 7050h ;SCI接收状态存放器,SCIRXEMU.set 7050h ;SCI接收数据缓冲存放器,SCIRXBUF.set 7050h ;SCI仿真数据缓冲存放器,SCITXBUF.set 7050h ;SCI发送数据缓冲存放器,SCIPRI .set 7050h ;SCl中断优先级控制存放器,;事件管理器AEVA存放器,GPTCONA.set 7400h ;全局通用定时器控制存放器A,T1CNT.set 7401h ;通用定时器1计数存放器,T1CMPR .set 7402h ;通用定时器1比较存放器,T1PR.set 7403h ;通用定时器1周期存放器,T1CON.set 7404h ;通用定时器1控制存放器,T2CNT.set 7405h ;通用定时器2计数存放器,T2CMPR.set 7406h ;通用定时器2比较存放器,T2PR.set 7407h ;通用定时器2周期存放器,T2CON.set 7408h ;通用定时器2控制存放器,COMCONA.set 7411h ;比较控制存放器A,ACTRA.set 7413h ;全比较操作控制存放器A,DBTCONA.set 7415h ;死区时间控制存放器A,CMPR1.set 7417h ;全比较单元1比较存放器,CMPR2.set 7418h ;全比较单元2比较存放器,CMPR3.set 7419h ;全比较单元3比较存放器,CAPCONA.set 7420h ;捕获控制存放器
展开阅读全文