版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
基于C語言設(shè)置TMS320DSP中斷向量表
摘要:隨著DSP芯片應(yīng)用的不斷深入,用C語言開發(fā)DSP芯片,不僅可以使DSP芯片的開發(fā)速度大大提高,也使得程序的修改和移植變得十分方便。C語言設(shè)置TMS320系列DSP中斷向量表是高級(jí)語言開發(fā)DSP的一個(gè)具體應(yīng)用。關(guān)鍵詞:C語言,中斷,中斷向量表,DSP。SettingTMS320DSPInterruptVectorsTableinCAbstractAlongwiththedevelopmentofDSPchip,theexploitureofDSPinCnotonlyacceleratetheevolutionofDSP,butalsomaketheprogrameasytomodifyandtransplant.ThisisapracticeapplicationthatsettingTMS320DSPinterruptvectorstableinC.KeyWordsClanguage,Interrupts,Interruptvectortable,DSP.1、
引言DSP(數(shù)字信號(hào)處理器)自二十世紀(jì)70年代末80年代初誕生以來,得到了突飛猛進(jìn)的發(fā)展,在信號(hào)處理、通訊、雷達(dá)等方面應(yīng)用越來越廣泛,而且開發(fā)手段和開發(fā)設(shè)備也越來越多樣化。其中C語言在DSP開發(fā)應(yīng)用中起著越來越重要的作用,以C語言編寫的DSP應(yīng)用程序具有可讀性、可移植性,易于維護(hù)和修改。另外在DSP應(yīng)用系統(tǒng)中,中斷是完成數(shù)據(jù)傳遞、實(shí)時(shí)處理等的重要手段,因而用C語言完成對(duì)DSP中斷設(shè)置是DSP開發(fā)的重要內(nèi)容。
DSP中斷的設(shè)置主要包括中斷服務(wù)程序的編寫,中斷向量表的設(shè)置,中斷寄存器的初始化等內(nèi)容。本文以TI公司TMS320系列DSP為例,說明用C語言設(shè)置中斷向量表的方法。并給出實(shí)例進(jìn)行說明。2、
中斷向量表的定位中斷服務(wù)程序的地址(中斷向量)要裝載到存儲(chǔ)器的合適區(qū)域。一般這些向量都定位在0x0開始的程序存儲(chǔ)器中。但有些處理器要求或者可以在其他的存儲(chǔ)區(qū)域安裝中斷向量。對(duì)于微處理器模式下的TMS320C25、TMS320C26、TMS320C28、TMS320C30、TMS320C31,中斷向量定位于0x0開始的地址。對(duì)于微計(jì)算機(jī)/程序引導(dǎo)模式下的TMS320C31的中斷向量定位于0x809fc1,TMS320C26的中斷向量定位于0xffa0。TMS320C5X復(fù)位向量定位在0x0,其他中斷向量可以定位于任何2K字的程序存儲(chǔ)器中,中斷向量表的定位是與PMST寄存器的IPTR位有關(guān),有效的中斷向量表的基地址是0x0,0x800,0x1000,0x1800,0x2000,…0xf800。TMS320C4X的復(fù)位向量定位在四個(gè)地址之一,這四個(gè)地址由外部引腳RESETLOC0和RESETLOC1決定。TMS320C4X的中斷向量可存在于任何512字范圍的存儲(chǔ)器中,中斷向量表的地址由中斷向量表指針(IVTP)寄存器決定。另外,TMS320C4X的自陷(trap)中斷向量可存放在512字范圍的存儲(chǔ)器中,自陷向量表的地址由自陷向量表指針(TVTP)寄存器決定。有效的中斷或者自陷向量表的基地址是0x0,0x200,0x400,0x800,0xa00,0xc00,0xe00,0x1000,0x1200…0xfffffe00,如表1所示。有兩種方法可以初始化中斷向量表,下面講解這兩種方法:方法一:利用已命名的ASM段生成向量表的最直接方法就是用匯編指令.sect來生成一個(gè)表。這個(gè)表包含中斷向量的地址和跳轉(zhuǎn)指令。表1處理器
向量表基地址
說明TMS320C2X
0x0
不包括微計(jì)算機(jī)/程序引導(dǎo)模式下的TMS320C26TMS320C26
0xffa0
微計(jì)算機(jī)/程序引導(dǎo)模式TMS320C30
0x0
TMS320C31
0x0
微處理器模式TMS320C31
0x809fc1
微計(jì)算機(jī)/程序引導(dǎo)模式TMS320C4X
復(fù)位
0x0,0x7fffffff,0x80000000,0xfffffff
外部引腳RESETLOC0和RESETLOC1決定
中斷向量
任意512字范圍
IVTP寄存器決定
自陷向量
任意512字范圍
TVTP寄存器決定TMS320C5X
復(fù)位
0x0
中斷向量
任意2K字?jǐn)?shù)據(jù)頁
PMST寄存器的IPTR位決定在微計(jì)算機(jī)/程序引導(dǎo)模式下TMS320C2X、TMS320C5X和TMS320C31從中斷向量的位置處執(zhí)行代碼,因而要用跳轉(zhuǎn)指令來代替中斷向量,如TMS320C31用24位指令BR來實(shí)現(xiàn):INT1:BR_c_int01在微處理器模式下TMS320C30、TMS320C31和TMS320C4X,中斷向量是下一條存取指令的地址,因而中斷服務(wù)程序的地址用匯編指令.word存儲(chǔ)在中斷向量處。例如,TMS320C4X中斷1可用匯編語言定義如下:INT1:.word_c_int01
因?yàn)橹袛喾?wù)的標(biāo)識(shí)符在匯編語言模塊外部被聲明,所以標(biāo)識(shí)符必須用.ref或.global來聲明。下面的例子是一個(gè)匯編語言模塊(vecs.asm)定義了一個(gè)包含TMS320C5X跳轉(zhuǎn)指令的段。.ref
_c_int0,_c_int1
;在外部定義中斷向量.sect“vectors”
;聲明一個(gè)一命名的段RS:b_c_int0;轉(zhuǎn)至復(fù)位向量
I1:b_c_int1;轉(zhuǎn)至中斷向量1
處理保留和未使用的區(qū)域有時(shí)中斷向量表中包含保留的地址,例如微計(jì)算機(jī)/程序引導(dǎo)模式下的TMS320C26或者TMS320C4X和TMS320C5X的復(fù)位和中斷向量不連續(xù)的情形。TMS320C31也會(huì)發(fā)生這種情形,系統(tǒng)中并不是所有的中斷都能被用到。為了處理向量映象中的保留地址,就要使用匯編指令.space。注意對(duì)于定點(diǎn)設(shè)備.space保留的是位,對(duì)于浮點(diǎn)設(shè)備.space保留的字。例如,微計(jì)算機(jī)/程序引導(dǎo)模式下TMS320C26,假設(shè)所有中斷都是可用的.sect“vectors”;為復(fù)位和中斷向量定義已命名的段.space2*16;保留的空間b
_c_int1
;INT0b
_c_int2
;INT1b
_c_int3
;INT2b
_c_int4
;TINTb
_c_int5
;RINTb
_c_int6
;XINTb
_c_int7
;TRAP注意.space指令為復(fù)位向量保留的位置在程序引導(dǎo)方式下不能使用,因?yàn)閺?fù)位會(huì)啟動(dòng)程序引導(dǎo)功能。使用.space時(shí)vectors段鏈接到0xfa00,不使用.space指令該段鏈接到0xfa02。但是,如果定時(shí)器和自陷中斷向量被使用時(shí),可用.space指令對(duì)向量表進(jìn)行如下的定義:.sect“vectors”
;為復(fù)位和中斷向量定義已命名的段.space2*4*16
;保留的和3個(gè)未使用的向量b
_c_int4;TINT.space2*2*16
;2個(gè)未使用的向量b
_c_int7;TRAP注意在中斷和自陷向量表中未使用的部分可用來存儲(chǔ)數(shù)據(jù)。但為了保證中斷處理的正確,一定要確保中斷和自陷向量不被破壞。
鏈接到存儲(chǔ)器映象已命名段產(chǎn)生后,TMS320鏈接器就會(huì)把向量表鏈接到存儲(chǔ)器的合適位置,共分三步進(jìn)行:1.
鏈接匯編語言模塊;2.
根據(jù)中斷向量表的定位定義鏈接器的MEMORY段;3.
在鏈接器的SECTIONS命令中,定位這些已命名的段。下面是TMS320C5X的命令文件,將vectors定位到040h。-cvecs.objmain.obj-lrts50.libMENORY{PAGE0:VECTORS:origin=0000h,length=003fhROM:origin=0040h,length=007cfh}SECTIONS{“vectors”:{}>VECTORS.text
:{}>ROM.}方法二:安裝一個(gè)運(yùn)行時(shí)的向量這種方法在開發(fā)和調(diào)試時(shí)很有用的,這種方法是用C語句在裝載中斷服務(wù)程序地址時(shí)建立一個(gè)運(yùn)行時(shí)的向量。該方法適用于微處理器模式下的TMS320C30和TMS320C31,以及TMS320C4X,因?yàn)樗鼈冎挥玫刂罚挥锰D(zhuǎn)指令作為中斷向量。其重點(diǎn)就是將中斷服務(wù)程序的地址放到合適的存儲(chǔ)器空間,例如,TMS320C30地址0x1對(duì)應(yīng)于外部中斷0(INT0),在該地址安裝中斷服務(wù)程序c_int01。使用如下語句“*((void(**)())0x1)=c_int01;這里,0x1被轉(zhuǎn)換成指向函數(shù)的指針,因?yàn)樗瘮?shù)c_int01的地址。3、
向量表指針TMS320C4X和TMS320C5X都可以不將中斷向量表放在0x0開始的位置。這兩個(gè)系列的DSP都是由寄存器來確定中斷向量的位置。TMS320C4X的復(fù)位向量地址是由處理器的引腳確定的四個(gè)地址中的一個(gè)。中斷能夠被正確的處理,首先必須在接收到中斷之前對(duì)中斷向量表進(jìn)行初始化。下面幾個(gè)例子是用來說明初始化與中斷有關(guān)的寄存器的方法。例1:在C中嵌入?yún)R編語句這個(gè)例子,利用在C語言中嵌入?yún)R編語句來設(shè)置TMS320C4X的中斷向量,其起始地址為0x0,方法是通過將IVTP寄存器的值設(shè)置為0x0。asm(“
PUSH
R0”);asm(“
LDI
0h,R0”);asm(“
LDPER0,IVTP”);asm(“
POP
R0”);例2:利用TMS320C4X的PRTS這個(gè)例子,利用TMS320C4X的并行運(yùn)行支持庫來設(shè)置中斷向量表,起始地址為0x02ff800,利用PRTS庫函數(shù)set_ivtp()設(shè)置IVTP寄存器的值使向量表定位于RAM0存儲(chǔ)器的開始地址。當(dāng)使用PRTS時(shí),不需要用戶命名中斷向量段,而是在運(yùn)行時(shí)使用PRTS函數(shù)install_int_vector()將向量定位在預(yù)先定義的段.vector中。這種方法要求向量在運(yùn)行時(shí)安裝,以防止程序和數(shù)據(jù)被修改。另外,首先要把PRTS庫鏈接到程序,并在命令文件中預(yù)先定義.vector段,把.vector段定位在ROM0存儲(chǔ)器的開始地址。命令文件如下所示:-lprts40.libMEMORY{RAM0:org=0x2ff800,len=0x400}SECTIONS{“.vector”:{}>RAM0}主程序中必須包含頭文件intpt40.h。函數(shù)set_ivtp()使用預(yù)定義的參量DEFAULT才能被調(diào)要,這樣設(shè)置IVTP寄存器可使.vector段按命令文件中定義定位。中斷向量可使用函數(shù)install_int_vector()來安裝,如下所示:#include<intpt40.h>voidc_int99(void){for(;;);}voidmain(void){
set_ivtp(DEFAULT);install_int_vector((void*)c_int99,2);例3:鏈接時(shí)指定TMS320C4X或TMS320C5X的符號(hào)當(dāng)TMS320C5X的編輯器中沒有PRTS庫而不能設(shè)置向量表指針時(shí),還有一個(gè)方便的方法可以達(dá)到同樣的目的。那就是使用在鏈接時(shí)指定符號(hào)的方法。這種方法的主要思想是利用包含復(fù)位和中斷向量的匯編語言段(.sect)以及用鏈接器映射中斷向量在內(nèi)存中的分布。C程序可以獲得這個(gè)地址并把它裝載到中斷向量表指針(TMS320C4X的IVTP寄存器或者TMS320C5X的PMST寄存器)。本例為TMS320C5X芯片,中斷向量定位于匯編語言模塊中,標(biāo)號(hào)IVECS指向中斷向量表的基地址,下面說明如何獲取中斷向量地址。.defIVECS.ref_c_int0,_c_int1,_c_int2.sect“reset”b
_c_int0.sect“vectors”IVECS.space2b
_c_int1b
_c_int2在鏈接器中,用鏈接器指定的標(biāo)號(hào)初始化鏈接器定義的變量。如下所示:–cvecs.obj–lrts50.lib_vecTable=IVECSMEMORY{PAGE0:VECTORS:origin=00000h,length=0003fhROM:origin=00040h,length=007CFhP_RAM:origin=00800h,length=023FFh...}SECTIONS{”reset”>VECTORS”vectors”>P_RAM.text:>ROM.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025承包合同 商店承包合同
- 2025土地使用權(quán)轉(zhuǎn)讓合同(律師擬定版本)
- 2025年度船舶涂裝環(huán)保技術(shù)應(yīng)用合作協(xié)議3篇
- 個(gè)性化協(xié)議關(guān)系證明模板2024年版
- 二零二五年度車牌號(hào)碼變更與過戶服務(wù)合同3篇
- 2025年度場(chǎng)地地形測(cè)繪與三維建模服務(wù)合同模板3篇
- 二零二四年特色門面租賃合同范本6篇
- 2025年個(gè)人醫(yī)療保健抵押貸款協(xié)議
- 2025版無子女家庭子女財(cái)產(chǎn)分割參考范文合同3篇
- 2024年國家公務(wù)員考試公共法律知識(shí)考試題庫及答案(共560題)
- 口腔醫(yī)學(xué)中的人工智能應(yīng)用培訓(xùn)課件
- 工程質(zhì)保金返還審批單
- 【可行性報(bào)告】2023年電動(dòng)自行車項(xiàng)目可行性研究分析報(bào)告
- 五月天歌詞全集
- 商品退換貨申請(qǐng)表模板
- 實(shí)習(xí)單位鑒定表(模板)
- 六西格瑪(6Sigma)詳解及實(shí)際案例分析
- 機(jī)械制造技術(shù)-成都工業(yè)學(xué)院中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 數(shù)字媒體應(yīng)用技術(shù)專業(yè)調(diào)研方案
- 2023年常州市新課結(jié)束考試九年級(jí)數(shù)學(xué)試卷(含答案)
- 正常分娩 分娩機(jī)制 助產(chǎn)學(xué)課件
評(píng)論
0/150
提交評(píng)論