中斷異常處理流程

中斷異常處理流程

ID:14898514

大?。?9.00 KB

頁數(shù):6頁

時(shí)間:2018-07-30

中斷異常處理流程_第1頁
中斷異常處理流程_第2頁
中斷異常處理流程_第3頁
中斷異常處理流程_第4頁
中斷異常處理流程_第5頁
資源描述:

《中斷異常處理流程》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、計(jì)算機(jī)體系結(jié)構(gòu)中,異?;蛘咧袛嗍翘幚硐到y(tǒng)中突發(fā)事件的一種機(jī)制,幾乎所有的處理器都提供這種機(jī)制。異常主要是從處理器被動接受的角度出發(fā)的一種描述,指意外操作引起的異常。而中斷則帶有向處理器主動申請的意味。但這兩種情況具有一定的共性,都是請求處理器打斷正常的程序執(zhí)行流程,進(jìn)入特定程序的一種機(jī)制。若無特別說明,對“異?!焙汀爸袛唷倍疾蛔鲊?yán)格的區(qū)分。本文結(jié)合經(jīng)過實(shí)際驗(yàn)證的代碼對ARM9中斷處理流程進(jìn)行分析,并設(shè)計(jì)出基于S3C2410芯片的外部中斷處理程序。1.異常中斷響應(yīng)和返回系統(tǒng)運(yùn)行時(shí),異??赡軙S時(shí)發(fā)

2、生。當(dāng)一個(gè)異常出現(xiàn)以后,ARM微處理器會執(zhí)行以下幾步操作:1)將下一條指令的地址存入相應(yīng)連接寄存器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微處理器會執(zhí)行以下幾步操作從異常返回:1)將連接寄存器LR的值減去相應(yīng)的偏移量后送到PC中。2)將SP

3、SR復(fù)制回CPSR中。3)若在進(jìn)入異常處理時(shí)設(shè)置了中斷禁止位,要在此清除。這些工作必須由用戶在中斷處理函數(shù)中實(shí)現(xiàn)。為保證在ARM處理器發(fā)生異常時(shí)不至于處于未知狀態(tài),在應(yīng)用程序的設(shè)計(jì)中,首先要進(jìn)行異常處理。采用的方式是在異常向量表中的特定位置放置一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到異常處理程序。當(dāng)ARM處理器發(fā)生異常時(shí),程序計(jì)數(shù)器PC會被強(qiáng)制設(shè)置為對應(yīng)的異常向量,從而跳轉(zhuǎn)到異常處理程序。當(dāng)異常處理完成以后,返回到主程序繼續(xù)執(zhí)行??梢哉J(rèn)為應(yīng)用程序總是從復(fù)位異常處理程序開始執(zhí)行的,因此復(fù)位異常處理程序不需要返回。2.

4、異常處理程序設(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)站提供了test2410_r11軟件包,其中2410init.s有如下代碼:HandlerXXXsubsp,sp,#4;減少sp,保存跳轉(zhuǎn)地址stmfdsp!,{r0};將工作寄存器壓入堆棧ldrr0,=HandleXXX;將HandleXXX地址放入

5、r0ldrr0,[r0];將中斷程序入口地址放入r0strr0,[sp,#4];將中斷程序入口地址壓入堆棧ldmfdsp!,{r0,pc};將工作寄存器和中斷程序入口地址彈出到r0和PC圖1異常處理調(diào)用并且在RAM中定義了存有中斷程序入口地址表_ISR_STARTADDRESS:AREARamData,DATA,READWRITE^_ISR_STARTADDRESSHandleReset#4HandleUndef#4HandleSWI#4HandlePabort#4HandleDabort#4H

6、andleReserved#4HandleIRQ#4HandleFIQ#4通常HandlerXXX位于程序入口地址32MB范圍內(nèi),HandleXXX是以_ISR_STARTADDRESS為基地址的RAM中地址。該代碼主要實(shí)現(xiàn)跳轉(zhuǎn)功能,把異常處理程序地址HandleXXX送到PC中。例如產(chǎn)生IRQ中斷時(shí),PC會被強(qiáng)制設(shè)置為0x18,執(zhí)行指令:bHandlerIRQ在HandlerIRQ程序段內(nèi),處理器做一些必要的處理,就會將_ISR_STARTADDRESS表中存放的IRQ入口地址送入PC,然后開

7、始執(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)容對應(yīng)每個(gè)具體的中斷源,可以協(xié)助跳轉(zhuǎn)到不同的中斷處理程序。當(dāng)響應(yīng)外設(shè)的一個(gè)中斷請求時(shí),首先觸發(fā)ARM核的中斷,進(jìn)人中斷程序,再通過中斷控制器識別中斷

8、源,使PC能夠自動獲得中斷處理程序的地址。有的芯片支持特殊的硬件分支功能,依據(jù)中斷源自動跳轉(zhuǎn)到向量表的相應(yīng)地址,多數(shù)情況下是用軟件來處理異常分支。在S3C2410體系中,中斷的調(diào)用可以看成是經(jīng)歷了2次“中斷向量表”的查詢。2410init.s中的以下代碼完成功能就是查詢中斷偏移寄存器INTOFFSET,得到當(dāng)前中斷的中斷號,并根據(jù)中斷號再調(diào)用相關(guān)的中斷服務(wù)程序。IsrIRQsubsp,sp,#4stmfdsp!,{r8-r9}ldrr9,=INTOFFSETldrr9,[r9]ldrr8,=Ha

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。