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