S3C2410中斷寄存器
首先,來看S3C2410的中斷控制器,有6個中斷裁決器分為2級,第1級5個, 第2級1個。第1級的5個裁決器管理32個中斷源,在這32個中斷源中有2個是保留的,24個是給內(nèi)部中斷源的,而外部中斷只給了6個中斷:EINT0、 EINT1、EINT2、EINT3、EINT4~7、EINT8~23。EINT4~EINT7、EINT8~EINT23都是共享一個中斷。
本文引用地址:http://m.butianyuan.cn/article/201611/316224.htm中斷控制器中主要的相關(guān)寄存器有:INTMSK、SRCPND、PRIORITY、INTPND,還有一個INTMOD。但是對于外部中斷還有幾個寄存器:EXTINTn、EINTMSK、EINTPEND等。
對于外部中斷EINT0~EINT3由于沒有共享,因此外部寄存器中只有EXTINT0和它們有關(guān),進(jìn)行中斷觸發(fā)電平信號的設(shè)置。
但是對于其他的20個外部中斷而言,所有上面提到的寄存器都有關(guān)系。實際上對于 EINT4~EINT23,實際上可以看作有3級屏蔽,第1級屏蔽是CPSR中的I-Bit和F-Bit,第2級屏蔽是EINTMASK([4:23]每 一位對應(yīng)一個相應(yīng)的外部中斷),第3級屏蔽是INTMSK(Bit4、Bit5);對于EINT0~EINT3而言,只是INTMSK中的 Bit0~Bit3,因此在變成初始化時應(yīng)該要特別注意。
在外部中斷有中斷請求時,由于EINT4~7、EINT8~23分別共享中斷,因 此在SRCPND中分別對應(yīng)Bit4、Bit5,最終導(dǎo)致INTPND中的相應(yīng)位置1(在任何時刻只能有一個位置1),但是如何分辨這些共享的中斷?可以 通過查詢EINTPEND來進(jìn)行(Bit4~Bit23分別對應(yīng)1個外部中斷)。由于在相應(yīng)中斷后在服務(wù)例程中應(yīng)將掛起寄存器中相應(yīng)的位清0來清除未處理 狀態(tài),因此對于EINT4~7、EINT8~23這20個外部中斷的清除掛起寄存器的順序是:
1. EINTPEND(可能多位同事為1),方法:向要清0的位寫1,其它位寫0,但要注意由于第4位保留,因此不要試圖向第4位寫1,可能會導(dǎo)致不可預(yù)料的結(jié)果。
2.SRCPND(可能多位同時為1),方法:向要清0的位寫1,其它位寫0。
3.INTPND,方法:向其寫本身的數(shù)據(jù)(即INTPND=INTPND)。
下面具體介紹各個寄存器的功能:
SRCPND(Source Pending Register)寄存器有效位32位,可讀寫,每一位涉及到一個中斷源,SRCPND是主中斷源引腳寄存器,某個位被置1表示相應(yīng)的中斷被觸發(fā),但我們知道在同一時刻內(nèi)系統(tǒng)可以觸發(fā)若干個中斷,只要中斷被觸發(fā)了,SRCPND的相應(yīng)位便被置1,也就是說SRCPND 在同一時刻可以有若干位同時被置1,另外,此寄存器不受中斷控制器的優(yōu)先權(quán)邏輯的影響。如果此中斷沒有被INTMSK寄存器屏蔽、或者是快中斷(FIQ)的話,它將被進(jìn)一步處理。通過寫數(shù)據(jù)到這個寄存器能清除SPCPND相應(yīng)的位。
INTMODE(Interrupt Mode Register)寄存器有效位為32位,可讀寫,每一位與SRCPND中各位相對應(yīng),它的作用是指定該位相應(yīng)的中斷源處理模式(IRQ還是FIQ)。若某位為0,則該位相對應(yīng)的中斷按IRQ模式處理,為1則以FIQ模式進(jìn)行處理,該寄存器初始化值為0x00000000,即所有中斷皆以IRQ模式進(jìn)行處理。此中斷控制器中只有一個中斷源能用FIQ mode(在緊急中斷下使用FIQ mode),因此INTMODE僅有一位能置1。
INTMSK(Interrupt Mask Register)寄存器有效位為32位,可讀寫,INTMSK為主中斷屏蔽寄存器與SRCPND寄存器對應(yīng),它的作用是決定該位相應(yīng)的中斷請求是否被處理。若某位被設(shè)置為1,則該位相對應(yīng)的中斷產(chǎn)生后將被忽略(CPU不處理該中斷請求),設(shè)置為0則CPU對其進(jìn)行處理。該寄存器初始化值為0xFFFFFFFF,既默認(rèn)情況下所有的中斷都是被屏蔽的。
PRIORITY(IRQ PRIORITY Control Register)寄存器有32位,有效位[20:0],可讀寫,此寄存器的作用是如果有幾個中斷源同時觸發(fā),按照圖2.2.1的流向,假如這幾個中斷源都沒被屏蔽,并且都是IRQ模式,因此就要判定哪個中斷源的優(yōu)先級最高,使其在INTPND寄存器中對應(yīng)位置1,CPU轉(zhuǎn)向相應(yīng)的中斷服務(wù)程序,讓中斷服務(wù)程序來處理相應(yīng)的中斷請求。
INTPND(Interrupt Pending Register)寄存器有效位為32位,可讀寫,看起來和SRCPND寄存器一樣,其實他們在功能上有著重大的區(qū)別。他在某一時刻只能有1個位被置1,INTPND 某個位被置1(該位對應(yīng)的中斷在所有已觸發(fā)的中斷里具有最高優(yōu)先級且該中斷沒有被屏蔽),則表示CPU即將或已經(jīng)在對該位相應(yīng)的中斷進(jìn)行處理。因此SRCPND寄存器說明有什么中斷被觸發(fā)了,而INTPND寄存器說明CPU即將或已經(jīng)在對某一個中斷進(jìn)行處理。
INTOFFSET(Interrupt Offset Register)寄存器有效位為32位,只讀,此寄存器的值顯示IRQ mode的哪個中斷請求在INTPND寄存器中,通過清SRCPND和INTPND這位能自動清除,F(xiàn)IQ mode中斷不會影響INTOFFSET寄存器,因此此寄存器僅對IRQ mode中斷有效。
SUBSRCPND(Sub Source Pending Register)寄存器有32位,有效位[10:0],可讀寫,它們中的每一位分別代表一個中斷源,SRCPND是主中斷源引腳寄存器,它是副中斷源引腳寄存器,情況類似SRCPND。 INTSUBMSK(Interrupt Sub Mask Register)寄存器有32位但有效位為11位,可讀寫,如果mask bit位是0,此中斷請求被服務(wù),情況類似INTMSK。
評論