<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          s3c2410中斷異常處理

          作者: 時間:2010-01-27 來源:網(wǎng)絡(luò) 收藏

          如上圖所示,SRCPND寄存器對應(yīng)的32個源總共被分為6個組,每個組由一個ARBITER(0~5)寄存器對其進(jìn)行管理。必須先由所屬組的ARBITER(0~5)進(jìn)行第一次優(yōu)先級判斷(第一級判斷)后再發(fā)往ARBITER6進(jìn)行最終的判斷(第二級判斷)。ARBITER(0~5)這六個組的優(yōu)先級已經(jīng)固定,我們無法改變,也就是說由ARBITER0控制的該組優(yōu)先級最高(該組產(chǎn)生的中斷進(jìn)行第一級判斷后永遠(yuǎn)會以REQ0向ARBITER6傳遞過去)其次是ARBITER1,

          ARBITER2, ARBITER4, ARBITER4,

          ARBITER5.我們能夠控制的是某個組里面各個中斷的優(yōu)先級順序。怎么控制?通過PRIORITY寄存器進(jìn)行控制:]

          以下是PRIORITY寄存器各個位的參數(shù)表

          從表上我們可以知道PRIORITY寄存器內(nèi)部各個位被分為兩種類型,一種是ARB_MODE,另一種為ARB_SEL,

          ARB_MODE類型有5組對應(yīng)ARBITER(2~6),ARB_SEL類型有7組對應(yīng)ARBITER(0~6)?,F(xiàn)在我將以ARBITER2為例,講解中斷組與PRIORITY寄存器中ARB_SEL,

          ARB_MODE之間的相互關(guān)系。

          首先我們看到ARBITER2寄存器管理的該組中斷里包括了6個中斷,分別是INT_TIMER0,INT_TIMER1,INT_TIMER2,INT_TIMER3,INT_TIMER4,INT_UART2,她們的默認(rèn)中斷請求號分別為REQ0,REQ1,REQ2,REQ3,REQ4,REQ5。我們先看PRIORITY寄存器中的ARB_SEL2,該參數(shù)由兩個位組成,初始值為00。從該表可以看出00定義了一個順序

          0-1-2-3-4-5

          ,這個順序就是這組中斷組的優(yōu)先級排列,這個順序指明了以中斷請求號為0(REQ0)的INT_TIMER0具有最高的中斷優(yōu)先級,其次是INT_TIMER1,INT_TIMER2…。假設(shè)現(xiàn)在ARB_SEL2的值被我們設(shè)置為01。則一個新的優(yōu)先級次序?qū)⒈皇褂茫?1對應(yīng)的優(yōu)先級次序?yàn)?-2-3-4-1-5,從中可以看出優(yōu)先級最高和最低的中斷請求和之前沒有變化,但本來處于第2優(yōu)先級的INT_TIMER1中斷現(xiàn)在變成了第5優(yōu)先級。從ARB_SEL2被設(shè)置為00,01,10,11各個值所出現(xiàn)的情況我們可以看出,除最高和最低的優(yōu)先級不變以外,其他各個中斷的優(yōu)先級其實(shí)是在做一個旋轉(zhuǎn)排列(rotate)。為了達(dá)到對各個中斷平等對待這一目標(biāo),我們可以讓優(yōu)先級次序在每個中斷請求被完之后自動進(jìn)行一次旋轉(zhuǎn),如何自動讓它旋轉(zhuǎn)呢?我們可以通過ARB_MODE2達(dá)到這個目的,該參數(shù)只有1個bit,置1代表開啟對應(yīng)中斷組的優(yōu)先級次序旋轉(zhuǎn),0則為關(guān)閉。事實(shí)上當(dāng)該位置為1之后,每處里完某個組的一個中斷后,該組的ARB_SEL便遞增在1(達(dá)到11后恢復(fù)為00)。

          現(xiàn)在我們另ARB_MODE2=1,ARB_SEL2=00

          則當(dāng)前ARBITER2的優(yōu)先級順序?yàn)?-1-2-3-4-5,假設(shè)現(xiàn)在該組的1號中斷請求INT_TIMER1和2號中斷請求INT_TIMER2被同時觸發(fā),CPU根據(jù)優(yōu)先級判斷后決定先把INT_TIMER1中斷向ARBITER6進(jìn)行發(fā)送(在ARBITER6做第最終優(yōu)先級判斷),接著再向ARBITER6發(fā)送INT_TIMER2中斷。請注意,在INT_TIMER1被完畢后,該組中段的優(yōu)先級次序被自動做了一次旋轉(zhuǎn),旋轉(zhuǎn)后ARBITER2的優(yōu)先級順序變?yōu)?-2-3-4-1-5。假設(shè)之后某個時刻該組的INT_TIMER1和INT_TIMER2又被同時觸發(fā),則此時CPU優(yōu)先的會是INT_TIMER2。若我們另ARB_MODE2=0,則改組的中斷優(yōu)先級次序在任何情況下都不做任何改變,除非我們?nèi)藶榈刂匦略O(shè)置了ARB_SEL2的值。

          呼。。。好累。。。終于說完了麻煩的優(yōu)先級-_-…

          繼續(xù)。。。

          INTPND

          寄存器可能是整個中斷處理過程中我們要特別注意的一個寄存器了,他的操作比較特別,怎么特別?請聽我慢慢道來.:]

          先看一下該寄存器各位詳細(xì)功能列表



          關(guān)鍵詞: 處理 異常 中斷 s3c2410

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();