DSP第六章匯編語(yǔ)言課件_第1頁(yè)
DSP第六章匯編語(yǔ)言課件_第2頁(yè)
DSP第六章匯編語(yǔ)言課件_第3頁(yè)
DSP第六章匯編語(yǔ)言課件_第4頁(yè)
DSP第六章匯編語(yǔ)言課件_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第6章匯編語(yǔ)言6.1匯編語(yǔ)言格式

TMS320匯編語(yǔ)言源程序由源語(yǔ)句組成。源語(yǔ)句包括匯編指令、偽指令、宏指令。源語(yǔ)句的一般格式為[標(biāo)號(hào)][:]助記符[操作數(shù)1,操作數(shù)2,…][;注釋]標(biāo)號(hào)域

助記符域

操作數(shù)域

注釋域注:“[]”表示該項(xiàng)可缺省。例6.1SYM1.set2 ;符號(hào)SYM1等于2

BEGIN:LDPSYM1;將2裝入DP .word016h;初始化一個(gè)字為16h1、標(biāo)號(hào)域標(biāo)號(hào)包含1~32個(gè)字母、數(shù)字、字符(A~Z,a~2,0~9,—及$),可識(shí)別符號(hào)的大小寫(xiě),且規(guī)定第一個(gè)字符不能是數(shù)字。

標(biāo)號(hào)可以后隨冒號(hào)(:),冒號(hào)并不作為標(biāo)號(hào)的一部分被處理。

如果不使用標(biāo)號(hào),則第一個(gè)字必須是空格或分號(hào)或星號(hào)。

當(dāng)選用標(biāo)號(hào)時(shí),其值是段程序計(jì)數(shù)器(SPC)的當(dāng)前值,標(biāo)號(hào)指向與它們相關(guān)聯(lián)的語(yǔ)句。例如,如果用.word偽指令初始化幾個(gè)字,那么標(biāo)號(hào)將指向第一個(gè)字。

行號(hào)

SPC目標(biāo)代碼

源語(yǔ)句100040000ASTART:.word0Ah,3,70041000300420007標(biāo)號(hào)也可以單獨(dú)出現(xiàn)在行中,此時(shí)它指向下一行中的指令。如:30050HERE:400500003.word3;此行SPC無(wú)增量3、操作數(shù)域

操作數(shù)域是跟在助記符域后面的操作數(shù)列表,可缺省。如果多于兩個(gè)操作數(shù),則只用逗號(hào)隔開(kāi)。操作數(shù)可以是常數(shù)、符號(hào)和表達(dá)式。4、注釋域注釋域可以從源語(yǔ)句行的任一列開(kāi)始并直至本行的末尾,即僅包括注釋的源語(yǔ)句是有效的。如果它從第一列開(kāi)始則可以用分號(hào)(;)或星號(hào)(*)開(kāi)始;在行的其他地方開(kāi)始的注釋?zhuān)仨氁苑痔?hào)開(kāi)始。

上述各個(gè)域必須用一個(gè)或多個(gè)空格分開(kāi)。

6、1、1常數(shù)、字符串和符號(hào)

(1)二進(jìn)制整數(shù):以字母B(或b)結(jié)尾,由二進(jìn)制數(shù)字(0,1)組成的數(shù)字串。數(shù)字串長(zhǎng)度長(zhǎng)度最多可達(dá)16個(gè)二進(jìn)制數(shù)字,如B。(2)八進(jìn)制整數(shù):以字母Q(或q)結(jié)尾,由八進(jìn)制數(shù)字(0~7)組成的數(shù)字串。數(shù)字串長(zhǎng)度最多可達(dá)6個(gè)八進(jìn)制數(shù)字,如100000Q。(3)十進(jìn)制整數(shù):以字母D(或d)結(jié)尾(也可缺省),十進(jìn)制整數(shù)由0~9數(shù)字組成,范圍從-32678~65535,如-30000。(4)十六進(jìn)制整數(shù):以字母H(或h)結(jié)尾,由十六進(jìn)制數(shù)字0~9和A~F(或a~f)組成的數(shù)字串。數(shù)字串長(zhǎng)度最多可達(dá)4個(gè)十六進(jìn)制數(shù)字。(5)字符常數(shù):包含在單引號(hào)中的一個(gè)或兩個(gè)字符的串。每個(gè)字符表示為8位ASCII碼,如‘a(chǎn)’定義字符a,并在內(nèi)部用61H表示。(6)匯編時(shí)間常數(shù):用.set偽指令對(duì)符號(hào)進(jìn)行賦值,賦值的內(nèi)容不同,匯編時(shí)符號(hào)所表達(dá)的含義也就不同。1、常數(shù)

例如,用.set向符號(hào)賦值,則符號(hào)成為常數(shù),為了在表達(dá)式中使用此常數(shù),賦予它的值必須是絕對(duì)值。

SHIFT .set3 LACC*,SHIFT,AR1也可用.set將寄存器名賦予符號(hào)常數(shù),此時(shí)符號(hào)與寄存器為同一詞,如: AUXR1.setAR1 LACC*,0,AUXR13、符號(hào)

符號(hào)被用做標(biāo)號(hào)、常數(shù)及替代符號(hào)。符號(hào)名最多可由32個(gè)字母和數(shù)字混合組成(A~Z,a~z,0~9,$和_)。符號(hào)的第一個(gè)字符不能是數(shù)字,符號(hào)內(nèi)不能有空格。用戶(hù)定義的符號(hào)分大小寫(xiě),例如匯編時(shí)ABC,Abc及abc被識(shí)別為3個(gè)不同的符號(hào)。

表達(dá)式由運(yùn)算符、常數(shù)和符號(hào)組成。有效表達(dá)式值的范圍是-32768~+32767。6、1、2表達(dá)式和運(yùn)算符

表達(dá)式內(nèi)使用的運(yùn)算符的優(yōu)先級(jí)見(jiàn)下表:高組運(yùn)算符說(shuō)明優(yōu)先級(jí)1+-~取正取負(fù)求反

低2*/%??乘除求模左移右移3+-^|&加減按位邏輯異或按位邏輯或按位邏輯與4<><=>==或==!=小于大于小于或等于大于或等于等于不等于(2)調(diào)用宏:在定義了宏以后,就可以在源程序中將宏的名字作為操作碼來(lái)調(diào)用。

格式:

宏名[實(shí)參數(shù)1][,實(shí)參數(shù)2][,實(shí)參數(shù)n](3)展開(kāi)宏:匯編器在對(duì)源文件進(jìn)行匯編時(shí),對(duì)調(diào)用的宏進(jìn)行展開(kāi)。在展開(kāi)過(guò)程中,匯編器用宏體取代宏調(diào)用語(yǔ)句,宏體中的形式參數(shù)(替代符號(hào))用實(shí)際參數(shù)代替。

①如果某個(gè)形式參數(shù)沒(méi)有對(duì)應(yīng)的實(shí)參數(shù)為其賦值,該形式參數(shù)將被空串(“”)代替。

②如果實(shí)參數(shù)的個(gè)數(shù)多于形式參數(shù),則余下的實(shí)參數(shù)將賦給最后一個(gè)形式參數(shù)(用逗號(hào)隔開(kāi))。③如果要把一串變量賦給一個(gè)形式參數(shù),或者把一個(gè)逗號(hào)(或分號(hào))傳給一個(gè)形式參數(shù),就必須用引號(hào)將它們引起來(lái)。④匯編時(shí),匯編器先用實(shí)參數(shù)代替形式參數(shù)并展開(kāi)宏,然后把源語(yǔ)句匯編為目標(biāo)代碼,并輸出到列表文件中。

宏定義:

parms.macrox,y,za=x b=y c=z .endm調(diào)用宏:

匯編時(shí)展開(kāi)宏

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通用目標(biāo)文件格式

CCS開(kāi)發(fā)環(huán)境可以看成是一個(gè)大的軟件包,里面包含了源代碼編輯器,以及工程文件組織、編譯和調(diào)試等一切功能模塊。該軟件包里,shell程序可以完成3個(gè)功能:編譯、匯編和鏈接。shell程序缺省在C盤(pán)安裝時(shí),被安裝在C:\ti\c2400\cgtool子目錄下,對(duì)應(yīng)的文件名為dspcl.exe。(1)編輯器:包括分析器、優(yōu)化器、代碼產(chǎn)生器。把C語(yǔ)言程序編譯成匯編語(yǔ)言程序。(2)匯編器:把匯編語(yǔ)言源代碼或C語(yǔ)言已經(jīng)編譯成匯編語(yǔ)言代碼進(jìn)行匯編,以產(chǎn)生COFF目標(biāo)文件。(3)鏈接器:將文件鏈接,產(chǎn)生可執(zhí)行的目標(biāo)文件。6.3.1塊

目標(biāo)文件的最小單位被稱(chēng)為塊,它是在存儲(chǔ)器中占有連續(xù)空間的一塊代碼或數(shù)據(jù)。目標(biāo)文件中的每一個(gè)塊都是獨(dú)立的。一般地,COFF目標(biāo)文件應(yīng)包含3個(gè)缺省的塊:.text塊:通常包含可執(zhí)行代碼。.data塊:通常包含已初始化的數(shù)據(jù)。.bss塊:通常為未初始化的變量保留空間。

此外,匯編器和連接器允許用戶(hù)建立和鏈接自定義的塊,這些塊與.text,.data類(lèi)似。所有的塊可以分為兩類(lèi):已初始化塊:包含程序代碼和數(shù)據(jù)。如.text和.data及用.sect或.asect匯編器命令創(chuàng)建的塊。未初始化塊:為未初始化數(shù)據(jù)在存儲(chǔ)器映像中保留空間。.bss段和用.usect匯編器命令創(chuàng)建的塊是未初始化的段。

6.3.2匯編器對(duì)塊的處理

匯編器對(duì)塊的處理功能主要是確定匯編語(yǔ)言程序的各部分屬于哪個(gè)特定的塊。匯編器有六個(gè)命令來(lái)完成這種功能:.bss,.usect,.text,.data,.sect及.asect

。其中.bss和.usect

命令創(chuàng)建未初始化塊,而.text

,.data

,.sect及.asect

命令則建立已初始化塊。如果在程序中未用任何命令來(lái)指示,匯編器將把所有程序塊或數(shù)據(jù)塊統(tǒng)一匯編至.text

中。(1)未初始化塊

未初始化塊主要用來(lái)在存儲(chǔ)器中保留空間,它們通常分配在RAM中。這些塊在目標(biāo)文件中沒(méi)有實(shí)際內(nèi)容,只是保留空間而已。程序可以在運(yùn)行時(shí)利用這些空間建立和存儲(chǔ)變量。未初始化數(shù)據(jù)塊是通過(guò)使用.bss和.usect匯編器命令來(lái)建立。.bss命令在.bss塊中保留空間,而.usect命令在自定義塊中保留空間。格式為:

.bss符號(hào),字?jǐn)?shù)符號(hào).usect“塊名”,字?jǐn)?shù)其中,符號(hào)指向由.bss或.usect保留的第一個(gè)字,它對(duì)應(yīng)于為變量保留空間的變量名,可以在其他任何塊中被訪問(wèn),也可以用.global定義為全局符號(hào)。字?jǐn)?shù)表示空間的大小,塊名是程序員自己定義的名字。匯編器遇到.text,.data,.sect和.

asect命令時(shí)立即停止匯編至當(dāng)前塊中且開(kāi)始匯編至相應(yīng)塊中。匯編器遇到.bss或.usect命令并不結(jié)束當(dāng)前塊開(kāi)始一個(gè)新塊,它們只是暫時(shí)離開(kāi)當(dāng)前塊。當(dāng)匯編器遇到上述命令時(shí),立即停止匯編至當(dāng)前塊中,且開(kāi)始將隨后的代碼或數(shù)據(jù)匯編至相應(yīng)的塊中。塊是通過(guò)迭代過(guò)程建立的。如,當(dāng)匯編器首次遇到一個(gè).data命令,.data塊是空的,.data后面的語(yǔ)句被匯編到.data塊中,直到遇到一個(gè).text,.sect或.asect命令為止。如果匯編器在后面又遇到.data命令,則將.data后面的語(yǔ)句加到已存在于.data塊中語(yǔ)句的后面,這樣建立的唯一的.data塊可以在存儲(chǔ)器中分配一個(gè)連續(xù)的空間。(3)自定義塊

自定義塊就是程序員自己建立的塊,與缺省的.text,.data和.bss塊一樣使用,但它與缺省塊分開(kāi)匯編。如,重復(fù)使用.text命令在目標(biāo)文件中只建立一個(gè).text塊,鏈接后這個(gè).text塊也作為一個(gè)單位分配到存儲(chǔ)器中。有時(shí)候程序員想把一部分程序放至不同于.text的存儲(chǔ)器中,則須使用自定義塊,對(duì)數(shù)據(jù)也可同樣處理。有三條指令可建立自定義塊:.usect,.sect和.asect,其中.usect建立的塊用法類(lèi)似于.bss,是在RAM中為變量保留空間;而.sect和.asect建立包含代碼或數(shù)據(jù)的塊,用法類(lèi)似于.text和.data。.sect建立的塊是可重定位的,而.asect建立具有絕對(duì)地址的塊。符號(hào).usect“塊名”,字?jǐn)?shù)

.sect“塊名”.asect“塊名”,地址例此例表示如何用.usect偽指令定義兩個(gè)未初始化的命名段var1和var2。符號(hào)ptr指向var1段中保留的第一個(gè)字。符號(hào)array指向var1段中100個(gè)字塊內(nèi)的第一個(gè)字。符號(hào)dflag指向var1段中50個(gè)字塊內(nèi)的第一個(gè)字。符號(hào)vec指向Var2段中保留的第一個(gè)字。0000.text;匯編到.text段00002003LAC03h0000ptr.usect“var1”,1;在var1段保留1個(gè)字0001array.usect“var1”,100;在var1段保留100個(gè)字00010037ADD037h;還在.text段0065dflag.usect“var1”,50;在var1段保留50個(gè)字00020065ADDdflag;還在.text段0000vec.usect“var2”,100;在var2段保留100個(gè)字00030000ADDvec;還在.text段.globalarray;將array定義為外部符號(hào)名

6.3.4程序的重定位

匯編器對(duì)每塊匯編時(shí)都假定其起始地址為0,每塊中所有的重定位符號(hào)(標(biāo)號(hào))都是相對(duì)于0地址而言的。當(dāng)然,實(shí)際上并不是所有塊在存儲(chǔ)器中都是以0地址定位的,因此鏈接器必須通過(guò)下列方法對(duì)每塊進(jìn)行重定位。(1)分配塊至存儲(chǔ)器,使各塊有合適的起始地址。(2)調(diào)整符號(hào)值,使之對(duì)應(yīng)于新的塊地址。(3)調(diào)整重定位后符號(hào)的參考值,以反映調(diào)整后的符號(hào)值。鏈接器利用重定位項(xiàng)來(lái)調(diào)整符號(hào)的參考值。匯編器每次在可重定位符號(hào)被參考時(shí)建立一個(gè)重定位項(xiàng),鏈接器則在符號(hào)被重定位之后利用這些項(xiàng)來(lái)修正參考值。

COFF目標(biāo)文件中的每一塊都有一個(gè)重定位項(xiàng)目表。表中包含了塊中每一個(gè)可重定位參考的一個(gè)重定位項(xiàng)。鏈接器在使用完重定位項(xiàng)后將其去除以防止對(duì)輸出塊再次重定位。產(chǎn)生重定位項(xiàng)的代碼

1.refX

20000.text30000FF80BX;產(chǎn)生一個(gè)重定位項(xiàng)

00010000!

40002D001LALKY;產(chǎn)生一個(gè)重定位項(xiàng)0003000450004CEIFY:IDLE鏈接后,假定X重定位至地址100h,且.text塊重定位到起始地址200h,則Y重定位后的地址為204h。鏈接器利用這兩個(gè)重定位項(xiàng)在目標(biāo)代碼中補(bǔ)上這兩個(gè)參考:FF80BX變?yōu)镕F80

00000100D001LALKY變?yōu)镈001000402046.4鏈接命令文件鏈接器的缺省分配算法是:(1)程序存儲(chǔ)器的起始地址是0x1000h,長(zhǎng)度為0xEFFF。(2)數(shù)據(jù)存儲(chǔ)器的起始地址是0x300h,長(zhǎng)度為0xFCFF。(3)將.text分配到起始地址為0x1000h的程序存儲(chǔ)器中。(4)將.data分配到緊跟在.text的程序存儲(chǔ)器中。(5)將.cinit分配到緊跟在.data的程序存儲(chǔ)器中。(6)將自定義的已初始化塊分配到緊跟在.data的存儲(chǔ)器中,若自定義塊不止1個(gè),則按自定義塊在輸入文件的先后順序存放。(7)將.bss分配到起始地址為0x300h的數(shù)據(jù)存儲(chǔ)器中。(8)將自定義的未初始化塊分配到緊跟在.bss的存儲(chǔ)器中,若自定義塊不止1個(gè),則按自定義塊在輸入文件的先后順序存放。1、MEMORY偽指令

MEMORY偽指令的一般語(yǔ)句格式為:

MEMORY{PAGE0:存儲(chǔ)器名1[(屬性)]:origin=常數(shù),length=常數(shù)··········PAGEn:存儲(chǔ)器名n[(屬性)]:origin=常數(shù),length=常數(shù)}(1)PAGE:定義一個(gè)存儲(chǔ)器空間,用戶(hù)可以定義多達(dá)255頁(yè)。通常PAGE0定義程序存儲(chǔ)器,PAGE1定義數(shù)據(jù)存儲(chǔ)器。如果用戶(hù)沒(méi)有使用PAGE選項(xiàng),那么連接器把段定位到PAGE0。每個(gè)PAGE代表一個(gè)完全獨(dú)立的地址空間。在PAGE0上已配置的存儲(chǔ)器可以和在PAGE1上已配置的存儲(chǔ)器重疊。(2)存儲(chǔ)器名:命名存儲(chǔ)器范圍。存儲(chǔ)器名由1~8個(gè)字符組成,有效的字符包括A~Z,a~z,$及_。名字對(duì)于連接器沒(méi)有特殊的意義,僅指明存儲(chǔ)器的區(qū)域。在不同頁(yè)上存儲(chǔ)器范圍可以有相同的名字,而在同一頁(yè),所有的存儲(chǔ)器范圍不能有相同的名字,且不能重疊。(3)屬性:對(duì)于已命名的范圍有1~4個(gè)屬性。屬性是可選項(xiàng),當(dāng)被使用時(shí),必須用括號(hào)括起來(lái)。屬性把輸出段的定位限制在某些存儲(chǔ)器范圍內(nèi)。如果用戶(hù)不使用任何屬性,則輸出段即可以定位到任何范圍內(nèi)。有效的屬性包括:

R:規(guī)定存儲(chǔ)器可以被讀出;

W:規(guī)定存儲(chǔ)器可以被寫(xiě)入;

I:規(guī)定存儲(chǔ)器可以被初始化。(4)origin:指定一個(gè)存儲(chǔ)器區(qū)域的起始地址,也可以寫(xiě)成org或0。這個(gè)值是以字節(jié)規(guī)定的16位常數(shù),也可以是十進(jìn)制、八進(jìn)制或十六進(jìn)制。(5)length:指定一個(gè)存儲(chǔ)器的長(zhǎng)度,也可以寫(xiě)成len或1。數(shù)值的表示方法與origin相同。例:

MEMORY指令舉例/*SampleCommand*/file1.objfile2.Obj-oprog.outMEMORY{PAGE0:ROM:ORIGIN=0h,LENGTH=1000hPAGE1:B2:ORIGIN=60h,LENGTH=20hB0B1:ORIGIN=200h,LENGTH=200h}SECTIONS偽指令的一般語(yǔ)法形式是:

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

特性列表的選項(xiàng)(塊所具備的特性)有以下幾種:(1)裝載地址:規(guī)定塊將被裝載在存儲(chǔ)器中的位置。

語(yǔ)法:load=allocation

allocation

或{}>allocationallocation是MEMORY偽指令所定義的范圍內(nèi)地址,包括ROM、RAM、實(shí)際地址值(16位常數(shù))等。(2)運(yùn)行地址:定義塊在存儲(chǔ)器內(nèi)運(yùn)行的位置。

語(yǔ)法:run=allocation

run>allocation

如果在一個(gè)塊中l(wèi)oad和run的地址相同,run可以省略。(3)調(diào)準(zhǔn)地址:規(guī)定塊應(yīng)在地址邊界上開(kāi)始。調(diào)準(zhǔn)可以使連接器把輸出塊放在位于n字邊界的地址,其中/2是2的冪。

語(yǔ)法:align=n

align=(n)

如.textalign=128,即將.text段定位于頁(yè)邊界。(4)塊地址:規(guī)定塊必須裝在兩個(gè)地址邊界之間,它把塊定位在大小為n的塊內(nèi)任何地方,如果塊大于大小為的n塊,那么塊將從該邊界開(kāi)始。和調(diào)準(zhǔn)一樣,n必須是2的冪。語(yǔ)法:block=n或

block(n)如.bssload=block(0x80)。定位.bss塊使其包含在單個(gè)128字的頁(yè)內(nèi)或者從新頁(yè)開(kāi)始。用戶(hù)可以單獨(dú)使用調(diào)準(zhǔn)或塊,也可以和裝入地址、運(yùn)行地址結(jié)合在一起使用,但是調(diào)準(zhǔn)和塊不能一起使用。(5)輸入塊:定義組成輸出塊的輸入塊。

語(yǔ)法:{input_sections}輸入文件中的塊組合起來(lái)形成輸出塊,連接器按照所列出的輸入塊的次序連接并組合它們。輸出塊的大小是組成它的輸入塊的大小之和。通用類(lèi)型的塊的規(guī)格說(shuō)明中沒(méi)有輸入塊。如SECTIONS{.text:.data:.bss:}此時(shí)鏈接器從輸入文件取出所有.text塊并把它們組合到.text輸出塊內(nèi)。鏈接器按照它在輸入文件中遇到的次序連接.text輸入塊,對(duì).data和.bss塊的操作與.text相同。例:SECTIONS{.text/*創(chuàng)建.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)塊類(lèi)型:定義特殊塊類(lèi)型的標(biāo)志。語(yǔ)法:type=COPY或

type=DSECT或

type=NOLOAD用戶(hù)可以把這3種特殊的類(lèi)型賦予輸出塊。用COPY和DSECT創(chuàng)建的塊是一個(gè)虛塊,它不包括在輸出塊存儲(chǔ)器分配內(nèi),也不占據(jù)存儲(chǔ)器空間,不包括在存儲(chǔ)器映象列表中。但在虛塊中定義的全局符號(hào)可以被其他輸入塊引用,COPY段可以將塊的內(nèi)容、重定位信息及行號(hào)信息放在輸出模塊中,而DSECT塊則不放置。

NOLOAD創(chuàng)建的塊不將塊的內(nèi)容、重定位信息及行號(hào)信息放在輸出模塊中,但鏈接器為其分配空間并包括在存儲(chǔ)器映象列表中。例SETIONS偽指令的使用

/*輸入文件*/-oprog.out/*輸出文件*/

SECTIONS{.text:load=ROMrun=0800h .const:load=ROM .bss:load=ROM Vectors:load=0h { t1.obj(.intvec1) t2.obj(.intvec2) endvec=.;/*將vectors段的最后連接地址賦給endvec符號(hào)*/ } .data:align=16 }(7)填充值:定義用于填充初始化空位的數(shù)值。語(yǔ)法:或

name:…{…}:value當(dāng)初始化輸出塊內(nèi)有空位存在時(shí),鏈接器必須提供原始數(shù)據(jù)以填充它值填充空位,該數(shù)值在存儲(chǔ)器內(nèi)復(fù)制直至它填滿(mǎn)空位為止。

程序存儲(chǔ)器:

地址范圍

內(nèi)容 0000~0FFF片內(nèi)ROM FF00~FFFF片內(nèi)RAM塊B0數(shù)據(jù)存儲(chǔ)器:

地址范圍

內(nèi)容 0000~0005I/O寄存器 0060~007F片內(nèi)RAM塊B20300~03FF片內(nèi)RAM塊B13、鏈接器舉例命令文件exmp.cmd/**定義連接器選項(xiàng)**/-eSETUP/*定義程序入口*/-oexmp.out/*命名輸出文件*/-mexmp.map

/*創(chuàng)建一個(gè)輸出列表文件*//**定義輸入文件**/exmp.obj/*連接三個(gè)目標(biāo)文件*/fft.objtables.obj/**定義存儲(chǔ)器配置**/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

/*將包含在exmp.obj和fft.obj中的.text塊鏈接到

ROM中*/int_vecs:load=0,PAGE=0

/*將來(lái)自table.obj中int_vecs塊的一組中斷矢量連接到ROM中的0地址處*/.data:,load=RAM_B0,PAGE=0/*將tabales.obj和fft.obj中的.data塊鏈接到程序存儲(chǔ)器RAM塊B0中,并在其后創(chuàng)建256字的空位,用7Alh填充*/{tables.obj(.data)fft.obj(.data).=l00h;}fftvars:{}>RAM_B2,page=1

/*創(chuàng)建新塊fftvars,并將來(lái)自fft.obj的.bss

塊鏈入數(shù)據(jù)存儲(chǔ)器RAM塊的B2中*/{

fft.obj(.bss)}.bss:{}>RAM_B1,PAGE=1,FILL=0FFFFh

/*exmp.obj中的.bss塊鏈接到RAM塊B1中。RAM的未用部分被初始化為FFFh*/}/**命令文件結(jié)束**/

然后用下列命令調(diào)用連接器:

dsplnkexmp.cmd

這樣將生成一個(gè)名為exmp.out的輸出文件,可以在TMS320上運(yùn)行。同時(shí)還生成一個(gè)列表文件exmp.map。

6.5程序舉例在程序設(shè)計(jì)時(shí),如果需要在多個(gè)模塊中使用相同的設(shè)置和中斷處理,通常將芯片中映射至I/O空間的寄存器地址及標(biāo)號(hào)、預(yù)置變量和常數(shù)的空間等設(shè)置語(yǔ)句集中在一個(gè)文件中,稱(chēng)為I/O寄存器頭文件(如init.h);將轉(zhuǎn)移中斷矢量地址的指令集中在一個(gè)文件中,稱(chēng)為中斷矢量頭文件(如vector.h);將定義程序、數(shù)據(jù)和I/O空間地址塊大小和位置的偽指令集中在一個(gè)文件中,稱(chēng)為命令文件(如F206.cmd)。這3個(gè)文件稱(chēng)為公用文件。用戶(hù)在編寫(xiě)自己的應(yīng)用程序時(shí),用.copy或.include偽指令將I/O寄存器頭文件和中斷矢量頭文件復(fù)制到該應(yīng)用程序中,形成一個(gè)匯編源程序(如delay.asm),由匯編器進(jìn)行匯編后生成一個(gè)目標(biāo)文件(如delay.obj)。再由連接器把該目標(biāo)文件和命令文件相連接,生成一個(gè)可執(zhí)行文件(如delay.out)。對(duì)于簡(jiǎn)單的單個(gè)應(yīng)用程序也可不使用這兩個(gè)頭文件,直接在應(yīng)用程序中對(duì)用到的I/O寄存器和中斷轉(zhuǎn)移地址進(jìn)行設(shè)置。1、公用文件該文件可為L(zhǎng)F2407芯片定義程序、數(shù)據(jù)和I/O空間地址塊的大小和位置,用于和匯編后的TMS320C2000文件(*.obj)相連接,輸出文件名為.out。對(duì)于其他芯片,應(yīng)對(duì)該文件作相應(yīng)的修改。/*File:LF2407_PM.cmdMEMORY{PAGE0: /*程序存儲(chǔ)空間*/PM:ORIGIN=0h,LENGTH=0044h/*中斷矢量*/PVECS:ORIGIN=0044h,LENGTH=0100h/*外設(shè)中斷矢量*/PROG:ORIGIN=0150h,LENGTH=7EAFh/*以上為32K字片內(nèi)閃速存儲(chǔ)器(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)命令文件LF2407_PM.cmd:PAGE1:/*數(shù)據(jù)存儲(chǔ)空間*/REGS:ORIGIN=0h,LENGTH=60h/*內(nèi)存映射寄存區(qū)和保留地址*/BLK_B2:ORIGIN=60h,LENGTH=20h/*塊B2*/BLK_B0:ORIGIN=200h,LENGTH=100h/*塊B0,如果CNF=0為片內(nèi)DARAM*/BLK_B1:ORIGIN=300h,LENGTH=100h/*片內(nèi)存儲(chǔ)器塊B1*/SARAM_D:ORIGIN=0800h,LENGTH=0800h/*數(shù)據(jù)空間2K字SARAM*/PERIPH:ORIGIN=7000h,LENGTH=1000h/*外設(shè)寄存器空間*/EX1_DM:ORIGIN=8000h,LENGTH=0800h/*數(shù)據(jù)空間2K字SARAM*/PAGE2:/*I/O存儲(chǔ)空間*/IO_EX:ORIGIN=0000h,LENGTH=0FFF0h/*外部I/O映射空間*/IO_EX:ORIGIN=0FFF0h,LENGTH=0Fh/*片內(nèi)的I/O映射空間*/}SECTIONS{.vectors:{}>PMPAGE0.pvecs:{}>PVECSPAGE0.text:{}>PROGPAGE0.bss:{}>BLK_B2PAGE1.data:{}>BLlBlPAGEl}(2)240x寄存器頭文件240xA.h:;Fllename:240xA.h;240xCPU核寄存器IMR .set0004h ;中斷屏蔽寄存器IFR .set0006h ;中斷標(biāo)志寄存器;系統(tǒng)配置和中斷寄存器SCSR1 .set7018h ;系統(tǒng)控制和狀態(tài)寄存器lSCSR2 .set7019h ;系統(tǒng)控制和狀態(tài)寄存器2DINR .set701Ch ;器件版本號(hào)寄存器PIVR .set701Eh ;外部中斷矢量寄存器PIRQR0 .set7010h ;外部中斷請(qǐng)求寄存器0PIRQR1 .set7011h ;外部中斷請(qǐng)求寄存器1PIRQR2 .set7012h ;外部中斷請(qǐng)求寄存器2該文件包含了240x芯片所有外部寄存器的地址、標(biāo)號(hào)、預(yù)置變量和常數(shù),在片內(nèi),所有外部寄存器都被映射到數(shù)據(jù)空間。該文件還定義了看門(mén)狗宏指令??捎?copy或.include偽指令將240xA.h復(fù)制到應(yīng)用程序中。PIACKR0 .set7014h;外部中斷響應(yīng)寄存器0PIACKR1 .set7015h;外部中斷響應(yīng)寄存器1PIACKR2 .set7016h;外部中斷響應(yīng)寄存器2;外部中斷配置寄存器XINT1CR .set7070h;外部中斷1控制寄存器XINT2CR .set7071h;外部中斷2控制寄存器;數(shù)據(jù)I/O寄存器MCRA .set7090h;I/O復(fù)用控制寄存器AMCRB .set7092h;I/O復(fù)用控制寄存器BMCRC .set7094h;I/O復(fù)用控制寄存器CPADATDIR .set7098h;I/O口A數(shù)據(jù)和方向寄存器PBDATDIR .set709Ah;I/O口B數(shù)據(jù)和方向寄存器PCDATDIR .set709Ch;I/O口C數(shù)據(jù)和方向寄存器PDDATDIR .set709Eh;I/O口D數(shù)據(jù)和方向寄存器PEDATDIR .set7095h;I/O口E數(shù)據(jù)和方向寄存器PFDATDIR .set7096h;I/O口F數(shù)據(jù)和方向寄存器;看門(mén)狗(WD)寄存器WDCNTR .set7023h;WD計(jì)數(shù)器寄存器WDKEY .set7025h;WD復(fù)位關(guān)鍵字寄存器WDCR .set7029h;WD定時(shí)器控制寄存器:模數(shù)轉(zhuǎn)換(ADC)寄存器ADCCTRL1 .set70A0h;ADC控制寄存器1ADCCTRL2 .set70A1h;ADC控制寄存器2MAXCONV .set70A2h;最大轉(zhuǎn)換通道個(gè)數(shù)寄存器CHSELSEQ1 .set70A3h;通道選擇排序控制寄存器1CHSELSEQ2 .set70A4h;通道選擇排序控制寄存器2CHSELSEQ3 .set70A5h;通道選擇排序控制寄存器3CHSELSEQ4 .set70A6h;通道選擇排序控制寄存器4AUTOSEQ-SR.set70A7h;自動(dòng)排序狀態(tài)寄存器RESULT0 .set70A8h;A/D轉(zhuǎn)換結(jié)果寄存器0RESULT1 .set70A9h;A/D轉(zhuǎn)換結(jié)果寄存器1RESULT2 .set70AAh;A/D轉(zhuǎn)換結(jié)果寄存器2RESULT3 .set70ABh;A/D轉(zhuǎn)換結(jié)果寄存器3RESULT4 .set70ACh;A/D轉(zhuǎn)換結(jié)果寄存器4RESULT5 .set70ADh;A/D轉(zhuǎn)換結(jié)果寄存器5RESULT6 .set70AEh;A/D轉(zhuǎn)換結(jié)果寄存器6RESULT7 .set70AFh;A/D轉(zhuǎn)換結(jié)果寄存器7RESULT8 .set70B0h;A/D轉(zhuǎn)換結(jié)果寄存器8RESULT9 .set70B1h;A/D轉(zhuǎn)換結(jié)果寄存器9RESULTl0 .set70B2h;A/D轉(zhuǎn)換結(jié)果寄存器10RESULT11 .set70B3h;A/D轉(zhuǎn)換結(jié)果寄存器11RESULT12 .set70B4h;A/D轉(zhuǎn)換結(jié)果寄存器12RESULT13 .set70B5h;A/D轉(zhuǎn)換結(jié)果寄存器13RESULT14 .set70B6h;A/D轉(zhuǎn)換結(jié)果寄存器14RESULT15 .set70B7h;A/D轉(zhuǎn)換結(jié)果寄存器15CALIBRATION .set70B8h;校準(zhǔn)結(jié)果寄存器:串行外設(shè)接口(SPI)寄存器SPICCR .set7040h;配置控制寄存器SPICTL .set7041h;操作控制寄存器SPISTS .set7042h;狀態(tài)寄存器SPIBRR .set7044h;波特率控制寄存器SPIEMU .set7046h;仿真緩沖寄存器SPIRXBUF .set7047h;串行接收緩沖寄存器SPITXBUF .set7048h;串行發(fā)送緩沖寄存器SPIDAT .set7049h;串行數(shù)據(jù)寄存器SPIPRI .set704Fh;中斷優(yōu)先級(jí)控制寄存器;串行通信接口SCICCR .set7050h;SCI通信控制寄存器SCICTL1 .set7050h;SCI控制寄存器1SCIHBAUD .set7050h;SCI波特率高位字節(jié)寄存器SCILBAUD .set7050h;SCI波特率低位字節(jié)寄存器SCICTL2 .set7050h;SCI控制寄存器2SCIRXST .set7050h;SCI接收狀態(tài)寄存器SCIRXEMU .set7050h;SCI接收數(shù)據(jù)緩沖寄存器SCIRXBUF .set7050h;SCI仿真數(shù)據(jù)緩沖寄存器SCITXBUF .set7050h;SCI發(fā)送數(shù)據(jù)緩沖寄存器SCIPRI .set7050h;SCl中斷優(yōu)先級(jí)控制寄存器;事件管理器A(EVA)寄存器GPTCONA .set7400h;全局通用定時(shí)器控制寄存器AT1CNT .set7401h;通用定時(shí)器1計(jì)數(shù)寄存器T1CMPR .set7402h;通用定時(shí)器1比較寄存器T1PR .set7403h;通用定時(shí)器1周期寄存器T1CON .set7404h;通用定時(shí)器1控制寄存器T2CNT .set7405h;通用定時(shí)器2計(jì)數(shù)寄存器T2CMPR .set7406h;通用定時(shí)器2比較寄存器T2PR .set7407h;通用定時(shí)器2周期寄存器T2CON .set7408h;通用定時(shí)器2控制寄存器COMCONA .set7411h;比較控制寄存器AACTRA .set7413h;全比較操作控制寄存器ADBTCONA .set7415h;死區(qū)時(shí)間控制寄存器ACMPR1 .set7417h;全比較單元1比較寄存器CMPR2 .set7418h;全比較單元2比較寄存器CMPR3 .set7419h;全比較單元3比較寄存器CAPCONA .set7420h;捕獲控制寄存器ACAPFIFOA .set7422h;捕獲FIFO狀態(tài)寄存器ACAP1FIFO .set7423h;捕獲1FIFO棧項(xiàng)寄存器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中斷標(biāo)志寄存器AEVAIFRB.set7430h;EVA中斷標(biāo)志寄存器BEVAIFRC.set7431h;EVA中斷標(biāo)志寄存器C;事件管理器B(EVB)GPTCONB .set7500h;全局通用定時(shí)器控制寄存器BT3CNT .set7501h;通用定時(shí)器3計(jì)數(shù)寄存器T3CMPR .set7502h;通用定時(shí)器3比較寄存器T3PR .set7503h;通用定時(shí)器3周期寄存器T3CON .set7504h;通用定時(shí)器3控制寄存器T4CNT .set7505h;通用定時(shí)器4計(jì)數(shù)寄存器T4CMPR .set7506h;通用定時(shí)器4比較寄存器T4PR .set7507h;通用定時(shí)器4周期寄存器T4CON .set7508h;通用定時(shí)器4控制寄存器COMCONB .set7511h;比較控制寄存器BACTRB .set7513h;全比較操作控制寄存器BDBTCONB .set7515h;死區(qū)時(shí)間控制寄存器BCMPR4 .set7517h;全比較單元比較寄存器4CMPR5 .set7518h;全比較單元比較寄存器5CMPR6 .set7519h;全比較單元比較寄存器6CAPCONB .set7520h;捕獲控制寄存器BCAPFIFOB .set7522h;捕獲FIFO狀態(tài)寄存器BCAP4FIFO .set7523h;捕獲4FIFO棧項(xiàng)寄存器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中斷標(biāo)志寄存器AEVBIFRB.set7530h;EVB中斷標(biāo)志寄存器BEVBIFRC.set7531h;EVB中斷標(biāo)志寄存器C;CAN寄存器CANMDER.set7100h;CAN郵箱方向/使能寄存器CANTCR .set7101h;CAN發(fā)送控制寄存器CANRCR .set7102h;CAN接收控制寄存器CANMCR .set7103h;CAN主控制寄存器CANBCR2 .set7104h;CAN位配置寄存器2CANBCR1 .set7105h;CAN位配置寄存器1CANESR .set7106h;CAN錯(cuò)誤狀態(tài)寄存器CANGSR .set7107h;CAN全局狀態(tài)寄存器CANCEC .set7108h;CAN傳送和接收錯(cuò)誤計(jì)數(shù)器CANIFR .set7109h;CAN中斷標(biāo)志寄存器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消息標(biāo)識(shí)符(低16位字)CANMSGIDOH.set7201h;CAN郵箱0消息標(biāo)識(shí)符(高16位字)CANMSGCTRl0.set7202h;CAN郵箱0消息控制域寄存器CANMBX0A .set7204h;CAN郵箱0中郵箱RAM的2個(gè)字節(jié)CANMBX0B .set7205h;CAN郵箱0中郵箱RAM的2個(gè)字節(jié)CANMBX0C .set7206h;CAN郵箱0中郵箱RAM的2個(gè)字節(jié)CANMBX0D .set7207h;CAN郵箱0中郵箱RAM的2個(gè)字節(jié)CANMSGID1L .set7208h;CAN郵箱1消息標(biāo)識(shí)符(低16位字)CANMSGID1H .set7209h;CAN郵箱1消息標(biāo)識(shí)符(高16位字)CANMSGCTRL1 .set720Ah;CAN郵箱1消息控制域寄存器CANMBX1A .set720Ch;CAN郵箱1中郵箱RAM的2個(gè)字節(jié)CANMBX1B .set720Dh;CAN郵箱1中郵箱趾M的2個(gè)字節(jié)CANMBX1C .set720Eh;CAN郵箱1中郵箱RAM的2個(gè)字節(jié)CANMBX1D .set720Fh;CAN郵箱1中郵箱RAM的2個(gè)字節(jié)CANMSGID2L .set7210h;CAN郵箱2消息標(biāo)識(shí)符(低16位字)CANMSGID2H .set7211h;CAN郵箱2消息標(biāo)識(shí)符(高16位字)CANMSGCTRL2 .set7212h;CAN郵箱2消息控制域寄存器CANMBX2A .set7214h;CAN郵箱2中郵箱RAM的2個(gè)字節(jié)CANMBX2B .set7215h;CAN郵箱2中郵箱RAM的2個(gè)字節(jié)CANMBX2C .set7216h;CAN郵箱2中郵箱RAM的2個(gè)字節(jié)CANMBX2D .set7217h;CAN郵箱2中郵箱RAM的2個(gè)字節(jié)CANMSGID3L .set7218h;CAN郵箱3消息標(biāo)識(shí)符(低16位字)CANMSGID3H .set7219h;CAN郵箱3消息標(biāo)識(shí)符(高16位字)CANMSGCTRL3 .set721Ah;CAN郵箱3消息控制域寄存器CANMBX3A .set721Ch;CAN郵箱3中郵箱RAM的2個(gè)字節(jié)CANMBX3B .set721Dh;CAN郵箱3中郵箱RAM的2個(gè)字節(jié)CANMBX3C .set721Eh;CAN郵箱3中郵箱RAM的2個(gè)字節(jié)CANMBX3D .set721Fh;CAN郵箱3中郵箱RAM的2個(gè)字節(jié)CANMSGID4L .set7220h;CAN郵箱4消息標(biāo)識(shí)符(低16位字)CANMSGID4H .set7221h;CAN郵箱4消息標(biāo)識(shí)符(高16位字)CANMSGCTRL4 .set7222h;CAN郵箱4消息控制域寄存器CANMBX4A .set7224h;CAN郵箱4中郵箱RAM的2個(gè)字節(jié)CANMBX4B .set7225h;CAN郵箱4中郵箱RAM的2個(gè)字節(jié)CANMBX4(2 .set7226h;CAN郵箱4中郵箱RAM的2個(gè)字節(jié)CANMBX4D .set7227h;CAN郵箱4中郵箱RAM的2個(gè)字節(jié)CANMSGID5L .set7228h;CAN郵箱5消息標(biāo)識(shí)符(低16位字)CANMSGID5H .set7229h;CAN郵箱5消息標(biāo)識(shí)符<高16位字)CANMSGCTRL5 .set722Ah;CAN郵箱5消息控制域寄存器CANMBX5A .set722Ch;CAN郵箱5中郵箱RAM的2個(gè)字節(jié)CANMBX5B .set722Dh;CAN郵箱5中郵箱RAM的2個(gè)字節(jié)CANMBX5C .set722Eh;CAN郵箱5中郵

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論