


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、.基于ARM9芯片S3C2410異常中斷程序設計日期:2008-1-16來源:微計算機信息 X書瑞 于明 X劍飛 蘇彥莽字體:大中小 摘要:驗證的代碼詳細分析了基于ARM嵌入式系統的異常處理流程。然后說明關鍵字“-irq的作用,設計出中斷處理函數。最后,通過設置中斷控制存放器,設計外部中斷EINT3的初始化程序,并給出主程序流程圖。實踐證明程序運行穩定可靠。 關鍵字:S3C2410 異常 irq 中斷 引言計算機體系構造中,異?;蛘咧袛嗍翘幚硐到y中突發事件的一種機制,幾乎所有的處理器都提供這種機制。異常主要是從處理器被動承受的角度出發的一種描述,指意
2、外操作引起的異常。而中斷那么帶有向處理器主動申請的意味。但這兩種情況具有一定的共性,都是請求處理器打斷正常的程序執行流程,進入特定程序的一種機制。假設無特別說明,對“異常和“中斷都不作嚴格的區分。本文結合經過實際驗證的代碼對ARM9中斷處理流程進展分析,并設計出基于S3C2410芯片的外部中斷處理程序。1.異常中斷響應和返回系統運行時,異??赡軙S時發生。當一個異常出現以后,ARM微處理器會執行以下幾步操作:1) 將下一條指令的地址存入相應連接存放器LR,以便程序在處理異常返回時能從正確的位置重新開場執行。2)
3、 將CPSR復制到相應的SPSR中。3) 根據異常類型,強制設置CPSR的運行模式位。4) 強制PC從相關的異常向量地址取下一條指令執行,從而跳轉到相應的異常處理程序處。這些工作是由ARM 內核完成的,不需要用戶程序參與。異常處理完畢之后,ARM微處理器會執行以下幾步操作從異常返回:1)
4、 將連接存放器LR的值減去相應的偏移量后送到PC中。2) 將SPSR復制回CPSR中。3) 假設在進入異常處理時設置了中斷制止位,要在此去除。這些工作必須由用戶在中斷處理函數中實現。為保證在ARM處理器發生異常時不至于處于未知狀態,在應用程序的設計中,首先要進展異常處理。采用的方式是在異常向量表中的特定位置放置一條跳轉指令,跳轉到異常處理程序。當ARM處理器發生異常時,程序計數器PC會被強制設置為對應的異
5、常向量,從而跳轉到異常處理程序。當異常處理完成以后,返回到主程序繼續執行??梢哉J為應用程序總是從復位異常處理程序開場執行的,因此復位異常處理程序不需要返回。2.異常處理程序設計2.1 異常響應流程由于向量表的限制,只能有一條指令B完成32MBX圍內的跳轉,并不能保證所有的異常處理函數都位于32MBX圍內。為了擴展跳轉X圍,需要二次跳轉才能把異常處理函數的地址傳送給PC。異常處理調用關系如圖1所示。三星公司提供了test2410_r11軟件包,其中2410init.s有如下代碼:HandlerXXXsub sp,sp,*4
6、 減少sp,保存跳轉地址stmfd sp!,r0 ;將工作存放器壓入堆棧ldr r0,=HandleXXX ;將HandleXXX地址放入r0ldr r0,r0 將中斷程序入口地址放入r0str r0,sp,*4 ;將中斷程序入口地址壓入堆棧ldmfd sp!,r0,pc ;將工作存放器和中斷程序入口地址彈出到r0和PC圖1異常處理調用并且在RAM中定義了存有中斷程序入口
7、地址表_ISR_STARTADDRESS:AREA RamData, DATA, READWRITE _ISR_STARTADDRESSHandleReset * 4HandleUndef
8、; * 4HandleSWI * 4HandlePabort * 4HandleDabort
9、0; * 4HandleReserved * 4HandleIRQ * 4HandleFIQ *
10、4通常HandlerXXX位于程序入口地址32MBX圍內,HandleXXX是以_ISR_STARTADDRESS為基地址的RAM中地址。該代碼主要實現跳轉功能,把異常處理程序地址HandleXXX送到PC中。例如產生IRQ中斷時,PC會被強制設置為0x18,執行指令:b HandlerIRQ在HandlerIRQ程序段內,處理器做一些必要的處理,就會將_ISR_STARTADDRESS表中存放的IRQ入口地址送入PC,然后開場執行相關中斷程序。由于_ISR_STARTADDRESS表存放在RAM中,后面的C語言程序可以方便地更改相關中斷效勞程序的內容。2.2
11、; 異常分支 系統可能存在多個IRQ/FIQ的中斷處理程序。為了從向量表入口處的跳轉最終能找到正確的中斷處理程序,需要設計一套處理機制和方法來實現。可以在ARM的異常向量表之外,增加一X關聯中斷控制器的向量表,向量表中的內容對應每個具體的中斷源,可以協助跳轉到不同的中斷處理程序。當響應外設的一個中斷請求時,首先觸發ARM核的中斷,進人中斷程序,再通過中斷控制器識別中斷源,使PC能夠自動獲得中斷處理程序的地址。有的芯片支持特殊的硬件分支功能,依據中斷源自動跳轉到向量表的相應地址,多數情況下是用軟件來處理異常分支。在S3C2410體系中,中斷的調用可以看成是經歷了2次“中斷向量表的查詢。2410i
12、nit.s中的以下代碼完成功能就是查詢中斷偏移存放器INTOFFSET,得到當前中斷的中斷號,并根據中斷號再調用相關的中斷效勞程序。IsrIRQ sub sp,sp,*4 stmfd sp!,r8-r9
13、 ldr r9,=INTOFFSET ldr r9,r9 ldr r8,=HandleEINT0
14、0; add r8,r8,r9,lsl *2 ldr r8,r8 str r8,sp,*8 ld
15、mfd sp!,r8-r9,pc為了方便C程序使用中斷,將IsrIRQ設為IRQ的中斷效勞程序。 ldr r0,=HandleIRQ ldr r1,=IsrIRQ
16、60; str r1,r0其中HandleEINT0是用戶自己開辟的一塊存儲空間的起始地址,后面按次序存放中斷異常處理程序的地址,也可以理解為二級中斷向量表。IsrIRQ從中斷控制器處獲取中斷源信息,然后再從二級中斷向量表中的對應地址單元得到異常中斷處理程序的入口地址,完成異常響應的跳轉。二級中斷向量表一般位于HandleFIQ的后面,也就是以_ISR_STARTADDRESS0x20為起始地址,這里定義了S3C2410處理器所有中斷源的相關中斷處理處理程序入口。這種方法的好處是用戶程序在運行過程中能夠動態改變
17、異常向量。2.3 中斷函數設計為了方便高級語言設計中斷處理函數,標準的ARM指令編譯器提供了一個用來聲明中斷處理函數的關鍵字-irq,使用此關鍵字聲明的函數可以被編譯器識別為中斷處理函數。編譯后的代碼在處理異常事件前保存現場信息,處理異常事件后對現場信息進展恢復。中斷函數設計如下:static void _irq Eint3Int(void) ClearPending(BIT_EINT3);Uart_Printf("EINT3 interrupt is occurred.n");
18、 num_int=3;設置標志位定義中斷處理程序入口地址:*define pISR_EINT3 (*(unsigned *)(_ISR_STARTADDRESS+0x2c)在初始化程序,引用代碼pISR_EINT3=(U32)Eint3Int,即可定義地址_ISR_STARTADDRESS+0x2c內容是Eint3Int的地址,外部中斷3產生請求時即可調用中斷處理函數Eint3Int。3.外中斷初始化程序設計S3C2410X的中斷控制存放器能接收來自56個中斷源的請求。內部的外圍模塊和外部管腳產生的多個中斷請求通過中斷控制器沖裁后,向ARM920
19、T核發出FIQ或者IRQ中斷。ARM內核只有2個外部中斷輸入信號nIRQ和nFIQ,在具體嵌入式系統中,需要用中斷控制器管理多個外部中斷源,選擇其中一個中斷,通過nIRQ或nFIQ向ARM內核發出中斷請求,如圖2所示。圖2 FIQIRQ中斷處理過程ARM920T內核可以識別正常中斷請求和快速中斷請求兩種類型的外部中斷,中斷的行為模式由中斷控制器來設置。S3C2410X的中斷控制器包括6類存放器:中斷源狀態存放器、中斷模式存放器、中斷屏蔽存放器、優先級存放器、中斷狀態存放器,以及中斷偏移存放器。在初始化程序中,需要選擇相應管腳的功能,在此定義GPF3為EINT3模式,通過外部中斷控制存放器EXTINT0設定EINT3是下降沿觸發方式,通過設置中斷源懸掛存放器SRCPND、中斷懸掛存放器INTPND和中斷屏蔽存放器INTMSK開啟EINT3。中斷模式存放器和中斷優先級存放器采用系統默認方式。具體代碼實現如下:void Eint_Init(void)rGPFCON = (rGPFCON & 0x3f0c)|(1<<7);rEXTINT0 =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論