s3c2410中斷異常處理
s3c2410的中斷異常處理模塊總共由以下寄存器構(gòu)成
SRCPND(SOURCE
PENDING REGISTER)
INTMOD(INTERRUPT MODE REGISTER)
INTMSK(INTERRUPT MASK
REGISTER)
PRIORITY( PRIORITY REGISTER)
INTPND(INTERRUPT PENDING
REGISTER)
INTOFFSET(INTERRUPT OFFSET REGISTER)
SUBSRCPND (INTERRUPT SUB
SOURCE PENDING)
INTSUBMSK (INTERRUPT SUB MASK REGISTER)
SRCPND/
SUBSRCPND這兩個寄存器在功能上是相同的,它們是中斷源引腳寄存器,在一個中斷異常處理流程中,中斷信號傳進(jìn)中斷異常處理模塊后首先遇到的就是SRCPND/
SUBSRCPND,這兩個寄存器的作用是用于標(biāo)示出哪個中斷請求被觸發(fā)。SRCPND的有效位為32,SUBSRCPND
的有效位為11,它們中的每一位分別代表一個中斷源。SRCPND為主中斷源引腳寄存器,SUBSRCPND為副中斷源引腳寄存器。
這里列舉出SRCPND的各個位信息:
每個位的初始值皆為0。假設(shè)現(xiàn)在系統(tǒng)觸發(fā)了TIMER0中斷,則第10bit將被置1,代表TIMER0中斷被觸發(fā),該中斷請求即將被處理(若該中斷沒有被屏蔽的話)。SUBSRCPND情況與SRCPND相同,這里就不多講了。
INTMOD寄存器有效位為32位,每一位與SRCPND中各位相對應(yīng),它的作用是指定該位相應(yīng)的中斷源處理模式(IRQ還是FIQ)。若某位為0,則該位相對應(yīng)的中斷按IRQ模式處理,為1則以FIQ模式進(jìn)行處理,該寄存器初始化值為0x00000000,即所有中斷皆以IRQ模式進(jìn)行處理。(詳細(xì)請參考s3c2410操作手冊)。
INTMSK/ INTSUBMSK
寄存器為中斷屏蔽寄存器
,INTMSK為主中斷屏蔽寄存器,INTSUBMSK為副中斷屏蔽寄存器。INTMSK有效位為32,INTSUBMSK有效位為11,這兩個寄存器各個位與SRCPND和SUBSRCPND分別對應(yīng)。它們的作用是決定該位相應(yīng)的中斷請求是否被處理。若某位被設(shè)置為1,則該位相對應(yīng)的中斷產(chǎn)生后將被忽略(CPU不處理該中斷請求),設(shè)置為0則對其進(jìn)行處理。這兩個寄存器初始化后的值是0xFFFFFFFF和0x7FF,既默認(rèn)情況下所有的中斷都是被屏蔽的。
到目前為止我們總共講解了SRCPND,INTMOD,INTMSK,SUBSRCPND,INTSUBMSK
五個寄存器,在繼續(xù)講解PRIORITY寄存器之前我們先來看一張圖。
先弄清楚一點(diǎn),現(xiàn)在要討論的是一個中斷優(yōu)先級的判斷問題。為什么會有中斷有先級的問題呢?我們知道CPU某個時刻只能對一個中斷源進(jìn)行中斷處理,如果現(xiàn)在有3個中斷同時發(fā)生了,那CPU要按什么順序處理這個3個中斷呢?這正是引入優(yōu)先級判斷的原因所在,通過優(yōu)先級判斷,CPU可以按某種順序逐個處理中斷請求。3sc2410的優(yōu)先級判斷分為兩級。
評論