淺談S3C2440的中斷寄存器及中斷過程
S3C2440一共有60個(gè)中斷源,其中有15個(gè)子中斷源,它們與SUBSRCPND寄存器中的每一位相對應(yīng),其他45個(gè)中斷源與SRCPND中的每一位相對應(yīng)。要注意的是EINT4~7對應(yīng)的是同一位SRCPND[4],而EINT8~23對應(yīng)的也是SRCPND[5]一位。
1 S3C2440的中斷寄存器
1.1 外部中斷寄存器
寄存器:
1.2 內(nèi)部中斷寄存器
寄存器:
SUBSRCPND:當(dāng)一個(gè)中斷發(fā)生后,那么相應(yīng)的位會(huì)被置1,表示一個(gè)中斷發(fā)生了。
INTSUBMSK:與上一個(gè)是一樣的,中斷屏蔽寄存器。
SRCPND:當(dāng)一個(gè)中斷發(fā)生后,那么相應(yīng)的位會(huì)被置1,表示一個(gè)或一類中斷發(fā)生了。
INTMSK:用來屏蔽SRCPND寄存器所標(biāo)識(shí)的中斷。但只能屏蔽IRQ中斷,不能屏蔽FIQ中斷。
INTMOD:當(dāng)INTMOD中某位被設(shè)置為1時(shí),它對應(yīng)的中斷被設(shè)為FIQ,CPU將進(jìn)入快速中斷模式。
PRIORITY:用于設(shè)置IRQ中斷的優(yōu)先級(jí)。具體使用方法可參考芯片手冊。
INTPND:中斷優(yōu)先級(jí)仲裁器選出優(yōu)先級(jí)最高中斷后,這個(gè)中斷在INTPND寄存器中的相應(yīng)位被置1,隨后,CPU進(jìn)入中斷模式處理它。同一時(shí)間內(nèi),此寄存器只有一位被置1。
INTOFFSET:用來表示INTPND寄存器中哪位被置1了,即記錄INTPND中位[x]為1的位x的值。清除INTPND、SRCPND時(shí)自動(dòng)清除。
1.3 各寄存器關(guān)系:
圖1 各中斷寄存器間的關(guān)系
2 中斷過程
2.1 內(nèi)部中斷過程
a 如果是不帶子中斷的內(nèi)部中斷:發(fā)生后SRCPND相應(yīng)位置1,如果沒有被INTMSK屏蔽,那么等待進(jìn)一步處理。b 如果是帶子中斷的內(nèi)部中斷:發(fā)生后SUBSRCPND相應(yīng)位置1,如果沒有被INTSUBMSK屏蔽,那么SRCPND相應(yīng)位置1,等待進(jìn)一步處理,幾個(gè)SUBSRCPND可能對應(yīng)同一個(gè)SRCPND,對應(yīng)表如下:
2.2 外部中斷過程
a 如果是外部中斷:EINT0-EINT3發(fā)生后SRCPND相應(yīng)位置1,如果沒有被INTMSK屏蔽,那么等待進(jìn)一步處理。EINT4-EINT23發(fā)生后EINTPEND相應(yīng)位置1,如果沒有被EINTMASK屏蔽,那么SRCPND相應(yīng)位EINT4-7 或EINT8-23置1,如果沒有被INTMSK屏蔽,等待進(jìn)一步處理,幾個(gè)EINTPEND對應(yīng)同一個(gè)SRCPND,對應(yīng)表如下:2.3 中斷的開啟
a.如果是不帶子中斷的內(nèi)部中斷,只需設(shè)置INTMSK,讓它不屏蔽中斷就可以了。b 如果是帶子中斷的內(nèi)部中斷,需設(shè)置INTSUBMSK和INTMSK,讓它們不屏蔽中斷就可以了。
c 如果是外部中斷,對于EINT8-23需要設(shè)置EINTMASK和INTMSK。對于EINT0-EINT3只需設(shè)置INTMSK。
2.4 中斷的清除
a.如果是不帶子中斷的內(nèi)部中斷,只需清除SRCPND,注意清除需位置1。b 如果是帶子中斷的內(nèi)部中斷,需清除SRCPND和SUBSRCPND,注意先清除SUBSRCPND,再清除SRCPND。因?yàn)椋绻阆惹宄齋RCPND的話,然后在清除SUBSRCPND的過程中,SRCPND會(huì)以為又有中斷發(fā)生,又會(huì)置1。也就是說一次中斷會(huì)響應(yīng)兩次。所以必須先掐斷源頭。
c 如果是外部中斷,對于EINT8-23需要清除EINTPEND和SRCPND(同樣注意順序)。對于EINT0-EINT3只需清除SRCPND。
評(píng)論