S3C2410外部中斷
首先,來(lái)看S3C2410的中斷控制器,有6個(gè)中斷裁決器分為2級,第1級5個(gè),第2級1個(gè);第1級的5個(gè)裁決器管理32級中斷源,在這32級中斷源中有2個(gè)保留,24級是給內部中斷源的,對于24個(gè)外部中斷只給了6個(gè)中斷級:EINT0、EINT1、EINT2、EINT3、EINT4~7、EINT8~23,EINT4~EINT7共享一個(gè)中斷級,EINT8~EINT23共享一個(gè)中斷級。
本文引用地址:http://dyxdggzs.com/article/201611/317235.htm中斷控制器中主要的相關(guān)寄存器有:INTMSK、SRCPND、PRIORITY、INTPND,還有一個(gè)INTMOD。但是對于外部中斷還有幾個(gè)寄存器:EXTINTn、EINTMSK、EINTPEND等。
對于外部中斷EINT0~EINT3由于沒(méi)有共享,因此外部寄存器中只有EXTINT0和它們有關(guān),進(jìn)行中斷觸發(fā)電平信號的設置。
但是對于其他的20個(gè)外部中斷而言,所有上面提到的寄存器都有關(guān)系。實(shí)際上對于EINT4~EINT23,實(shí)際上可以看作有3級屏蔽,第1級屏蔽是CPSR中的I-Bit和F-Bit,第2級屏蔽是EINTMASK([4:23]每一位對應一個(gè)相應的外部中斷),第3級屏蔽是INTMSK(Bit4、Bit5);對于EINT0~EINT3而言,只是INTMSK中的Bit0~Bit3,因此在變成初始化時(shí)應該要特別注意。
在外部中斷有中斷請求時(shí),由于EINT4~7、EINT8~23分別共享中斷,因此在SRCPND中分別對應Bit4、Bit5,最終導致INTPND中的相應位置1(在任何時(shí)刻只能有一個(gè)位置1),但是如何分辨這些共享的中斷?可以通過(guò)查詢(xún)EINTPEND來(lái)進(jìn)行(Bit4~Bit23分別對應1個(gè)外部中斷)。由于在相應中斷后在服務(wù)例程中應將掛起寄存器中相應的位清0來(lái)清除未處理狀態(tài),因此對于EINT4~7、EINT8~23這20個(gè)外部中斷的清除掛起寄存器的順序是:
1. EINTPEND(可能多位同事為1),方法:向要清0的位寫(xiě)1,其它位寫(xiě)0,但要注意由于第4位保留,因此不要試圖向第4位寫(xiě)1,可能會(huì )導致不可預料的結果。
2.SRCPND(可能多位同時(shí)為1),方法:向要清0的位寫(xiě)1,其它位寫(xiě)0。
3.INTPND,方法:向其寫(xiě)本身的數據(即INTPND=INTPND)。
評論