S3C2410外部中斷
首先,來看S3C2410的中斷控制器,有6個中斷裁決器分為2級,第1級5個,第2級1個;第1級的5個裁決器管理32級中斷源,在這32級中斷源中有2個保留,24級是給內(nèi)部中斷源的,對于24個外部中斷只給了6個中斷級:EINT0、EINT1、EINT2、EINT3、EINT4~7、EINT8~23,EINT4~EINT7共享一個中斷級,EINT8~EINT23共享一個中斷級。
本文引用地址:http://www.ex-cimer.com/article/201611/317235.htm中斷控制器中主要的相關(guān)寄存器有:INTMSK、SRCPND、PRIORITY、INTPND,還有一個INTMOD。但是對于外部中斷還有幾個寄存器:EXTINTn、EINTMSK、EINTPEND等。
對于外部中斷EINT0~EINT3由于沒有共享,因此外部寄存器中只有EXTINT0和它們有關(guā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來進行(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)。
評論