中斷-20132014-2_第1頁
中斷-20132014-2_第2頁
中斷-20132014-2_第3頁
中斷-20132014-2_第4頁
中斷-20132014-2_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 中斷與異常中斷與異常中斷的基本知識(shí)中斷的分類中斷的順序中斷的控制寄存器中斷的源代碼分析中斷的基本概念n硬中斷即和硬件相關(guān)的中斷也就是通常意義上的“中斷處理程序”,它是直接處理由硬件發(fā)過來的中斷信號(hào)的。當(dāng)某個(gè)設(shè)備發(fā)出中斷請(qǐng)求時(shí),CPU停止正在執(zhí)行的指令,轉(zhuǎn)而跳到包括中斷處理代碼或者包括指向中斷處理代碼的轉(zhuǎn)移指令所在的內(nèi)存區(qū)域。這些代碼一般在CPU的中斷方式下運(yùn)行。就回去自己驅(qū)動(dòng)的設(shè)備上去看看設(shè)備的狀態(tài)寄存器以了解發(fā)生了什么事情,并進(jìn)行相應(yīng)的操作。當(dāng)中斷處理完畢以后,CPU將恢復(fù)到以前的狀態(tài),繼續(xù)執(zhí)行中斷處理前正在執(zhí)行的指令。n中斷的種類:中斷的種類:n中斷:n外部可屏蔽中斷n外部非屏蔽中斷n異

2、常:不使用中斷控制器,不能被屏蔽n故障n陷阱nS3C2440A 中的中斷控制器接受來自 60個(gè)中斷源的請(qǐng)求。提供這些中斷源的是內(nèi)部外設(shè),如DMA控制器、UART、IIC 等等。在這些中斷源中,UARTn、AC97 和EINTn 中斷對(duì)于中斷控制器而言是“或”關(guān)系。 n當(dāng)從內(nèi)部外設(shè)和外部中斷請(qǐng)求引腳收到多個(gè)中斷請(qǐng)求時(shí),中斷控制器在仲裁步驟后請(qǐng)求 ARM920T 內(nèi)核的 FIQ或IRQ 。 n仲裁步驟由硬件優(yōu)先級(jí)邏輯決定并且寫入結(jié)果到幫助用戶通告是各種中斷源中的哪個(gè)中斷發(fā)生了的中斷掛起寄存器中。中斷源n中斷控制器支持 60個(gè)中斷源,如表所示。n參考S3C2440中文手冊(cè) P14-3中斷控制器的操作

3、n程序狀態(tài)寄存器(PSR)n中斷模式:FIQ和IRQ,所有中斷源在中斷請(qǐng)求時(shí)決定使用哪種類型。n中斷掛起寄存器SRCPND、INTPND中斷控制器的操作-PSRn程序狀態(tài)寄存器(PSR)的F 位和I 位 如果ARM920T CPU中的PSR的F 位被置位為 1,CPU不會(huì)接受來自中斷控制器的快中斷請(qǐng)求(FIQ )。同樣的如果 PSR的I 位被置位為 1 ,CPU不會(huì)接受來自中斷控制器的中斷請(qǐng)求(IRQ )。因此,中斷控制器可以通過清除PSR的F 位和 I 位為 0 并且設(shè)置 INTMSK 的相應(yīng)位為 0 來接收中斷。中斷掛起寄存器(SRCPNDINTPND)n3C2440A 有兩個(gè)中斷掛起寄存

4、器:源掛起寄存器(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ū)㈤_始。SRCPND和INTPN D 寄存器可以被讀取和寫入,因此服務(wù)程序必須首先通過寫 1 到SRCPND寄存器的相應(yīng)位來清除掛起狀態(tài)并且通過相同方法來清除

5、 INTPND 寄存器中掛起狀態(tài)。中斷屏蔽寄存器(INTMSK)n此寄存器表明如果中斷相應(yīng)的屏蔽位被置位為 1 則禁止該中斷。如果某個(gè) INTMSK 的中斷屏蔽位為 0,將正常服務(wù)中斷。如果 INTMSK 的中斷屏蔽位為 1 并且產(chǎn)生了中斷,將置位源掛起位。中斷優(yōu)先級(jí)n每個(gè)仲裁器可以處理基于 1 位仲裁器模式控制(ARB_MODE)和選擇控制信號(hào)(ARB_SEL)的2 位的6 個(gè)中斷請(qǐng)求;n參考 中文手冊(cè) P14-5中斷控制器特殊寄存器n此處中斷控制器中有 5 個(gè)控制寄存器:源掛起寄存器、中斷模式寄存器、屏蔽寄存器、優(yōu)先級(jí)寄存器和中斷掛起寄存器。 n所有來自中斷源的中斷請(qǐng)求首先被記錄到源掛起寄

6、存器中?;谥袛嗄J郊拇嫫?,它們被分配到 2 個(gè)組中,包括快中斷請(qǐng)求(FIQ )和中斷請(qǐng)求(IRQ )。IRQ 的多仲裁過程是基于優(yōu)先級(jí)寄存器。源掛起(SRCPND)寄存器n SRCPND寄存器由 32位組成,其每一位都涉及一個(gè)中斷源。如果中斷源產(chǎn)生了中斷則相應(yīng)的位被設(shè)置為 1 并且等待中斷服務(wù)。因此此寄存器指示出是哪個(gè)中斷源正在等待請(qǐng)求服務(wù)。注意 SRCPND寄存器的每一位都是由中斷源自動(dòng)置位,其不顧 INTMASK 寄存器中的屏蔽位。另外 SRCPND寄存器不受中斷控制器的優(yōu)先級(jí)邏輯的影響。 n 源掛起(SRCPND)寄存器n 在指定中斷源的中斷服務(wù)程序中,必須通過清除 SRCPND寄存器

7、的相應(yīng)位來正確的獲得來自相同源的中斷請(qǐng)求。如果從 ISR 中返回并且未清除相應(yīng)位,則中斷控制器的操作就好像其它中斷請(qǐng)求已經(jīng)從同一個(gè)源進(jìn)入了。換句話說,如果 SRCPND寄存器的指定位被設(shè)置為 1,其通常被認(rèn)作一個(gè)有效中斷請(qǐng)求正在等待服務(wù)。 清除相應(yīng)位的時(shí)間依賴于用戶的需要。如果希望收到來自相同冤源的其它有效請(qǐng)求,則應(yīng)該首先清除相應(yīng)位,并且接著使能中斷。 n 可以通過寫入一個(gè)數(shù)據(jù)到此寄存器來清除 SRCPND寄存器的指定位。其只清除那些數(shù)據(jù)中被設(shè)置為 1 的相應(yīng)位置的 SRCPND位。那些數(shù)據(jù)中被設(shè)置為 0 的相應(yīng)位置的位保持不變。n具體值可參考S3C2440中文手冊(cè) P14-6中斷模式寄存器n

8、此寄存器由 32位組成,其每一位都都涉及一個(gè)中斷源。如果某個(gè)指定為被設(shè)置為 1,則在 FIQ(快中斷)模式中處理相應(yīng)中斷。否則則在 IRQ 模式中處理。中斷屏蔽(INTMSK)寄存器n此寄存器由 32位組成,其每一位都都涉及一個(gè)中斷源。如果某個(gè)指定為被設(shè)置為 1,則CPU不會(huì)去服務(wù)來自相應(yīng)中斷源(請(qǐng)注意即使在這種情況中,SRCPND寄存器的相應(yīng)位也設(shè)置為 1 )的中斷請(qǐng)求。如果屏蔽位為 0,則可以服務(wù)中斷請(qǐng)求。 優(yōu)先級(jí)寄存器中斷掛起(INTPND )寄存器n中斷掛起寄存器中 32位的每一位都表明了是否相應(yīng)未屏蔽并且正在等待中斷服務(wù)的中斷請(qǐng)求具有最高的優(yōu)先級(jí)。當(dāng)INTPND 寄存器在優(yōu)先級(jí)邏輯后

9、被定位了,只有1 位可以設(shè)置為 1 并且產(chǎn)生中斷請(qǐng)求 IRQ 給CPU。IRQ 的中斷服務(wù)程序中可以讀取此寄存器來決定服務(wù) 32個(gè)中斷源的哪個(gè)源。 n就如SRCPND寄存器,必須在中斷服務(wù)程序中清除了 SRCPND寄存器后清除此寄存器。可以通過寫入數(shù)據(jù)到此寄存器中來清除 INTPND 寄存器的指定位。只會(huì)清除數(shù)據(jù)中設(shè)置為 1 的相應(yīng) INTPND 寄存器位的位置。數(shù)據(jù)中設(shè)置為 0 的相應(yīng)位的位置則保持不變。n總之,用于判斷哪個(gè)未被屏蔽中斷源發(fā)生了中斷中斷偏移(INTOFFSET )寄存器n中斷偏移寄存器中的值表明了是哪個(gè) IRQ 模式的中斷請(qǐng)求在 INTPND 寄存器中。此位可以通過清除 SR

10、CPND和INTPND ,實(shí)現(xiàn)自動(dòng)清除。次級(jí)源掛起(SUBSRCPND)寄存器n可以通過寫入數(shù)據(jù)到此寄存器來清除SUBSRCPND 寄存器的指定位。只有數(shù)據(jù)中那些被設(shè)置為1 的相應(yīng)SUBSRCPND寄存器的位的位置才能被清除。數(shù)據(jù)中那些被設(shè)置為 0 的相應(yīng)位的位置則保持不變中斷次級(jí)屏蔽(INTSUBMSK )寄存器 n此寄存器有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)求。 中斷源代碼n#include n#include

11、n#include n#include n#include n#include n#include n#include n#include n#include n#include nvoid testirq_interrupt(int,void *,struct pt_regs *);nstatic int testirq_init(void);n/*/n/Interrupt Functionnvoid testirq_interrupt(int irq,void *d,struct pt_regs *regs)nn/*clear interrupt register for EINT5*/n

12、 SRCPND &= (0 x00000010); /bit4n INTPND = INTPND;n EINTPEND &= (0 x00000020); /bit5n printk(Entered an interrupt! Beginning interrupt service!n);n nn/*/n/Initialize Functionnstatic int _init testirq_init(void)nnstatic int result;nunsigned long gpfup;n/long pullup;n set_external_irq(IRQ_EINT5

13、, EXT_FALLING_EDGE, GPIO_PULLUP_DIS);nngpfup = ioremap(0 x56000058,4); /pull_up for port fn(*(volatile unsigned long *)gpfup) = 0;nn disable_irq(IRQ_EINT5);n enable_irq(IRQ_EINT5);nresult=request_irq(IRQ_EINT5,&testirq_interrupt,SA_INTERRUPT,testirq,NULL);nif (result)nnprintk(Cant get assigned irq %d,resul

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論