![中斷異常處理流程_第1頁](http://file3.renrendoc.com/fileroot3/2021-12/3/f475be72-1b74-4941-8f83-aff2dee00b96/f475be72-1b74-4941-8f83-aff2dee00b961.gif)
![中斷異常處理流程_第2頁](http://file3.renrendoc.com/fileroot3/2021-12/3/f475be72-1b74-4941-8f83-aff2dee00b96/f475be72-1b74-4941-8f83-aff2dee00b962.gif)
![中斷異常處理流程_第3頁](http://file3.renrendoc.com/fileroot3/2021-12/3/f475be72-1b74-4941-8f83-aff2dee00b96/f475be72-1b74-4941-8f83-aff2dee00b963.gif)
![中斷異常處理流程_第4頁](http://file3.renrendoc.com/fileroot3/2021-12/3/f475be72-1b74-4941-8f83-aff2dee00b96/f475be72-1b74-4941-8f83-aff2dee00b964.gif)
![中斷異常處理流程_第5頁](http://file3.renrendoc.com/fileroot3/2021-12/3/f475be72-1b74-4941-8f83-aff2dee00b96/f475be72-1b74-4941-8f83-aff2dee00b965.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 計(jì)算機(jī)體系結(jié)構(gòu)中,異?;蛘咧袛嗍翘幚硐到y(tǒng)中突發(fā)事件的一種機(jī)制,幾乎所有的處理器都提供這種機(jī)制。異常主要是從處理器被動(dòng)接受的角度出發(fā)的一種描述,指意外操作引起的異常。而中斷則帶有向處理器主動(dòng)申請(qǐng)的意味。但這兩種情況具有一定的共性,都是請(qǐng)求處理器打斷正常的程序執(zhí)行流程,進(jìn)入特定程序的一種機(jī)制。若無特別說明,對(duì)“異常”和“中斷”都不作嚴(yán)格的區(qū)分。本文結(jié)合經(jīng)過實(shí)際驗(yàn)證的代碼對(duì)ARM9中斷處理流程進(jìn)行分析,并設(shè)計(jì)出基于S3C2410芯片的外部中斷處理程序。 1.異常中斷響應(yīng)和返回 系統(tǒng)運(yùn)行時(shí),異??赡軙?huì)隨時(shí)發(fā)生。當(dāng)一個(gè)異常出現(xiàn)以后,ARM微處理器會(huì)執(zhí)行以下幾步操作: 1) 將下一條指令的地址存入相應(yīng)連
2、接寄存器LR,以便程序在處理異常返回時(shí)能從正確的位置重新開始執(zhí)行。 2) 將CPSR復(fù)制到相應(yīng)的SPSR中。 3) 根據(jù)異常類型,強(qiáng)制設(shè)置CPSR的運(yùn)行模式位。 4) 強(qiáng)制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處。 這些工作是由ARM 內(nèi)核完成的,不需要用戶程序參與。異常處理完畢之后,ARM微處理器會(huì)執(zhí)行以下幾步操作從異常返回: 1) 將連接寄存器LR的值減去相應(yīng)的偏移量后送到PC中。 2) 將SPSR復(fù)制回CPSR中。 3) 若在進(jìn)入異常處理時(shí)設(shè)置了中斷禁止位,要在此清除。 這些工作必須由用戶在中斷處理函數(shù)中實(shí)現(xiàn)。為保證在ARM處理器發(fā)生異常時(shí)不至于處于未知狀
3、態(tài),在應(yīng)用程序的設(shè)計(jì)中,首先要進(jìn)行異常處理。采用的方式是在異常向量表中的特定位置放置一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到異常處理程序。當(dāng)ARM處理器發(fā)生異常時(shí),程序計(jì)數(shù)器PC會(huì)被強(qiáng)制設(shè)置為對(duì)應(yīng)的異常向量,從而跳轉(zhuǎn)到異常處理程序。當(dāng)異常處理完成以后,返回到主程序繼續(xù)執(zhí)行。可以認(rèn)為應(yīng)用程序總是從復(fù)位異常處理程序開始執(zhí)行的,因此復(fù)位異常處理程序不需要返回。 2.異常處理程序設(shè)計(jì) 2.1 異常響應(yīng)流程 由于向量表的限制,只能有一條指令B完成32MB范圍內(nèi)的跳轉(zhuǎn),并不能保證所有的異常處理函數(shù)都位于32MB范圍內(nèi)。為了擴(kuò)展跳轉(zhuǎn)范圍,需要二次跳轉(zhuǎn)才能把異常處理函數(shù)的地址傳送給PC。異常處理調(diào)用關(guān)系如圖1所示。 三星公司網(wǎng)站
4、提供了test2410_r11軟件包,其中2410init.s有如下代碼: HandlerXXX sub sp,sp,#4 ;減少sp,保存跳轉(zhuǎn)地址 stmfd sp!,r0 ;將工作寄存器壓入堆棧 ldr r0,=HandleXXX ;將HandleXXX地址放入r0 ldr r0,r0 ;將中斷程序入口地址放入r0 str r0,sp,#4 ;將中斷程序入口地址壓入堆棧 ldmfd sp!,r0,pc ;將工作寄存器和中斷程序入口地址彈出到r0和PC圖1異常處理調(diào)用 并且在RAM中定義了存有中斷程序入口地址表_ISR_STARTADDRESS: AREA RamData, DATA, RE
5、ADWRITE _ISR_STARTADDRESS HandleReset # 4 HandleUndef # 4 HandleSWI # 4 HandlePabort # 4 HandleDabort # 4 HandleReserved # 4 HandleIRQ # 4 HandleFIQ # 4 通常HandlerXXX位于程序入口地址32MB范圍內(nèi),HandleXXX是以_ISR_STARTADDRESS為基地址的RAM中地址。該代碼主要實(shí)現(xiàn)跳轉(zhuǎn)功能,把異常處理程序地址HandleXXX送到PC中。例如產(chǎn)生IRQ中斷時(shí),PC會(huì)被強(qiáng)制設(shè)置為0x18,執(zhí)行指令:b HandlerIRQ
6、在HandlerIRQ程序段內(nèi),處理器做一些必要的處理,就會(huì)將_ISR_STARTADDRESS表中存放的IRQ入口地址送入PC,然后開始執(zhí)行相關(guān)中斷程序。由于_ISR_STARTADDRESS表存放在RAM中,后面的C語言程序可以方便地更改相關(guān)中斷服務(wù)程序的內(nèi)容。 2.2 異常分支 系統(tǒng)可能存在多個(gè) IRQ/FIQ的中斷處理程序。為了從向量表入口處的跳轉(zhuǎn)最終能找到正確的中斷處理程序,需要設(shè)計(jì)一套處理機(jī)制和方法來實(shí)現(xiàn)??梢栽贏RM的異常向量表之外,增加一張關(guān)聯(lián)中斷控制器的向量表,向量表中的內(nèi)容對(duì)應(yīng)每個(gè)具體的中斷源,可以協(xié)助跳轉(zhuǎn)到不同的中斷處理程序。 當(dāng)響應(yīng)外設(shè)的一個(gè)中斷請(qǐng)求時(shí),首先觸發(fā)ARM核
7、的中斷,進(jìn)人中斷程序,再通過中斷控制器識(shí)別中斷源,使PC能夠自動(dòng)獲得中斷處理程序的地址。有的芯片支持特殊的硬件分支功能,依據(jù)中斷源自動(dòng)跳轉(zhuǎn)到向量表的相應(yīng)地址,多數(shù)情況下是用軟件來處理異常分支。 在S3C2410體系中,中斷的調(diào)用可以看成是經(jīng)歷了2次“中斷向量表”的查詢。2410init.s中的以下代碼完成功能就是查詢中斷偏移寄存器INTOFFSET,得到當(dāng)前中斷的中斷號(hào),并根據(jù)中斷號(hào)再調(diào)用相關(guān)的中斷服務(wù)程序。 IsrIRQ sub sp,sp,#4 stmfd sp!,r8-r9 ldr r9,=INTOFFSET ldr r9,r9 ldr r8,=HandleEINT0 add r8,r8
8、,r9,lsl #2 ldr r8,r8 str r8,sp,#8 ldmfd sp!,r8-r9,pc 為了方便C程序使用中斷,將IsrIRQ設(shè)為IRQ的中斷服務(wù)程序。 ldr r0,=HandleIRQ ldr r1,=IsrIRQ str r1,r0 其中HandleEINT0是用戶自己開辟的一塊存儲(chǔ)空間的起始地址,后面按次序存放中斷異常處理程序的地址,也可以理解為二級(jí)中斷向量表。IsrIRQ從中斷控制器處獲取中斷源信息,然后再從二級(jí)中斷向量表中的對(duì)應(yīng)地址單元得到異常中斷處理程序的入口地址,完成異常響應(yīng)的跳轉(zhuǎn)。二級(jí)中斷向量表一般位于 HandleFIQ的后面,也就是以_ISR_START
9、ADDRESS0x20為起始地址,這里定義了S3C2410處理器所有中斷源的相關(guān)中斷處理處理程序入口。這種方法的好處是用戶程序在運(yùn)行過程中能夠動(dòng)態(tài)改變異常向量。 2.3 中斷函數(shù)設(shè)計(jì) 為了方便高級(jí)語言設(shè)計(jì)中斷處理函數(shù),標(biāo)準(zhǔn)的ARM指令編譯器提供了一個(gè)用來聲明中斷處理函數(shù)的關(guān)鍵字-irq,使用此關(guān)鍵字聲明的函數(shù)可以被編譯器識(shí)別為中斷處理函數(shù)。編譯后的代碼在處理異常事件前保存現(xiàn)場(chǎng)信息,處理異常事件后對(duì)現(xiàn)場(chǎng)信息進(jìn)行恢復(fù)。中斷函數(shù)設(shè)計(jì)如下:static void _irq Eint3Int(void) ClearPending(BIT_EINT3);Uart_Printf("EINT3 in
10、terrupt is occurred.n"); num_int=3;設(shè)置標(biāo)志位 定義中斷處理程序入口地址:#define pISR_EINT3 (*(unsigned *)(_ISR_STARTADDRESS+0x2c) 在初始化程序,引用代碼pISR_EINT3=(U32)Eint3Int,即可定義地址_ISR_STARTADDRESS+0x2c內(nèi)容是Eint3Int的地址,外部中斷3產(chǎn)生請(qǐng)求時(shí)即可調(diào)用中斷處理函數(shù)Eint3Int。 3.外中斷初始化程序設(shè)計(jì) S3C2410X 的中斷控制寄存器能接收來自56個(gè)中斷源的請(qǐng)求。內(nèi)部的外圍模塊和外部管腳產(chǎn)生的多個(gè)中斷請(qǐng)求通過中斷控制器沖
11、裁后,向ARM920T核發(fā)出FIQ或者 IRQ中斷。ARM內(nèi)核只有2個(gè)外部中斷輸入信號(hào)nIRQ和nFIQ,在具體嵌入式系統(tǒng)中,需要用中斷控制器管理多個(gè)外部中斷源,選擇其中一個(gè)中斷,通過 nIRQ或nFIQ向ARM內(nèi)核發(fā)出中斷請(qǐng)求,如圖2所示。 圖2 FIQIRQ中斷處理過程 ARM920T內(nèi)核可以識(shí)別正常中斷請(qǐng)求和快速中斷請(qǐng)求兩種類型的外部中斷,中斷的行為模式由中斷控制器來設(shè)置。S3C2410X的中斷控制器包括6類寄存器:中斷源狀態(tài)寄存器、中斷模式寄存器、中斷屏蔽寄存器、優(yōu)先級(jí)寄存器、中斷狀態(tài)寄存器,以及中斷偏移寄存器。 在初始化程序中,需要選擇相應(yīng)管腳的功能,在此定義GPF3為EINT3模式
12、,通過外部中斷控制寄存器EXTINT0設(shè)定EINT3是下降沿觸發(fā)方式,通過設(shè)置中斷源懸掛寄存器SRCPND、中斷懸掛寄存器INTPND和中斷屏蔽寄存器INTMSK開啟EINT3。中斷模式寄存器和中斷優(yōu)先級(jí)寄存器采用系統(tǒng)默認(rèn)方式。具體代碼實(shí)現(xiàn)如下:void Eint_Init(void)rGPFCON = (rGPFCON & 0x3f0c)|(1<<7);rEXTINT0 = (rEXTINT0 & (0x7<<12) | 0x2<<12; pISR_EINT3=(U32)Eint3Int; rSRCPND = BIT_EINT3; rINTPND = BIT_EINT3; rIN
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人資金借入合同模板范例
- 中保人壽66鴻運(yùn)保險(xiǎn)(B型)合同條款全解
- 中外合資經(jīng)營(yíng)企業(yè)合同(適用于醫(yī)療保健行業(yè))
- 2025年房地產(chǎn)行業(yè)協(xié)同銷售協(xié)議
- 二手房屋買賣合同經(jīng)典范文
- 不動(dòng)產(chǎn)轉(zhuǎn)讓合同協(xié)議
- 個(gè)人消費(fèi)分期貸款合同模板
- 事業(yè)單位勞動(dòng)合同范本
- CASS清算與多方參與主體合同2025
- 丙供、甲方采購雙方合同協(xié)議
- 駕駛證學(xué)法減分(學(xué)法免分)試題和答案(50題完整版)1650
- 人教版2024新版七年級(jí)上冊(cè)數(shù)學(xué)第六章幾何圖形初步學(xué)業(yè)質(zhì)量測(cè)試卷(含答案)
- 工業(yè)機(jī)器人編程語言:Epson RC+ 基本指令集教程
- 2023.05.06-廣東省建筑施工安全生產(chǎn)隱患識(shí)別圖集(高處作業(yè)吊籃工程部分)
- 2023年漢中市人民政府國有資產(chǎn)監(jiān)督管理委員會(huì)公務(wù)員考試《行政職業(yè)能力測(cè)驗(yàn)》歷年真題及詳解
- JTG 3362-2018公路鋼筋混凝土及預(yù)應(yīng)力混凝土橋涵設(shè)計(jì)規(guī)范
- 八年級(jí)下冊(cè)歷史思維導(dǎo)圖
- 電動(dòng)汽車用驅(qū)動(dòng)電機(jī)系統(tǒng)-編制說明
- 江蘇卷2024年高三3月份模擬考試化學(xué)試題含解析
- (正式版)JTT 1497-2024 公路橋梁塔柱施工平臺(tái)及通道安全技術(shù)要求
- 醫(yī)療器械物價(jià)收費(fèi)申請(qǐng)流程
評(píng)論
0/150
提交評(píng)論