<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > TMS320C54x系列DSP的中斷機制及使用技巧

TMS320C54x系列DSP的中斷機制及使用技巧

作者: 時(shí)間:2012-07-02 來(lái)源:網(wǎng)絡(luò ) 收藏

1 C54x中的

本文引用地址:http://dyxdggzs.com/article/148827.htm

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

  C54xDSP支持軟件中斷和硬件中斷。軟件中斷是由指令(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的值,數字表示調用順序。

  


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>