




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、專題四:S3C2440中斷系統(tǒng) 專題四:S3C2440中斷系統(tǒng)主要內(nèi)容:主要內(nèi)容: 一、概述及基本概念一、概述及基本概念 二、二、 S3C2440中斷系統(tǒng)中斷系統(tǒng) 三、應(yīng)用部分三、應(yīng)用部分 接口電路:中斷應(yīng)用實(shí)例接口電路:中斷應(yīng)用實(shí)例 C程序:中斷編程步驟程序:中斷編程步驟 Linux:中斷服務(wù)函數(shù)及其驅(qū)動(dòng)程序:中斷服務(wù)函數(shù)及其驅(qū)動(dòng)程序 專題四:S3C2440中斷系統(tǒng) 一、概述及其基本概念當(dāng)計(jì)算機(jī)用于實(shí)時(shí)控制時(shí),中斷是一個(gè)十分重要的功能?,F(xiàn)場(chǎng)的各個(gè)參數(shù)、信息,需要的話可在任何時(shí)候發(fā)出中斷申請(qǐng),要求CPU處理;CPU就可以馬上響應(yīng)(若中斷是開放的話)加以處理。這樣的及時(shí)處理在查詢的工作方式是做不
2、到的。 計(jì)算機(jī)在運(yùn)行過程中,往往會(huì)出現(xiàn)事先預(yù)料不到的情況,或出現(xiàn)一些故障:如電源突跳,存儲(chǔ)出錯(cuò),運(yùn)算溢出等等。計(jì)算機(jī)就可以利用中斷系統(tǒng)自行處理,而不必停機(jī)或報(bào)告工作人員。專題四:S3C2440中斷系統(tǒng) 2、中斷、中斷 指在計(jì)算機(jī)執(zhí)行期間,系統(tǒng)內(nèi)發(fā)生任何非尋常的或非預(yù)期緊急需處理事件,使得CPU暫時(shí)中斷當(dāng)前正在執(zhí)行的程序而轉(zhuǎn)去執(zhí)行相應(yīng)的時(shí)間處理程序。待處理完畢后又返回原來(lái)被中斷處繼續(xù)執(zhí)行或調(diào)度新的進(jìn)程執(zhí)行的過程。專題四:S3C2440中斷系統(tǒng) 3、中斷響應(yīng)中斷響應(yīng) 中斷響應(yīng)是當(dāng)中央處理機(jī)發(fā)現(xiàn)已有中斷請(qǐng)求時(shí),中止,保存現(xiàn)行程序執(zhí)行,并自動(dòng)引出中斷處理程序的過程。中斷響應(yīng)是解決中斷的發(fā)現(xiàn)和接收問題的
3、過程,是由中斷裝置完成的。中斷響應(yīng)是硬件對(duì)中斷請(qǐng)求作出響應(yīng)的過程,包括識(shí)別中斷源,保留現(xiàn)場(chǎng),引出中斷處理程序等過程。 CPU在當(dāng)前指令執(zhí)行結(jié)束時(shí),響應(yīng)中斷,進(jìn)入中斷的響應(yīng)周期; 發(fā)出二個(gè)中斷回答信號(hào)INTA完成一個(gè)中斷響應(yīng)周期; 進(jìn)行斷點(diǎn)及標(biāo)志保存如:將段地址(CS),偏移地址(IP)標(biāo)志FR以及壓入堆棧。 讀取中斷類型號(hào),找到中斷源; 裝入中斷服務(wù)程序的入口地址(CS,IP)專題四:S3C2440中斷系統(tǒng) 4、中斷源:中斷源:引起中斷的原因或者說發(fā)出中斷請(qǐng)求的來(lái)源叫做中斷源。5、優(yōu)先級(jí)優(yōu)先級(jí):為使系統(tǒng)能及時(shí)響應(yīng)并處理發(fā)生的所有中斷,系統(tǒng)根據(jù)引起中斷事件的重要性和緊迫程度,硬件將中斷源分為若干
4、個(gè)級(jí)別,稱作中斷優(yōu)先級(jí)。 中斷優(yōu)先級(jí)越高, 則響應(yīng)優(yōu)先權(quán)就越高。當(dāng)CPU正在執(zhí)行中斷服務(wù)程序時(shí), 又有中斷優(yōu)先級(jí)更高的中斷申請(qǐng)產(chǎn)生, 這時(shí)CPU就會(huì)暫停當(dāng)前的中斷服務(wù)轉(zhuǎn)而處理高級(jí)中斷申請(qǐng), 待高級(jí)中斷處理程序完畢再返回原中斷程序斷點(diǎn)處繼續(xù)執(zhí)行, 這一過程稱為中斷嵌套。 專題四:S3C2440中斷系統(tǒng) 二、二、 S3C2440中斷系統(tǒng)中斷系統(tǒng)一、一、S3C2440中斷體系結(jié)構(gòu)中斷體系結(jié)構(gòu) ARM體系CPU的7種工作模式1、用戶模式(usr):ARM處理器正常的程序執(zhí)行狀態(tài)2、快速中斷模式(fiq):用于高速數(shù)據(jù)傳輸或通道處理3、中斷模式(irq):用于通用的中斷處理4、管理模式(svc):操作系
5、統(tǒng)使用的保護(hù)模式5、數(shù)據(jù)訪問終止模式(abt):當(dāng)數(shù)據(jù)或指令預(yù)取終止時(shí)進(jìn)入該模式,可用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)6、系統(tǒng)模式(sys):運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)7、未定義指令中止模式(und):當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持硬件協(xié)處理器的軟件仿真 除用戶模式外,其他6種工作模式都屬于特權(quán)模式,大多數(shù)程序運(yùn)行于用戶模式,進(jìn)入特權(quán)模式是為了處理中斷、異常,或者訪問被保護(hù)的系統(tǒng)資源專題四:S3C2440中斷系統(tǒng) 中斷是CPU處理外部突發(fā)事件的一個(gè)重要技術(shù)。根據(jù)中斷源的不同,可以把中斷分為硬件中斷和軟件中斷兩大類。 硬件中斷硬件中斷是由處理器自身的硬件系統(tǒng)或著外部硬件部件觸發(fā)引起的中斷類型,硬
6、件中斷又可以分為外部中斷和內(nèi)部中斷兩類: 外部中斷外部中斷一般是指由外設(shè)發(fā)出的中斷請(qǐng)求,如:按鍵中斷、串口中斷、定時(shí)器中斷等。外部中斷是可以屏蔽的中斷,也就是說,利用中斷控制器可以屏蔽這些外部設(shè)備的中斷請(qǐng)求,S3C2440共有24個(gè)外部中斷EINT0-EINT24。 內(nèi)部中斷內(nèi)部中斷是指因硬件出錯(cuò)(如突然掉電、奇偶校驗(yàn)錯(cuò)等)或運(yùn)算出錯(cuò)(除數(shù)為零、運(yùn)算 溢出、單步中斷等)所引起的中斷,內(nèi)部中斷是不可屏蔽的中斷,S3C2440共有35個(gè)內(nèi)部中斷。 軟件中斷軟件中斷與硬件中斷不一樣,它不是由硬件觸發(fā)的,而是由軟件調(diào)用系統(tǒng)提供的一個(gè)指令(SWI)來(lái)觸發(fā)的中斷行為,是程序本身有意識(shí)的引發(fā)的中斷行為,由于
7、在用戶模式下,程序?qū)μ幚砥髻Y源的訪問會(huì)受到一些限制,因此,需要采用軟中斷的方式將處理器工作模式切到異常模式下訪問受限資源,因此軟中斷一般都被用于實(shí)現(xiàn)特殊系統(tǒng)調(diào)用功能提供給軟件系統(tǒng)使用。專題四:S3C2440中斷系統(tǒng) 三、中斷源判定三、中斷源判定 S3C2440中斷源如下頁(yè)表格所示,支持多達(dá)60個(gè)中斷源。次級(jí)中斷源與(主)中斷源共享一條中斷線。多個(gè)中斷源共享一條中斷線的需要在中斷服務(wù)子程序中判斷是哪一個(gè)中斷源發(fā)出的中斷。 S3C2440對(duì)60種中斷源的管理是按層級(jí)分的。如下圖所示(三級(jí)模式):專題四:S3C2440中斷系統(tǒng) 專題四:S3C2440中斷系統(tǒng) 3、中斷次級(jí)源中斷次級(jí)源專題四:S3C2
8、440中斷系統(tǒng) 四、中斷運(yùn)行控制四、中斷運(yùn)行控制 仲裁步驟由硬件優(yōu)先級(jí)邏輯決定并且寫入結(jié)果到幫助用戶通告是各種中斷源中的哪個(gè)中斷發(fā)生了的中斷掛起寄存器中。中斷處理框圖如圖所示。 如果ARM920T CPU中的PSR的F位被置位為1,CPU不會(huì)接收來(lái)自中斷控制器的快中斷請(qǐng)求(FIQ)。同樣的如果PSR的I位被置位為1,CPU不會(huì)接收來(lái)自中斷控制器的中斷請(qǐng)求(IRQ)。因此,中斷控制器可以通過清除PSR的F位和I位為0并且設(shè)置INTMSK的相應(yīng)位為0來(lái)接收中斷。 ARM920T有兩種中斷模式的類型:FIQ或IRQ,所有中斷源在中斷請(qǐng)求時(shí)決定使用哪種類型。專題四:S3C2440中斷系統(tǒng) 五、中斷優(yōu)先
9、級(jí)設(shè)定五、中斷優(yōu)先級(jí)設(shè)定每個(gè)仲裁器可以處理基于 1 位仲裁器模式控制(ARB_MODE)和選擇控制信號(hào)(ARB_SEL)的 2 位的 6 個(gè)中斷請(qǐng)求,如下: 如果 ARB_SEL 位為 00b,優(yōu)先級(jí)順序?yàn)?REQ0、REQ1、REQ2、REQ3、REQ4 和 REQ5。 如果 ARB_SEL 位為 01b,優(yōu)先級(jí)順序?yàn)?REQ0、REQ2、REQ3、REQ4、REQ1 和 REQ5。 如果 ARB_SEL 位為 10b,優(yōu)先級(jí)順序?yàn)?REQ0、REQ3、REQ4、REQ1、REQ2 和 REQ5。 如果 ARB_SEL 位為 11b,優(yōu)先級(jí)順序?yàn)?REQ0、REQ4、REQ1、REQ2、RE
10、Q3 和 REQ5。請(qǐng)注意仲裁器的請(qǐng)注意仲裁器的 REQ0 的優(yōu)先級(jí)總是最高并且的優(yōu)先級(jí)總是最高并且 REQ5 的優(yōu)先級(jí)總是最低。此外,通過改變的優(yōu)先級(jí)總是最低。此外,通過改變 ARB_SEL 位,可以輪換位,可以輪換 REQ1 到到 REQ4 的順序。的順序。此處,如果 ARB_MODE 位被設(shè)置為 0,ARB_SEL 位不能自動(dòng)改變,這使得仲裁器操作在固定優(yōu)先級(jí)模式中。 (注意即使在此模式中,也不能通過手動(dòng)改變 ARB_SEL 位來(lái)重新配制優(yōu)先級(jí)) 。另一方面,如果 ARB_MODE 為1,ARB_SEL 位會(huì)被輪換方式而改變,例如如果 REQ1 被服務(wù)ARB_SEL 位被自動(dòng)改為 01b
11、 以便 REQ1 進(jìn)入到最低的優(yōu)先級(jí)。ARB_SEL 改變的詳細(xì)結(jié)果如下: 如果 REQ0 或 REQ5 被服務(wù),ARB_SEL 位不會(huì)改變 如果 REQ1 被服務(wù),ARB_SEL 位被改為 01b。 如果 REQ2 被服務(wù),ARB_SEL 位被改為 10b。 如果 REQ3 被服務(wù),ARB_SEL 位被改為 11b。 如果 REQ4 被服務(wù),ARB_SEL 位被改為 00b。中斷優(yōu)先級(jí)產(chǎn)生模塊如下圖所示專題四:S3C2440中斷系統(tǒng) 中斷優(yōu)先級(jí)發(fā)生模塊圖中斷優(yōu)先級(jí)發(fā)生模塊圖專題四:S3C2440中斷系統(tǒng) 六、中斷控制器特殊寄存器六、中斷控制器特殊寄存器 此處中斷控制器中有 5 個(gè)控制寄存器:
12、源掛起寄存器、中斷模式寄存器、屏蔽寄存器、優(yōu)先級(jí)寄存器和中斷掛起寄存器。 所有來(lái)自中斷源的中斷請(qǐng)求首先被記錄到源掛起寄存器中?;谥袛嗄J郊拇嫫?,它們被分配到 2 個(gè)組中,包括快中斷請(qǐng)求(包括快中斷請(qǐng)求(FIQ)和普通中斷請(qǐng)求()和普通中斷請(qǐng)求(IRQ)。)。 IRQ 的多仲裁過程是基于優(yōu)先級(jí)寄存器。源掛起 (SRCPND ) 寄存器SRCPND 寄存器由 32 位組成,其每一位都涉及一個(gè)中斷源。如果中斷源產(chǎn)生了中斷則相應(yīng)的位被設(shè)置為 1 并且等待中斷服務(wù)。因此此寄存器指示出是哪個(gè)中斷源正在等待請(qǐng)求服務(wù)。注意 SRCPND 寄存器的每一位都是由中斷源自動(dòng)置位,其不顧 INTMASK 寄存器中的
13、屏蔽位。另外 SRCPND 寄存器不受中斷控制器的優(yōu)先級(jí)邏輯的影響。 在指定中斷源的中斷服務(wù)程序中,必須通過清除 SRCPND 寄存器的相應(yīng)位來(lái)正確的獲得來(lái)自相同源的中斷請(qǐng)求。如果從 ISR 中返回并且未清除相應(yīng)位,則中斷控制器的操作就好像其它中斷請(qǐng)求已經(jīng)從同一個(gè)源進(jìn)入了。換句話說,如果 SRCPND 寄存器的指定位被設(shè)置為 1,其通常被認(rèn)作一個(gè)有效中斷請(qǐng)求正在等待服務(wù)。 清除相應(yīng)位的時(shí)間依賴于用戶的需要。如果希望收到來(lái)自相同冤源的其它有效請(qǐng)求,則應(yīng)該首先清除相應(yīng)位,并且接著使能中斷??梢酝ㄟ^寫入一個(gè)數(shù)據(jù)到此寄存器來(lái)清除 SRCPND 寄存器的指定位。其只清除那些數(shù)據(jù)中被設(shè)置為 1 的相應(yīng)位置
14、的 SRCPND 位。那些數(shù)據(jù)中被設(shè)置為 0 的相應(yīng)位置的位保持不變。專題四:S3C2440中斷系統(tǒng) 1 1)RCPNDRCPND)寄存器)寄存器 SRCPND SRCPND寄存器由寄存器由3232位組成如位組成如表一表一所示,所示,源掛起(源掛起(S S其每一位都其每一位都涉及一個(gè)中斷源,如涉及一個(gè)中斷源,如表二表二所示。如果中斷源產(chǎn)生了中斷則相應(yīng)的所示。如果中斷源產(chǎn)生了中斷則相應(yīng)的位被設(shè)置為位被設(shè)置為1 1并且等待中斷服務(wù),因此此寄存器指示出是哪個(gè)中并且等待中斷服務(wù),因此此寄存器指示出是哪個(gè)中斷源正在等待請(qǐng)求服務(wù)。斷源正在等待請(qǐng)求服務(wù)。 在指定中斷源的中斷服務(wù)程序中,必須通過清除在指定中斷
15、源的中斷服務(wù)程序中,必須通過清除SRCPNDSRCPND寄存寄存器的相應(yīng)位來(lái)正確地獲得來(lái)自相同源的中斷請(qǐng)求。如果從器的相應(yīng)位來(lái)正確地獲得來(lái)自相同源的中斷請(qǐng)求。如果從ISRISR中中返回并且未清除相應(yīng)位,則中斷控制器的操作就好像其他中斷請(qǐng)返回并且未清除相應(yīng)位,則中斷控制器的操作就好像其他中斷請(qǐng)求已經(jīng)從同一個(gè)源進(jìn)入了。換句話說,如果求已經(jīng)從同一個(gè)源進(jìn)入了。換句話說,如果SRCPNDSRCPND寄存器的指定寄存器的指定位被設(shè)置為位被設(shè)置為1 1,其通常被認(rèn)作一個(gè)有效中斷請(qǐng)求正在等待服務(wù)。,其通常被認(rèn)作一個(gè)有效中斷請(qǐng)求正在等待服務(wù)。清除指定位的方法是通過寫入數(shù)據(jù)到此寄存器中來(lái)清除清除指定位的方法是通過
16、寫入數(shù)據(jù)到此寄存器中來(lái)清除INTPNDINTPND寄寄存器的指定位。在指定位寫存器的指定位。在指定位寫1 1只會(huì)清除數(shù)據(jù)中設(shè)置為只會(huì)清除數(shù)據(jù)中設(shè)置為1 1 的相應(yīng)的相應(yīng)INTPNDINTPND寄存器位的位置。數(shù)據(jù)中設(shè)置為寄存器位的位置。數(shù)據(jù)中設(shè)置為0 0的相應(yīng)位的位置則保持的相應(yīng)位的位置則保持不變。不變。專題四:S3C2440中斷系統(tǒng) 表一表一專題四:S3C2440中斷系統(tǒng) 2)中斷模式寄存器(INTMOD) INTMOD寄存器由32位組成,每一位都都涉及一個(gè)中斷源。如果指定某位為0則表示為IRQ模式中處理;如果某個(gè)指定為被設(shè)置為1,則在FIQ(快中斷)模式中處理相應(yīng)中斷。因此,該寄存器只能有
17、一位為1。3)中斷屏蔽寄存器(INTMSK) 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)求。專題四:S3C2440中斷系統(tǒng) 4 4)中斷優(yōu)先級(jí)寄存器()中斷優(yōu)先級(jí)寄存器(PRIORITYPRIORITY)表表2 2專題四:S3C2440中斷系統(tǒng) 5)中斷掛起寄存器(INTPND) 中斷掛起寄存器中32位的每一位都表明了是否相應(yīng)未屏蔽并且正在等待中斷服務(wù)的中斷請(qǐng)求具有最高的優(yōu)先級(jí)。當(dāng)INTPND寄存器在優(yōu)先級(jí)邏輯后
18、被定位了,只有1位可以設(shè)置為1并且產(chǎn)生中斷請(qǐng)求IRQ給CPU。IRQ的中斷服務(wù)程序中可以讀取此寄存器來(lái)決定服務(wù)32個(gè)中斷源的哪個(gè)源。 就如SRCPND寄存器,必須在中斷服務(wù)程序中清除了SRCPND寄存器后清除此寄存器。可以通過寫入數(shù)據(jù)到此寄存器中來(lái)清除INTPND寄存器的指定位。只會(huì)清除數(shù)據(jù)中設(shè)置為1的相應(yīng)INTPND寄存器位的位置。數(shù)據(jù)中設(shè)置為0的相應(yīng)位的位置則保持不變。6)中斷偏移寄存器(INTOFFSET) 中斷偏移寄存器中的值表明了是哪個(gè)IRQ模式的中斷請(qǐng)求在INTPND寄存器中。此位可以通過清楚SRCPND和INTPND自動(dòng)清除。專題四:S3C2440中斷系統(tǒng) 7)次級(jí)源掛起寄存器(
19、SUBSRCPND,見表4-21) 可以通過寫入數(shù)據(jù)到此寄存器來(lái)清除SUBSRCPND寄存器的指定位。只有數(shù)據(jù)中那些被設(shè)置為1的相應(yīng)SUBSRCPND寄存器位的位置才能被清除。數(shù)據(jù)中那些被設(shè)置為0的相應(yīng)位的位置則保持不變。8)中斷次級(jí)屏蔽寄存器(INTSUBMSK,見表4-22) 此寄存器有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)求。專題四:S3C2440中斷系統(tǒng) 一、中斷向量地址表示例一、中斷向量地址表示例Reset_Handler
20、 ; 復(fù)位處理 0 x0Undef_Handler; 未定義指令處理 0 x4SWI_Handler; SWI指令處理 0 x8PreAbort_Handler; 預(yù)取指令中止處理 0 xCDataAbort_Handler; 數(shù)據(jù)異常處理 0 x10; 保留 0 x14IRQ_Handler; IRQ中斷處理 0 x18FIQ_Handler; FIQ中斷處理 0 x1C專題四:S3C2440中斷系統(tǒng) 二、二、IRQIRQ中斷處理過程中斷處理過程 計(jì)算偏移量,其實(shí)原理很簡(jiǎn)單,首先INTOFFSET保存著當(dāng)前是哪個(gè)IRQ中斷,例如0代表著HandleEINT0,1代表HandleEINT1等。
21、 然后得到中斷處理函數(shù)的向量表,這個(gè)表的首地址就是HandleEINT0,HandleEINT0 + INTOFFSET,即基地址加偏移量就得到表中某項(xiàng)了,當(dāng)然,因?yàn)檫@里是中斷處理向量每一項(xiàng)占用4個(gè)字節(jié),所以用“l(fā)sl #2”處理一下,左移2位相當(dāng)于乘以4,偏移量乘以4,這應(yīng)該很好理解的。專題四:S3C2440中斷系統(tǒng) 五、五、 外部中斷外部中斷要想正確地執(zhí)行2440的外部中斷,一般需要完成兩個(gè)部分內(nèi)容:中斷初始化和中斷處理函數(shù)。 外部中斷被分為被SUBSRCPND/SUBMASK寄存器控制的中斷,不被 SUBSRCPND/SUBMASK寄存器控制的中斷; 外部中斷必須經(jīng)過SRCPND( SO
22、URCE PENDING)寄存器的控制; 外部中斷最終經(jīng)過INTMASK(中斷屏蔽)與INTMODE(中斷模式)寄存器的控制; 外部中斷經(jīng)過PRIORITY(優(yōu)先級(jí)寄存器)的仲裁決定優(yōu)先級(jí); 通過INTPND寄存器來(lái)確認(rèn)中斷的發(fā)生以及清除中斷 ,同一時(shí)間內(nèi)只有一位被置1。專題四:S3C2440中斷系統(tǒng) 1 1、外部中斷主要寄存器、外部中斷主要寄存器1 1)外部中斷控制寄存器)外部中斷控制寄存器EXTINTnEXTINTn EXTINTn EXTINTn設(shè)置外部中斷請(qǐng)求信號(hào)是電平觸發(fā)還是設(shè)置外部中斷請(qǐng)求信號(hào)是電平觸發(fā)還是邊沿觸發(fā),邊沿觸發(fā),專題四:S3C2440中斷系統(tǒng) 2)外部中斷屏蔽寄存器E
23、INTMASK設(shè)置開放或屏蔽對(duì)應(yīng)的外部中斷,與INTMASK類似。3)外部中斷掛起寄存器EINTPEND外部中斷掛起寄存器,與INTPEND類似。例:例:下面給出的是一個(gè)外部中斷初始化的示例,示例中有6個(gè)按鍵接到了外部中斷。專題四:S3C2440中斷系統(tǒng) /*按鍵中斷的中斷處理函數(shù),中斷中只清了中斷的相關(guān)寄存器,未做中斷的相關(guān)處理*/void key_isp()/* 中斷服務(wù)函數(shù)示例 */* do something */rEINTPEND |= rEINTPEND; rSRCPND |= (1INT_EINT8_23);/*清源掛起相應(yīng)位*/rINTPND |= rINTPND;/*清中斷掛
24、起寄存器相應(yīng)位*/專題四:S3C2440中斷系統(tǒng) rEXTINT2 |= (212); /*下降沿觸發(fā)*/rEINTPEND |= (18)|(111)|(113)|(114)|(115)|(119); /*清外部中斷掛起*/rEINTMASK &= (119)|(115)|(114)|(113)|(111)|(18); /*外部中斷屏蔽*/rSRCPND |= (15); /*清源掛起對(duì)應(yīng)位,EINT8_23*/rINTPND |= (15); /*清中斷掛起*/rINTMSK &= (15); /*開放EINT8_23中斷*/isr_handle_arrayINT_EINT8_23 = k
25、ey_isp; /*填寫中斷矢量*/專題四:S3C2440中斷系統(tǒng) 三、應(yīng)用部分1、下圖為S3C2440的接口電路s3c2440開發(fā)板上有6個(gè)按鍵,將其中的前4個(gè)按鍵設(shè)為外部中斷方式,當(dāng)按下K1時(shí),LED1亮;當(dāng)按下K2時(shí),LED2亮;當(dāng)按下K3時(shí),LED3亮;當(dāng)按下K4時(shí),LED4亮。硬件電路分析: 256M的2440板子上有4個(gè)LED,其接口電路如圖1所示,當(dāng)GPIO口輸出為低電平時(shí),相對(duì)應(yīng)的LED燈亮;輸出高電平時(shí),LED燈滅。按鍵接口電路如圖2所示,當(dāng)按鍵沒有按下時(shí),GPGx引腳為高電平;當(dāng)按鍵按下時(shí),引腳電平變?yōu)榈碗娖?。專題四:S3C2440中斷系統(tǒng) 2、中斷控制程序編寫步驟、中斷控
26、制程序編寫步驟主程序1、先清除中斷源掛起寄存器( SRCPND SRCPND)和中斷掛起寄存器( INTPND),可用 rSRCPND= rSRCPND 和rINTPND=rINTPND =來(lái)完成;2、設(shè)中斷模式,這里使用通用中斷,rINTMOD=0 x00000000因上電或復(fù)位時(shí)rINTMOD是清 0的,這步也可以不做。3、I/O 口初始化,有些中斷源要通過 I/O 口向 CPU 申請(qǐng)中斷,如外部中斷 0(EXTINT0通過 )F口的 GPF0 、外部中斷11(EXTINT11)通過G口的 GPG3 向CPU 申請(qǐng)中斷,此時(shí)兩個(gè)口的控制寄存器 GPFCON 和GPGCON 的要設(shè)置成:GP
27、FCON1:0=1,0;GPGCON7:6=1,0。4、設(shè)中斷服務(wù)函數(shù)地址, S3C2410 在2410addr.h 中定義了 40個(gè)宏,設(shè)置了系統(tǒng)支持的中斷服務(wù)函數(shù)的指針,設(shè)中斷服務(wù)函數(shù)地址就是把我們編寫的中斷服務(wù)函數(shù)的地址(就是中斷服務(wù)函數(shù)的名字)賦予相應(yīng)的函數(shù)指針。每個(gè)中斷源的中斷服務(wù)函數(shù)指針名是固定的:pISR+中斷源。5、設(shè)中斷觸發(fā)方式,觸發(fā)方式有 5種,有上升沿、下降沿、雙沿、低電平、高電平觸發(fā)方式,外部中斷觸發(fā)方式在外部中斷控制寄存器 (EXTINTn)中設(shè)定。如 EINT0 觸發(fā)方式在 EXTINT02:0 中設(shè)定,2:0=000 低電平、 001 高電平、 01X 下降沿、
28、10X 上升沿、 11X 雙沿觸發(fā)。專題四:S3C2440中斷系統(tǒng) 6、取消總中斷屏蔽和子中斷屏蔽,等待中斷。例如通過 rEINTMASK rEINTMASK&=(10;k-) for(j=0 xff;j0;j-); x-; void ledMain(void) rGPBCON = 0 x1dd7fc; / GPB5,GPB6,GPB8,GPB10設(shè)置為輸出,連接了4個(gè)LED rGPBDAT|=0 x560; /4個(gè)LED全滅 rGPFCON &=(30)|(34)|(36)|(38) ; rGPFCON |= (20)|(24)|(26)|(28) ; /GPF0,GPF2,GPF3,GPF
29、4工作在第二功能狀態(tài),即中斷 /rEXTINT0=0 x0; rEINTPEND=(14); /清外部中斷掛起寄存器,清的是外部中斷4 ClearPending(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7); /清外部中斷0,2,3,4 pISR_EINT0= pISR_EINT2 =pISR_EINT3 = pISR_EINT4_7=(int)Key_ISR; /設(shè)中斷服務(wù)函數(shù)地址 EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7) ; /使能中斷,即使INTMSK相應(yīng)位為0 rEINTMASK=(
30、14); /使能外部中斷4 while(1); /等待中斷發(fā)生專題四:S3C2440中斷系統(tǒng) static void _irq Key_ISR()/中斷服務(wù)函數(shù),_irq用來(lái)聲明通用中斷函數(shù) char key;/用來(lái)標(biāo)識(shí)是哪一個(gè)按鍵按下 unsigned int r; rINTMSK=0 xffffffff;/這是屏蔽所有中斷 if(rINTPND=BIT_EINT0) /因?yàn)?個(gè)中斷用的是同一個(gè)中斷服務(wù)函數(shù),所以判斷是哪一個(gè)中斷發(fā)生 ClearPending(BIT_EINT0); /并清除掛起寄存器,獲得鍵值 key=1; else if(rINTPND=BIT_EINT2) ClearP
31、ending(BIT_EINT2); key=2; else if(rINTPND=BIT_EINT3) ClearPending(BIT_EINT3); key=3; else if(rINTPND=BIT_EINT4_7) rEINTPEND=(14); ClearPending(BIT_EINT4_7); key=4; switch(key) /根據(jù)鍵值控制4個(gè)LED亮滅變化 case 1:專題四:S3C2440中斷系統(tǒng) rGPBDAT=(15); break; case 2: rGPBDAT=(16); break; case 3: rGPBDAT=(18); break; case
32、4: rGPBDAT=(1= 0) & (INTOFFSET = 31) & (afInterruptISRINTOFFSET != NULL)afInterruptISRINTOFFSET(); /處理中斷rSRCPND |= (1 INTOFFSET); /清除中斷標(biāo)志rINTPND |= (1 = 0 & nInterruptNo = 0 & nInterruptNo = 31)afInterruptISRnInterruptNo = NULL; IRQ_SetMask(nInterruptNo,INT_MSK_DISABLE);/關(guān)閉中斷 /設(shè)置中斷掩碼void IRQ_SetMask
33、(int nInterruptNo,int nEnable)/根據(jù)參數(shù)對(duì)相關(guān)的中斷掩碼寄存器的相對(duì)應(yīng)位進(jìn)行設(shè)置,/注意:在開啟一級(jí)中斷時(shí),要先對(duì)注意:在開啟一級(jí)中斷時(shí),要先對(duì)SRCPND中對(duì)應(yīng)位進(jìn)行清零,然后再對(duì)中對(duì)應(yīng)位進(jìn)行清零,然后再對(duì)INTMASK操作。操作。專題四:S3C2440中斷系統(tǒng) 3、Linux 中斷服務(wù)函數(shù)及其驅(qū)動(dòng)程序中斷服務(wù)函數(shù)及其驅(qū)動(dòng)程序1)Linux中斷處理程序架構(gòu)中斷處理程序架構(gòu):Linux將中斷分為:頂半部(top half)和底半部(bottom half)頂半部: 完成盡可能少的比較緊急的功能,它往往只是簡(jiǎn)單的讀取寄存器中的中斷狀態(tài)并清除中斷標(biāo)志后就進(jìn)行“登記中斷
34、”(也就是將將底半部處理程序掛在到設(shè)備的底半部執(zhí)行隊(duì)列中底半部處理程序掛在到設(shè)備的底半部執(zhí)行隊(duì)列中)的工作特點(diǎn):響應(yīng)速度快 底半部: 中斷處理的大部分工作都在底半部,它幾乎做了中斷處理幾乎做了中斷處理程序的所有事情程序的所有事情。特點(diǎn):處理相對(duì)來(lái)說不是非常緊急的事件專題四:S3C2440中斷系統(tǒng) 小知識(shí):Linux中查看/proc/interrupts文件可以獲得系統(tǒng)中斷的統(tǒng)計(jì)信息。如下圖所示:第一列是中斷號(hào) 第二列是向CPU產(chǎn)生該中斷的次數(shù)專題四:S3C2440中斷系統(tǒng) 2)中斷服務(wù)函數(shù))中斷服務(wù)函數(shù) 中斷部分的中斷部分的API函數(shù)函數(shù): static inlineint gpio_to_irq(unsigned gpio) 例:gpioToIrq = gpio_to_irq (RK29
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 標(biāo)準(zhǔn)汽車租賃合同協(xié)議
- 農(nóng)業(yè)灌溉系統(tǒng)設(shè)計(jì)與安裝手冊(cè)
- 少年英雄傳記的讀后感
- 無(wú)人機(jī)在物流領(lǐng)域的應(yīng)用合作協(xié)議
- 環(huán)境管理體系認(rèn)證服務(wù)合同
- 零售業(yè)行業(yè)-銷售數(shù)據(jù)統(tǒng)計(jì)表
- 成長(zhǎng)的煩惱故事評(píng)析報(bào)告
- 小學(xué)語(yǔ)文成語(yǔ)故事解讀
- 西餐原料知識(shí)培訓(xùn)課件
- 種子委托生產(chǎn)合同
- 國(guó)家基本藥物臨床應(yīng)用指南最完整版
- 急性髓系白血病小講課
- 大氣冬季滑雪旅游宣傳
- 2016-2023年株洲師范高等專科學(xué)校高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 項(xiàng)目成本管控要素清單
- 歌唱二小放牛郎 金巍 女聲合唱譜
- 基層公職人員禁毒知識(shí)講座
- 中小學(xué)生綜合實(shí)踐基地(學(xué)校)考核指標(biāo)體系評(píng)分標(biāo)準(zhǔn)
- 2024深海礦產(chǎn)資源開采系統(tǒng)技術(shù)指南
- 一+《展示國(guó)家工程++了解工匠貢獻(xiàn)》(教學(xué)課件)-【中職專用】高二語(yǔ)文精講課堂(高教版2023·職業(yè)模塊)
- 北京長(zhǎng)峰醫(yī)院4.18火災(zāi)事故案例分析
評(píng)論
0/150
提交評(píng)論