中斷寄存器

時間:2023-05-01 11:03:09 資料 我要投稿
  • 相關(guān)推薦

中斷寄存器

一.

S3C2440A 中的中斷控制器接受來自60 個中斷源的請求。

提供這些第一文庫網(wǎng)中斷源的是內(nèi)部外設(shè),如DMA 控制器、UART、IIC 等等。在這些中斷源中,UARTn、AC97 和EINTn 中斷對于中斷控制器而言是“或”關(guān)系。

當(dāng)從內(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 的相應(yīng)位為0 來接收中斷。

.中斷控制器特殊寄存器

此處中斷控制器中有5 個控制寄存器:源掛起寄存器、中斷模式寄存器、屏蔽寄存器、優(yōu)先級寄存器和中斷掛

起寄存器。

所有來自中斷源的中斷請求首先被記錄到源掛起寄存器中;谥袛嗄J郊拇嫫鳎鼈儽环峙涞2 個組中,包

括快中斷請求(FIQ)和中斷請求(IRQ)。IRQ 的多仲裁過程是基于優(yōu)先級寄存器。

三.中斷掛起寄存器

S3C2440A 有兩個中斷掛起寄存器:源掛起寄存器(SRCPND)和中斷掛起寄存器(INTPND)。這些掛起寄存器表明一個中斷請求是否為掛起。

當(dāng)中斷源請求中斷服務(wù),SRCPND 寄存器的相應(yīng)位被置位為1,并且同時在仲裁步驟后INTPND 寄存器僅有1 位自動置位為1。如果屏蔽了中斷,則SRCPND 寄存器的相應(yīng)位被置位為1。這

并不會引起INTPND 寄存器的位的改變。

當(dāng)INTPND 寄存器的掛起位為置位,每當(dāng)I 標(biāo)志或F 標(biāo)志被清除為0 中斷服務(wù)程序?qū)㈤_始。

SRCPND 和INTPND 寄存器可以被讀取和寫入,因此服務(wù)程序必須首先通過寫1 到SRCPND寄存器的相應(yīng)位來清除掛起狀態(tài)并且通過相同方法來清除INTPND 寄存器中掛起狀態(tài)。

四.中斷屏蔽寄存器

此寄存器表明如果中斷相應(yīng)的屏蔽位被置位為1 則禁止該中斷。如果某個INTMSK 的中斷屏蔽位為0,將正常服務(wù)中斷。如果INTMSK 的中斷屏蔽位為1 并且產(chǎn)生了中斷,將置位源掛起位。

源掛起(SRCPND)寄存器

SRCPND 寄存器由32 位組成,其每一位都涉及一個中斷源。如果中斷源產(chǎn)生了中斷則相應(yīng)的位被設(shè)置為1 并且等待中斷服務(wù)。因此此寄存器指示出是哪個中斷源正在等待請求服務(wù)。注意SRCPND 寄存器的每一位都是由中斷源自動置位,其不顧INTMASK 寄存器中的屏蔽位。另外SRCPND 寄存器不受中斷控制器的優(yōu)先級邏輯的影響。在指定中斷源的中斷服務(wù)程序中,必須通過清除SRCPND 寄存器的相應(yīng)位來正確的獲得來自相同源的中斷請求。如果從ISR 中返回并且未清除相應(yīng)位,則中斷控制器的操作就好像其它中斷請求已經(jīng)從同一個源進(jìn)入了。換句話說,如果SRCPND 寄存器的指定位被設(shè)置為1,其通常被認(rèn)作一個有效中斷請求正在等待服務(wù)。清除相應(yīng)位的時間依賴于用戶的需要。如果希望收到來自相同源的其它有效請求,則應(yīng)該首先清除相應(yīng)位

并且接著使能中斷。

可以通過寫入一個數(shù)據(jù)到此寄存器來清除SRCPND 寄存器的指定位。其只清除那些數(shù)據(jù)中被設(shè)置為1 的相應(yīng)位置的SRCPND 位。那些數(shù)據(jù)中被設(shè)置為0 的相應(yīng)位置的位保持不變。

中斷模式(INTMOD)寄存器

此寄存器由32 位組成,其每一位都都涉及一個中斷源。如果某個指定位被設(shè)置為1,則在FIQ(快中斷)模式

中處理相應(yīng)中斷。否則則在IRQ 模式中處理。特別注意,只能有一個中斷設(shè)置為快速中斷模式。

中斷屏蔽(INTMSK)寄存器

此寄存器由32 位組成,其每一位都涉及一個中斷源。如果某個指定為被設(shè)置為1,則CPU 不會去服務(wù)來自

相應(yīng)中斷源(請注意即使在這種情況中,SRCPND 寄存器的相應(yīng)位也設(shè)置為1)的中斷請求。如果屏蔽位為0,則可以服務(wù)中斷請求。

中斷掛起(INTPND)寄存器

中斷掛起寄存器中32 位的每一位都表明了是否相應(yīng)未屏蔽并且正在等待中斷服務(wù)的中斷請求具有最高的優(yōu)先

級。當(dāng)INTPND 寄存器在優(yōu)先級邏輯后被定位了,只有1 位可以設(shè)置為1 并且產(chǎn)生中斷請求IRQ 給CPU。IRQ 的

中斷服務(wù)程序中可以讀取此寄存器來決定服務(wù)32 個中斷源的哪個源。

就如SRCPND 寄存器,必須在中斷服務(wù)程序中清除了SRCPND 寄存器后清除此寄存器。可以通過寫入數(shù)據(jù)

到此寄存器中來清除INTPND 寄存器的指定位。只會清除數(shù)據(jù)中設(shè)置為1 的相應(yīng)INTPND 寄存器位的位置。數(shù)據(jù)

中設(shè)置為0 的相應(yīng)位的位置則保持不變。特別注意:在清除源掛起寄存器和中斷掛起寄存器時,是向寄存器中的相應(yīng)位寫1,不是寫0,這是由寄存器的硬件結(jié)構(gòu)決定的。

次級源掛起(SUBSRCPND)寄存器

可以通過寫入數(shù)據(jù)到此寄存器來清除SUBSRCPND 寄存器的指定位。只有數(shù)據(jù)中那些被設(shè)置為1 的相應(yīng)

SUBSRCPND 寄存器的位的位置才能被清除。數(shù)據(jù)中那些被設(shè)置為0 的相應(yīng)位的位置則保

持不變。

中斷次級屏蔽(INTSUBMSK)寄存器

此寄存器有11 位,其每一位都與一個中斷源相聯(lián)系。如果某個指定位被設(shè)置為1,則相應(yīng)中斷源的中斷請求

不會被CPU 所服務(wù)(請注意即使在這種情況中,SRCPND 寄存器的相應(yīng)位也設(shè)置為1)。如果屏蔽位為0,則可以

服務(wù)中斷請求。

還有就是清除中斷時有子中斷的要先清除子中斷位,再清除中斷位,有子中斷的要設(shè)置子中斷屏蔽寄存器打開子中斷。

中斷順序

1.設(shè)置好中斷模式以及相關(guān)的棧,可看三星提供的初始化文件。

2.在異常向量表設(shè)置好相應(yīng)的跳轉(zhuǎn)指令。那么當(dāng)產(chǎn)生中斷的時候,PC指針就會跳到該向量表處,那么就會執(zhí)行跳轉(zhuǎn)指令到相應(yīng)的服務(wù)程序入口。

3.在設(shè)置異常模式下CPU模式和相關(guān)的棧之后(三星的初始化文件),就可以用跳轉(zhuǎn)指令,跳到我們的C語言部分。

4.在C語言部分,就可以寫我們的程序啦:

中斷——>次級中斷源掛起寄存器——>*中斷次級屏蔽寄存器——>源掛起寄存器——>*中斷屏蔽寄存器——>*中斷模式控制寄存器——>*(1)優(yōu)先級寄存器——>中斷掛起寄存器——>IRQ

參考:

書籍:S3C2440手冊