TMS320C54x系列DSP的中斷機制

發(fā)布時(shí)間:2010-10-18 19:32    發(fā)布者:techshare
關(guān)鍵詞: dsp , TMS320C54x , 中斷
1 C54x中的中斷機制

中斷信號實(shí)質(zhì)上是由硬件或者是軟件驅動(dòng)的信號,它能使DSP暫停正在執行的程序并進(jìn)入中斷服務(wù)程序(ISR)。在最典型的DSP系統中,如果A/D轉換器需要送數據到DSP中,或者D/A轉換器需要從DSP中取走數據,都是通過(guò)硬件中斷向DSP發(fā)出請求的。

C54x系列DSP支持軟件中斷和硬件中斷。軟件中斷是由指令(INTR、TRAP、RESET)觸發(fā)的,硬件中斷是由外圍器件觸發(fā)的。硬件中斷實(shí)際上又分為兩類(lèi):一類(lèi)是由DSP的片外外設(如A/D轉換器)觸發(fā)的,另外一類(lèi)是由DSP的片內外設(如定時(shí)器中斷)觸發(fā)的。硬件中斷又有優(yōu)先級的區分,這是為了處理同一時(shí)刻有多個(gè)硬件中斷源觸發(fā)中斷的情況。硬件中斷的種類(lèi)和優(yōu)先級請參看具體使用的芯片資料。

如果按照可屏蔽情況分類(lèi),中斷又可分為可屏蔽中斷(C54x至多支持16個(gè))和不可屏蔽中斷?善帘沃袛嗍躍T1寄存器中的INTM位和IMR寄存器中相應位的影響。當INTM=0時(shí),IMR中某位為1,則開(kāi)放相應的中斷。其實(shí),在C54x中硬件中斷并不一定要由外圍器件觸發(fā),它同樣可以由指令I(lǐng)NTR、TRAP觸發(fā),并且不受INTM的限制。有一點(diǎn)需要引起注意的是:指令RESET復位和硬件RS復位對IPTR和外圍電路初始化是不相同的。硬件復位時(shí)IPTR總是被置為0x1FF,軟件復位時(shí)則不會(huì )修改當前IPTR的值。C54x的中斷處理過(guò)程分為三個(gè)階段:

①中斷請求?梢杂糜布骷蛘哕浖噶钫埱笾袛。如果請求的中斷是可屏蔽中斷,則IFR寄存器中相應的位被置為1,而不管中斷是否會(huì )被響應。

②中斷響應。對于軟件中斷和不可屏蔽中斷,CPU是立即響應的。對于可屏蔽中斷,要滿(mǎn)足下列條件才能響應:

·優(yōu)先級最高(同時(shí)出現多個(gè)中斷時(shí))

·INTM位為0

·IMR中相應位為1

CPU在取到軟件向量的第一個(gè)字后會(huì )產(chǎn)生IACK信號,對可屏蔽中斷而言,IACK會(huì )清除IFR中相應位。

③中斷處理。保護特定的寄存器,執行中斷服務(wù)程序,完成后恢復寄存器。保護寄存器的原則是執行中斷服務(wù)程序后能正確返回并恢復原來(lái)運行程序的環(huán)境。

DSP中提供的中斷是以中斷向量表(VECT)的形式出現的(見(jiàn)表1)。中斷向量表的長(cháng)度為128個(gè)字節,每個(gè)中斷分配為4個(gè)字節,一共有32個(gè)中斷,具體的中斷要看相應的芯片。C54x中斷向量表的地址是由PMST寄存器中的IPTR構成高9位地址形成的,所以向量表的地址必須是128的倍數。硬件復位時(shí),IPTR總是默認置為0x1FF,所以中斷向量表地址為0xFF80。每個(gè)中斷向量的地址按如下構成方法形成:PC=(IPTR)<<7+(Vector[n])<<2 (Vector[n]為中斷向量號,在0~31之間),中斷向量號左移兩位是因為每個(gè)中斷向量占用4個(gè)字節的緣故。中斷向量表總是以匯編的形式出現的。

2 擴展地址模式下的中斷控制

早期的DSP共有192K的空間(程序、數據和I/O空間各為64K),隨著(zhù)DSP處理能力越來(lái)越強,192K的空間已經(jīng)不能滿(mǎn)足需要。后來(lái)的C54x均提供了擴展地址模式,使程序空間擴展到8M。擴展模式下的中斷控制有自己特殊的地方,有必要進(jìn)行說(shuō)明。

擴展模式下程序空間的尋址是通過(guò)寄存器PC和XPC一同進(jìn)行的。PC構成低16位地址位,XPC構成高7位地址位。所以保存和恢復XPC是用戶(hù)必須注意的。如果用戶(hù)使用的是Far Call指令,則XPC會(huì )自動(dòng)保存和恢復。但在進(jìn)行中斷處理的時(shí)候,只有16位的PC寄存器能夠自動(dòng)得到保存(這是由于考慮了非擴展模式下中斷的效率問(wèn)題),所以XPC必須由用戶(hù)自己來(lái)保存,否則在中斷返回的時(shí)候往往會(huì )跳到不同的頁(yè)面(由返回前后XPC值的不同引起)造成不可預測的后果。程序如表1所示。



由于必須在長(cháng)跳轉之前保存XPC的值,沒(méi)法使用延遲指令(如FBD),所以中斷時(shí)延會(huì )增加兩個(gè)周期。

再來(lái)考慮另外一種情況:設程序運行在XPC=2的頁(yè)面上,如果這個(gè)時(shí)候有中斷發(fā)生并得到了CPU的響應,DSP會(huì )加載PC:PC=(IPTR)<<7+(Vector[n])<<2,XPC的值不發(fā)生變化,于是中斷向量的地址為:0x20000+0xPC。這就明顯地說(shuō)明:中斷向量表必須和應用程序在同一64K的程序空間頁(yè)面內。如果應用程序不是只分布在一個(gè)程序空間頁(yè)面內,那應該如何處理呢?可分三種類(lèi)型共四種技巧來(lái)應對這樣的情況:(1.1)描述的是OVLY為任意的情況;(2.1)~(2.2)描述的是OVLY=1的情況;(3.1)描述的是OVLY=0的情況。

(1.1)有的應用中,一些程序一旦運行是不允許中斷的。把不允許中斷的程序部分放到擴展空間內,而把中斷向量表和ISR以及允許中斷的程序部分都放在XPC=0的頁(yè)面。當調用擴展空間的程序時(shí)關(guān)閉中斷使能,而當擴展空間程序返回到XPC=0的頁(yè)面時(shí)再開(kāi)中斷。這樣做的好處是不用關(guān)注XPC的值對中斷向量尋址的影響。中斷的時(shí)候也不需要保存XPC的值。調用過(guò)程如圖1所示,Y表示需要關(guān)注XPC的值,N表示不需要關(guān)注XPC的值,數字表示調用順序。



(2.1) DSP中影響存儲器映射的因素有三個(gè):OVLY、DROM和MP/MC。OVLY是Overlay的簡(jiǎn)寫(xiě)。當OVLY=1時(shí),數據空間里的一部分RAM變?yōu)橹丿B區域(Overlay Memory)。這部分重疊區域同時(shí)映射在每一頁(yè)程序空間的上部。具體示例如圖2所示(MP/MC=0,C5416)。



可見(jiàn)OVLY=1的時(shí)候,數據空間的DARAM0~3被映射到程序空間的每一頁(yè)上;谶@樣的特點(diǎn),可以把中斷向量表定位到數據空間的重疊區域DARAM0~3中,置OVLY為1。當有中斷發(fā)生時(shí),不管程序運行于DSP的哪個(gè)程序頁(yè)面空間,只用PC尋址都能夠正確地取到中斷向量表,而不會(huì )受XPC的影響。中斷程序ISR可以放到任何一個(gè)程序頁(yè)面中,但這時(shí)跳轉到ISR的指令只能用長(cháng)跳轉指令(FB等),跳轉之前注意將XPC壓入堆棧,程序同表1。示意圖如圖3所示。


(2.2) 如果片內RAM比較大,分給數據空間的RAM也比較多(如C5416有64K的RAM可以作為數據空間),數據空間可能會(huì )有余量。這時(shí)可以把中斷向量表和ISR都全部放進(jìn)數據空間的Overlay Memory區域,并把OVLY置1。這樣不僅在任何程序頁(yè)面空間都能夠正確地取到中斷向量表,同時(shí)用短跳轉指令(BD等)就可以實(shí)現跳轉到ISR,不再需要對XPC進(jìn)行保存和還原。程序請參看表2。


(3.1) 在擴展模式下,雖然程序空間擴為8M,但如果OVLY=1,則程序空間中存在大量的重疊區域,如C5416在OVLY=1的情況下真正可用的程序空間最大為4.03M。有的場(chǎng)合需要的程序空間大于4.03M,就必須使用OVLY=0的情況。這個(gè)時(shí)候程序空間不存在重疊區域,但可以模擬出來(lái)。方法是:把中斷向量表拷貝到會(huì )發(fā)生中斷的每一頁(yè)程序空間,如圖4所示。這樣,中斷的時(shí)候就能正確找到中斷向量表而實(shí)現中斷跳轉。



比較上面的四種方法,方法(2.1)更為適應普遍的情況。它不限制ISR的地址范圍,而中斷向量表只占0x80的空間,把它放到數據空間的重疊區域是很容易做到的。筆者正在做的項目正是采用了這種方法。

3 DSP/BIOS下中斷的管理

DSP/BIOS是TI近來(lái)推出的準實(shí)時(shí)操作系統,它同樣支持擴展地址模式,只是需要將Global Settings中的函數調用模式設置為Far就可以了。需要強調的是:BIOS只支持OVLY=1的擴展模式,而不支持OVLY=0的擴展模式。擴展模式下在BIOS Code中會(huì )多出一個(gè)段“.bios:.norptb”,這個(gè)段會(huì )被自動(dòng)放入Overlay Memory之中,具體原因請參看參考文獻。BIOS管理的線(xiàn)程有四種類(lèi)型:HWI、SWI、TSK以及IDL。上面所提到的所有中斷屬于優(yōu)先級最高的HWI線(xiàn)程。每個(gè)中斷向量都是以HWI模塊的Object形式存在,可以用BIOS下的Configuration Tool來(lái)配置每個(gè)中斷向量所觸發(fā)的函數。在Configuration Tool中,會(huì )發(fā)現System的MEM模塊下有一個(gè)名為VECT的Object,它實(shí)質(zhì)上是用來(lái)給中斷向量表分配存儲空間的,用戶(hù)可以自己配置中斷向量表的地址(必須是128的倍數)。地址的分配方法可以參考上面提到的幾種應對技巧。下面就BIOS下的中斷做出幾點(diǎn)說(shuō)明:

·在Object的屬性框中填寫(xiě)中斷函數名時(shí),如果中斷函數是由C語(yǔ)言編寫(xiě)的,則需要在函數名前加下劃線(xiàn)(C語(yǔ)言和匯編語(yǔ)言相互調用的需要)。匯編語(yǔ)言則不需要。

·在編寫(xiě)中斷函數的時(shí)候不能再用關(guān)鍵字interrupt來(lái)說(shuō)明中斷函數,因為BIOS已經(jīng)自動(dòng)包括了這個(gè)功能。如果再用interrupt,則會(huì )造成致命后果。

·如果中斷函數是用匯編語(yǔ)言編寫(xiě)的,中斷函數應夾在BIOS的API HWI_enter和HWI_exit之間。這樣,在中斷處理的時(shí)候會(huì )正確保存和恢復一些需要使用的寄存器,并妥善處理線(xiàn)程間的關(guān)系以及中斷函數中對BIOS API的調用;如果中斷函數是用C語(yǔ)言編寫(xiě)的,則必須使用HWI Dispatcher屬性,作用和前面是一樣的。如果想了解更多東西可以參看參考文獻。

·在BIOS中的SWI(軟件中斷)模塊下,用戶(hù)可以自己添加軟件中斷對象。但是必須從概念上分清楚,這里添加的軟件中斷和在前面提到的軟件中斷(即由INTR、TRAP、RESET觸發(fā)的中斷)是完全不同的概念。這里的軟件中斷并不屬于中斷向量表里的中斷向量(顯然中斷的個(gè)數也不會(huì )存在限制),并且它可以帶兩個(gè)參數(前面的中斷函數是不能帶參數的)。所以從幾個(gè)方面看這里的軟件中斷函數更象是通常意義上的一般函數。

在剛開(kāi)始使用DSP/BIOS的時(shí)候可能會(huì )覺(jué)得比較麻煩,需要理解的東西也很多。但當你熟悉了以后會(huì )發(fā)現,它能幫你節省不少時(shí)間去處理底層的東西,而使你將更多的精力放在算法的實(shí)現上。

本文全面介紹了C54x系列DSP的中斷機制,以及中斷在使用過(guò)程中的一些技巧,闡述了整個(gè)中斷的響應過(guò)程和一些比較容易出錯的地方。希望通過(guò)共享使大家更快更好地掌握C54x的中斷處理。
本文地址:http://selenalain.com/thread-33192-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页