<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ò ) 收藏

 (2.1) 中影響存儲器映射的因素有三個(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)。

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

  

  可見(jiàn)OVLY=1的時(shí)候,數據空間的DARAM0~3被映射到程序空間的每一頁(yè)上?;谶@樣的特點(diǎn),可以把向量表定位到數據空間的重疊區域DARAM0~3中,置OVLY為1。當有發(fā)生時(shí),不管程序運行于的哪個(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 /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í)現上。

  本文全面介紹了C54xDSP的中斷,以及中斷在使用過(guò)程中的一些技巧,闡述了整個(gè)中斷的響應過(guò)程和一些比較容易出錯的地方。希望通過(guò)共享使大家更快更好地掌握C54x的中斷處理。


上一頁(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>