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