



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、基于C語言設置TMS320 DSP中斷向量表 (一)摘要: 隨著DSP芯片應用的不斷深入,用C語言開發(fā)DSP芯片,不僅可以使DSP芯片的開發(fā)速度大大提高,也使得程序的修改和移植變得十分方便。C語言設置TMS320系列DSP中斷向量表是高級語言開發(fā)DSP的一個具體應用。關鍵詞: C語言,中斷,中斷向量表,DSP。Setting TMS320 DSP Interrupt Vectors Table in CAbstract Along with the development of DSP chip, the exploiture of DSP in C not論文 only accelerate
2、 the evolution of DSP ,but also make the program easy to modify and transplant. This is a practice application that setting TMS320 DSP interrupt vectors table in C.Key Words C language, Interrupts, Interrupt vector table, DSP.1、 引言DSP(數(shù)字信號處理器)自二十世紀70年代末80年代初誕生以來,得到了突飛猛進的發(fā)展,在信號處理、通訊、雷達等方面應用越來越廣泛,而且開發(fā)
3、手段和開發(fā)設備也越來越多樣化。其中C語言在DSP開發(fā)應用中起著越來越重要的作用,以C語言編寫的DSP應用程序具有可讀性、可移植性,易于維護和修改。另外在DSP應用系統(tǒng)中,中斷是完成數(shù)據(jù)傳遞、實時處理等的重要手段,因而用C語言完成對DSP中斷設置是DSP開發(fā)的重要內(nèi)容。 DSP中斷的設置主要包括中斷服務程序的編寫,中斷向量表的設置,中斷寄存器的初始化等內(nèi)容。本文以TI公司TMS320系列DSP為例,說明用C語言設置中斷向量表的方法。并給出實例進行說明。2、 中斷向量表的定位中斷服務程序的地址(中斷向量)要裝載到存儲器的合適區(qū)域。一般這些向量都定位在0x0開始的程序存儲器中。但有些處理器要求或者可
4、以在其他的存儲區(qū)域安裝中斷向量。對于微處理器模式下的TMS320C25、TMS320C26、TMS320C28、TMS320C30、TMS320C31,中斷向量定位于0x0開始的地址。對于微計算機/程序引導模式下的TMS320C31的中斷向量定位于0x809fc1,TMS320C26的中斷向量定位于0xffa0。TMS320C5X復位向量定位在0x0,其他中斷向量可以定位于任何2K字的程序存儲器中,中斷向量表的定位是與PMST寄存器的IPTR位有關,有效的中斷向量表的基地址是0x0,0x800,0x1000,0x1800,0x2000,0xf800。TMS320C4X的復位向量定位在四個地址之
5、一,這四個地址由外部引腳RESETLOC0和RESETLOC1決定。TMS320C4X的中斷向量可存在于任何512字范圍的存儲器中,中斷向量表的地址由中斷向量表指針(IVTP)寄存器決定。另外,TMS320C4X的自陷(trap)中斷向量可存放在512字范圍的存儲器中,自陷向量表的地址由自陷向量表指針(TVTP)寄存器決定。有效的中斷或者自陷向量表的基地址是0x0,0x200,0x400,0x800,0xa00,0xc00,0xe00,0x1000,0x12000xfffffe00,如表1所示。有兩種方法可以初始化中斷向量表,下面講解這兩種方法:方法一:利用已命名的ASM段生成向量表的最直接方
6、法就是用匯編指令.sect來生成一個表。這個表包含中斷向量的地址和跳轉指令。表1處理器 向量表基地址 說明TMS320C2X 0x0 不包括微計算機/程序引導模式下的TMS320C26TMS320C26 0xffa0 微計算機/程序引導模式TMS320C30 0x0 TMS320C31 0x0 微處理器模式TMS320C31 0x809fc1 微計算機/程序引導模式TMS320C4X 復位 0x0,0x7fffffff,0x80000000,0xfffffff 外部引腳RESETLOC0和RESETLOC1決定 中斷向量 任意512字范圍 IVTP寄存器決定 自陷向量 任意512字范圍 TVT
7、P寄存器決定TMS320C5X 復位 0x0 中斷向量 任意2K字數(shù)據(jù)頁 PMST寄存器的IPTR位決定在微計算機/程序引導模式下TMS320C2X、TMS320C5X和TMS320C31 從中斷向量的位置處執(zhí)行代碼,因而要用跳轉指令來代替中斷向量,如TMS320C31用24位指令BR來實現(xiàn):INT1: BR _c_int01在微處理器模式下TMS320C30、TMS320C31和TMS320C4X,中斷向量是下一條存取指令的地址,因而中斷服務程序的地址用匯編指令.word存儲在中斷向量處。例如,TMS320C4X中斷1 可用匯編語言定義如下:INT1: .word _c_int01 因為中斷
8、服務的標識符在匯編語言模塊外部被聲明,所以標識符必須用.ref或.global來聲明。下面的例子是一個匯編語言模塊(vecs.asm)定義了一個包含TMS320C5X跳轉指令的段。.ref _c_int0, _c_int1 ;在外部定義中斷向量.sect “vectors” ;聲明一個一命名的段RS: b _c_int0 ;轉至復位向量 I1: b _c_int1 ;轉至中斷向量1 處理保留和未使用的區(qū)域有時中斷向量表中包含保留的地址,例如微計算機/程序引導模式下的TMS320C26或者TMS320C4X和TMS320C5X的復位和中斷向量不連續(xù)的情形。TMS320C31也會發(fā)生這種情形,系統(tǒng)
9、中并不是所有的中斷都能被用到。為了處理向量映象中的保留地址,就要使用匯編指令.space。注意對于定點設備.space保留的是位,對于浮點設備.space保留的字。例如,微計算機/程序引導模式下TMS320C26,假設所有中斷都是可用的.sect “vectors” ;為復位和中斷向量定義已命名的段.space 2*16 ;保留的空間b _c_int1 ;INT0b _c_int2 ;INT1b _c_int3 ;INT2b _c_int4 ;TINTb _c_int5 ;RINT b _c_int6 ;XINTb _c_int7 ;TRAP注意.space指令為復位向量保留的位置在程序引導方
10、式下不能使用,因為復位會啟動程序引導功能。使用.space時vectors段鏈接到0xfa00,不使用.space指令該段鏈接到0xfa02。但是,如果定時器和自陷中斷向量被使用時,可用.space指令對向量表進行如下的定義:.sect “vectors” ;為復位和中斷向量定義已命名的段.space 2*4*16 ;保留的和3個未使用的向量b _c_int4 ;TINT.space 2*2*16 ;2個未使用的向量b _c_int7 ;TRAP注意在中斷和自陷向量表中未使用的部分可用來存儲數(shù)據(jù)。但為了保證中斷處理的正確,一定要確保中斷和自陷向量不被破壞。 鏈接到存儲器映象已命名段產(chǎn)生后,TM
11、S320鏈接器就會把向量表鏈接到存儲器的合適位置,共分三步進行:1. 鏈接匯編語言模塊;2. 根據(jù)中斷向量表的定位定義鏈接器的MEMORY段;3. 在鏈接器的SECTIONS命令中,定位這些已命名的段。下面是TMS320C5X的命令文件,將vectors定位到040h。-cvecs.objmain.obj-l rts50.libMENORYPAGE0:VECTORS:origin = 0000h, length = 003fh ROM :origin = 0040h, length = 007cfhSECTIONS“vectors” : VECTORS.text : ROM.方法二:安裝一個運
12、行時的向量這種方法在開發(fā)和調(diào)試時很有用的,這種方法是用C語句在裝載中斷服務程序地址時建立一個運行時的向量。該方法適用于微處理器模式下的TMS320C30和TMS320C31,以及TMS320C4X,因為它們只用地址,而不用跳轉指令作為中斷向量。其重點就是將中斷服務程序的地址放到合適的存儲器空間,例如,TMS320C30地址0x1對應于外部中斷0(INT0),在該地址安裝中斷服務程序c_int01。使用如下語句“*(void (*) () )0x1) = c_int01;這里,0x1被轉換成指向函數(shù)的指針,因為它包含函數(shù)c_int01的地址。 3、 向量表指針TMS320C4X和TMS320C5
13、X都可以不將中斷向量表放在0x0開始的位置。這兩個系列的DSP都是由寄存器來確定中斷向量的位置。TMS320C4X的復位向量地址是由處理器的引腳確定的四個地址中的一個。中斷能夠被正確的處理,首先必須在接收到中斷之前對中斷向量表進行初始化。下面幾個例子是用來說明初始化與中斷有關的寄存器的方法。例1:在C中嵌入?yún)R編語句這個例子,利用在C語言中嵌入?yún)R編語句來設置TMS320C4X的中斷向量,其起始地址為0x0,方法是通過將IVTP寄存器的值設置為0x0。asm(“ PUSH R0”);asm(“ LDI 0h, R0”);asm(“ LDPE R0, IVTP”);asm(“ POP R0”);例2
14、:利用TMS320C4X的PRTS這個例子,利用TMS320C4X的并行運行支持庫來設置中斷向量表,起始地址為0x02ff800,利用PRTS庫函數(shù)set_ivtp()設置IVTP寄存器的值使向量表定位于RAM0存儲器的開始地址。當使用PRTS時,不需要用戶命名中斷向量段,而是在運行時使用PRTS函數(shù)install_int_vector()將向量定位在預先定義的段.vector中。這種方法要求向量在運行時安裝,以防止程序和數(shù)據(jù)被修改。另外,首先要把PRTS庫鏈接到程序,并在命令文件中預先定義.vector段,把.vector段定位在ROM0存儲器的開始地址。命令文件如下所示:-l prts40
15、.libMEMORYRAM0:org = 0x2ff800 , len = 0x400SECTIONS “.vector”: RAM0主程序中必須包含頭文件intpt40.h。函數(shù)set_ivtp()使用預定義的參量DEFAULT才能被調(diào)要,這樣設置IVTP寄存器可使.vector段按命令文件中定義定位。中斷向量可使用函數(shù)install_int_vector()來安裝,如下所示:#include void c_int99(void) for( ; ; ); void main(void) set_ivtp(DEFAULT);install_int_vector(void *) c_int99,
16、2);例3:鏈接時指定TMS320C4X或TMS320C5X的符號當TMS320C5X的編輯器中沒有PRTS庫而不能設置向量表指針時,還有一個方便的方法可以達到同樣的目的。那就是使用在鏈接時指定符號的方法。這種方法的主要思想是利用包含復位和中斷向量的匯編語言段(.sect)以及用鏈接器映射中斷向量在內(nèi)存中的分布。C程序可以獲得這個地址并把它裝載到中斷向量表指針(TMS320C4X的IVTP寄存器或者TMS320C5X的PMST寄存器)。本例為TMS320C5X芯片,中斷向量定位于匯編語言模塊中,標號IVECS指向中斷向量表的基地址,下面說明如何獲取中斷向量地址。 .def IVECS .ref
17、 _c_int0, _c_int1, _c_int2.sect “reset”b _c_int0.sect “vectors”IVECS .space 2b _c_int1b _c_int2在鏈接器中,用鏈接器指定的標號初始化鏈接器定義的變量。如下所示:cvecs.obj lrts50.lib_vecTable = IVECS MEMORYPAGE 0: VECTORS: origin = 00000h, length = 0003fhROM: origin = 00040h, length = 007CFhP_RAM: origin = 00800h, length = 023FFh. . .SECTIONS”reset” VECTORS”vectors” P_RAM.text: ROM.cinit: ROM.bss: RAMB0_D.stack: INT_RAM在C程序中,將vecTable聲明為外部的無符號指針:extern unsigned int *vecTable;將它裝載到PMST寄存器中。unsigned
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 示范學校德育工作匯報
- 補光干預對紅豆杉生長周期的影響機制研究
- 外出授課試講管理辦法
- 辦公修舊利廢管理辦法
- 500KV輸電線路鐵塔斜柱斜面施工詳解
- 崗山窯文化遺產(chǎn)活化促進地方農(nóng)業(yè)產(chǎn)業(yè)發(fā)展模式探索
- 民警十二分制管理辦法
- 樓宇智能化PLC控制系統(tǒng)的設計與實現(xiàn)
- 生物多樣性保護與恢復機制-洞察及研究
- 地方國資集團投資能力提升路徑研究
- GB/T 5163-2006燒結金屬材料(不包括硬質(zhì)合金)可滲性燒結金屬材料密度、含油率和開孔率的測定
- GB/T 17989.2-2020控制圖第2部分:常規(guī)控制圖
- 建設項目安全設施‘三同時’課件
- 2022語文課程標準:“語言文字積累與梳理”任務群解讀及實操
- DB15T 489-2019 石油化學工業(yè)建設工程技術資料管理規(guī)范
- 內(nèi)蒙古自治區(qū)通遼市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細及行政區(qū)劃代碼
- 螺旋溜槽安裝標準工藝
- 2022年人教版六年級下冊語文期末考試卷
- 《土地開發(fā)整理項目預算編制暫行辦法》
- 安徽省評議公告的中小學教輔材料零售價格表
- 德龍自卸車合格證掃描件(原圖)
評論
0/150
提交評論