s3c2410中斷異常處理流程
如上圖所示,SRCPND寄存器對應的32個(gè)中斷源總共被分為6個(gè)組,每個(gè)組由一個(gè)ARBITER(0~5)寄存器對其進(jìn)行管理。中斷必須先由所屬組的ARBITER(0~5)進(jìn)行第一次優(yōu)先級判斷(第一級判斷)后再發(fā)往ARBITER6進(jìn)行最終的判斷(第二級判斷)。ARBITER(0~5)這六個(gè)組的優(yōu)先級已經(jīng)固定,我們無(wú)法改變,也就是說(shuō)由ARBITER0控制的該組中斷優(yōu)先級最高(該組產(chǎn)生的中斷進(jìn)行第一級判斷后永遠會(huì )以REQ0向ARBITER6傳遞過(guò)去)其次是ARBITER1,
ARBITER2, ARBITER4, ARBITER4,
ARBITER5.我們能夠控制的是某個(gè)組里面各個(gè)中斷的優(yōu)先級順序。怎么控制?通過(guò)PRIORITY寄存器進(jìn)行控制:]
以下是PRIORITY寄存器各個(gè)位的參數表
從表上我們可以知道PRIORITY寄存器內部各個(gè)位被分為兩種類(lèi)型,一種是ARB_MODE,另一種為ARB_SEL,
ARB_MODE類(lèi)型有5組對應ARBITER(2~6),ARB_SEL類(lèi)型有7組對應ARBITER(0~6)?,F在我將以ARBITER2為例,講解中斷組與PRIORITY寄存器中ARB_SEL,
ARB_MODE之間的相互關(guān)系。
首先我們看到ARBITER2寄存器管理的該組中斷里包括了6個(gè)中斷,分別是INT_TIMER0,INT_TIMER1,INT_TIMER2,INT_TIMER3,INT_TIMER4,INT_UART2,她們的默認中斷請求號分別為REQ0,REQ1,REQ2,REQ3,REQ4,REQ5。我們先看PRIORITY寄存器中的ARB_SEL2,該參數由兩個(gè)位組成,初始值為00。從該表可以看出00定義了一個(gè)順序
0-1-2-3-4-5
,這個(gè)順序就是這組中斷組的優(yōu)先級排列,這個(gè)順序指明了以中斷請求號為0(REQ0)的INT_TIMER0具有最高的中斷優(yōu)先級,其次是INT_TIMER1,INT_TIMER2…。假設現在A(yíng)RB_SEL2的值被我們設置為01。則一個(gè)新的優(yōu)先級次序將被使用,01對應的優(yōu)先級次序為0-2-3-4-1-5,從中可以看出優(yōu)先級最高和最低的中斷請求和之前沒(méi)有變化,但本來(lái)處于第2優(yōu)先級的INT_TIMER1中斷現在變成了第5優(yōu)先級。從ARB_SEL2被設置為00,01,10,11各個(gè)值所出現的情況我們可以看出,除最高和最低的優(yōu)先級不變以外,其他各個(gè)中斷的優(yōu)先級其實(shí)是在做一個(gè)旋轉排列(rotate)。為了達到對各個(gè)中斷平等對待這一目標,我們可以讓優(yōu)先級次序在每個(gè)中斷請求被處理完之后自動(dòng)進(jìn)行一次旋轉,如何自動(dòng)讓它旋轉呢?我們可以通過(guò)ARB_MODE2達到這個(gè)目的,該參數只有1個(gè)bit,置1代表開(kāi)啟對應中斷組的優(yōu)先級次序旋轉,0則為關(guān)閉。事實(shí)上當該位置為1之后,每處里完某個(gè)組的一個(gè)中斷后,該組的ARB_SEL便遞增在1(達到11后恢復為00)。
現在我們另ARB_MODE2=1,ARB_SEL2=00
則當前ARBITER2的優(yōu)先級順序為0-1-2-3-4-5,假設現在該組的1號中斷請求INT_TIMER1和2號中斷請求INT_TIMER2被同時(shí)觸發(fā),CPU根據優(yōu)先級判斷后決定先把INT_TIMER1中斷向ARBITER6進(jìn)行發(fā)送(在A(yíng)RBITER6做第最終優(yōu)先級判斷),接著(zhù)再向ARBITER6發(fā)送INT_TIMER2中斷。請注意,在INT_TIMER1被處理完畢后,該組中段的優(yōu)先級次序被自動(dòng)做了一次旋轉,旋轉后ARBITER2的優(yōu)先級順序變?yōu)?-2-3-4-1-5。假設之后某個(gè)時(shí)刻該組的INT_TIMER1和INT_TIMER2又被同時(shí)觸發(fā),則此時(shí)CPU優(yōu)先處理的會(huì )是INT_TIMER2。若我們另ARB_MODE2=0,則改組的中斷優(yōu)先級次序在任何情況下都不做任何改變,除非我們人為地重新設置了ARB_SEL2的值。
呼。。。好累。。。終于說(shuō)完了麻煩的優(yōu)先級-_-…
繼續。。。
INTPND
寄存器可能是整個(gè)中斷處理過(guò)程中我們要特別注意的一個(gè)寄存器了,他的操作比較特別,怎么特別?請聽(tīng)我慢慢道來(lái).:]
先看一下該寄存器各位詳細功能列表
評論