- 相關(guān)推薦
中斷寄存器
一.
S3C2440A 中的中斷控制器接受來自60 個中斷源的請求。
提供這些第一文庫網(wǎng)中斷源的是內(nèi)部外設(shè),如DMA 控制器、UART、IIC 等等。在這些中斷源中,UARTn、AC97 和EINTn 中斷對于中斷控制器而言是“或”關(guān)系。
當從內(nèi)部外設(shè)和外部中斷請求引腳收到多個中斷請求時,中斷控制器在仲裁步驟后請求ARM920T 內(nèi)核的FIQ或IRQ。仲裁步驟由硬件優(yōu)先級邏輯決定并且寫入結(jié)果到幫助用戶通告是各種中斷源中的哪個中斷發(fā)生了的中斷掛起寄存器中
二.中斷控制器操作
用來選擇FIQ或IRQ
程序狀態(tài)寄存器(PSR)的F 位和I 位
如果ARM920T CPU 中的PSR 的F 位被置位為1,CPU 不會接受來自中斷控制器的快中斷請求(FIQ)。同樣的如果PSR 的I 位被置位為1,CPU 不會接受來自中斷控制器的中斷請求(IRQ)。因此,中斷控制器可以通過清除PSR 的F 位和I 位為0 并且設(shè)置INTMSK 的相應位為0 來接收中斷。
.中斷控制器特殊寄存器
此處中斷控制器中有5 個控制寄存器:源掛起寄存器、中斷模式寄存器、屏蔽寄存器、優(yōu)先級寄存器和中斷掛
起寄存器。
所有來自中斷源的中斷請求首先被記錄到源掛起寄存器中;谥袛嗄J郊拇嫫鳎鼈儽环峙涞2 個組中,包
括快中斷請求(FIQ)和中斷請求(IRQ)。IRQ 的多仲裁過程是基于優(yōu)先級寄存器。
三.中斷掛起寄存器
S3C2440A 有兩個中斷掛起寄存器:源掛起寄存器(SRCPND)和中斷掛起寄存器(INTPND)。這些掛起寄存器表明一個中斷請求是否為掛起。
當中斷源請求中斷服務(wù),SRCPND 寄存器的相應位被置位為1,并且同時在仲裁步驟后INTPND 寄存器僅有1 位自動置位為1。如果屏蔽了中斷,則SRCPND 寄存器的相應位被置位為1。這
并不會引起INTPND 寄存器的位的改變。
當INTPND 寄存器的掛起位為置位,每當I 標志或F 標志被清除為0 中斷服務(wù)程序?qū)㈤_始。
SRCPND 和INTPND 寄存器可以被讀取和寫入,因此服務(wù)程序必須首先通過寫1 到SRCPND寄存器的相應位來清除掛起狀態(tài)并且通過相同方法來清除INTPND 寄存器中掛起狀態(tài)。
四.中斷屏蔽寄存器
此寄存器表明如果中斷相應的屏蔽位被置位為1 則禁止該中斷。如果某個INTMSK 的中斷屏蔽位為0,將正常服務(wù)中斷。如果INTMSK 的中斷屏蔽位為1 并且產(chǎn)生了中斷,將置位源掛起位。
源掛起(SRCPND)寄存器
SRCPND 寄存器由32 位組成,其每一位都涉及一個中斷源。如果中斷源產(chǎn)生了中斷則相應的位被設(shè)置為1 并且等待中斷服務(wù)。因此此寄存器指示出是哪個中斷源正在等待請求服務(wù)。注意SRCPND 寄存器的每一位都是由中斷源自動置位,其不顧INTMASK 寄存器中的屏蔽位。另外SRCPND 寄存器不受中斷控制器的優(yōu)先級邏輯的影響。在指定中斷源的中斷服務(wù)程序中,必須通過清除SRCPND 寄存器的相應位來正確的獲得來自相同源的中斷請求。如果從ISR 中返回并且未清除相應位,則中斷控制器的操作就好像其它中斷請求已經(jīng)從同一個源進入了。換句話說,如果SRCPND 寄存器的指定位被設(shè)置為1,其通常被認作一個有效中斷請求正在等待服務(wù)。清除相應位的時間依賴于用戶的需要。如果希望收到來自相同源的其它有效請求,則應該首先清除相應位
并且接著使能中斷。
可以通過寫入一個數(shù)據(jù)到此寄存器來清除SRCPND 寄存器的指定位。其只清除那些數(shù)據(jù)中被設(shè)置為1 的相應位置的SRCPND 位。那些數(shù)據(jù)中被設(shè)置為0 的相應位置的位保持不變。
中斷模式(INTMOD)寄存器
此寄存器由32 位組成,其每一位都都涉及一個中斷源。如果某個指定位被設(shè)置為1,則在FIQ(快中斷)模式
中處理相應中斷。否則則在IRQ 模式中處理。特別注意,只能有一個中斷設(shè)置為快速中斷模式。
中斷屏蔽(INTMSK)寄存器
此寄存器由32 位組成,其每一位都涉及一個中斷源。如果某個指定為被設(shè)置為1,則CPU 不會去服務(wù)來自
相應中斷源(請注意即使在這種情況中,SRCPND 寄存器的相應位也設(shè)置為1)的中斷請求。如果屏蔽位為0,則可以服務(wù)中斷請求。
中斷掛起(INTPND)寄存器
中斷掛起寄存器中32 位的每一位都表明了是否相應未屏蔽并且正在等待中斷服務(wù)的中斷請求具有最高的優(yōu)先
級。當INTPND 寄存器在優(yōu)先級邏輯后被定位了,只有1 位可以設(shè)置為1 并且產(chǎn)生中斷請求IRQ 給CPU。IRQ 的
中斷服務(wù)程序中可以讀取此寄存器來決定服務(wù)32 個中斷源的哪個源。
就如SRCPND 寄存器,必須在中斷服務(wù)程序中清除了SRCPND 寄存器后清除此寄存器。可以通過寫入數(shù)據(jù)
到此寄存器中來清除INTPND 寄存器的指定位。只會清除數(shù)據(jù)中設(shè)置為1 的相應INTPND 寄存器位的位置。數(shù)據(jù)
中設(shè)置為0 的相應位的位置則保持不變。特別注意:在清除源掛起寄存器和中斷掛起寄存器時,是向寄存器中的相應位寫1,不是寫0,這是由寄存器的硬件結(jié)構(gòu)決定的。
次級源掛起(SUBSRCPND)寄存器
可以通過寫入數(shù)據(jù)到此寄存器來清除SUBSRCPND 寄存器的指定位。只有數(shù)據(jù)中那些被設(shè)置為1 的相應
SUBSRCPND 寄存器的位的位置才能被清除。數(shù)據(jù)中那些被設(shè)置為0 的相應位的位置則保
持不變。
中斷次級屏蔽(INTSUBMSK)寄存器
此寄存器有11 位,其每一位都與一個中斷源相聯(lián)系。如果某個指定位被設(shè)置為1,則相應中斷源的中斷請求
不會被CPU 所服務(wù)(請注意即使在這種情況中,SRCPND 寄存器的相應位也設(shè)置為1)。如果屏蔽位為0,則可以
服務(wù)中斷請求。
還有就是清除中斷時有子中斷的要先清除子中斷位,再清除中斷位,有子中斷的要設(shè)置子中斷屏蔽寄存器打開子中斷。
中斷順序
1.設(shè)置好中斷模式以及相關(guān)的棧,可看三星提供的初始化文件。
2.在異常向量表設(shè)置好相應的跳轉(zhuǎn)指令。那么當產(chǎn)生中斷的時候,PC指針就會跳到該向量表處,那么就會執(zhí)行跳轉(zhuǎn)指令到相應的服務(wù)程序入口。
3.在設(shè)置異常模式下CPU模式和相關(guān)的棧之后(三星的初始化文件),就可以用跳轉(zhuǎn)指令,跳到我們的C語言部分。
4.在C語言部分,就可以寫我們的程序啦:
中斷——>次級中斷源掛起寄存器——>*中斷次級屏蔽寄存器——>源掛起寄存器——>*中斷屏蔽寄存器——>*中斷模式控制寄存器——>*(1)優(yōu)先級寄存器——>中斷掛起寄存器——>IRQ
參考:
書籍:S3C2440手冊