ARM體系結構與編程(第2版)第9章_第1頁
ARM體系結構與編程(第2版)第9章_第2頁
ARM體系結構與編程(第2版)第9章_第3頁
ARM體系結構與編程(第2版)第9章_第4頁
ARM體系結構與編程(第2版)第9章_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第9章

異常中斷處理在ARM體系中,通常有以下3種方式來控制程序的執(zhí)行流程:在正常程序執(zhí)行過程中,每執(zhí)行一條ARM指令,程序計數器(PC)的值加4個字節(jié);每執(zhí)行一條Thumb指令,程序計數器(PC)的值加兩個字節(jié)。整個過程是順序執(zhí)行的。通過跳轉指令,程序可以跳轉到特定的地址標號處執(zhí)行,或者跳轉到特定的子程序處執(zhí)行。當異常中斷發(fā)生時,系統(tǒng)執(zhí)行完當前指令后,將跳轉到相應的異常中斷處理程序處執(zhí)行。29.1.1ARM體系中的異常中斷種類ARM體系中的異常中斷如表9.1所示。39.1.1ARM體系中的異常中斷種類49.1.2異常中斷向量表及異常中斷優(yōu)先級中斷向量表中指定了各異常中斷及其處理程序的對應關系。它通常存放在存儲地址的低端。在ARM體系中,異常中斷向量表的大小為32字節(jié)。每個異常中斷對應的中斷向量表中的4個字節(jié)的空間中存放了一個跳轉指令或者一個向程序計數器(PC)中賦值的數據訪問指令。通過這兩種指令,程序將跳轉到相應的異常中斷處理程序處執(zhí)行。當幾個異常中斷同時發(fā)生時,就必須按照一定的次序來處理這些異常中斷。處理器執(zhí)行某個特定的異常中斷的過程中,稱為處理器處于特定的中斷模式。59.1.2異常中斷向量表及異常中斷優(yōu)先級各異常中斷的中斷向量地址以及中斷的處理優(yōu)先級如表9.2所示。6中斷向量地址異常中斷類型異常中斷模式優(yōu)先級(6最低)0x0復位特權模式(SVC)10x4未定義的指令未定義指令中止模式(Undef)60x8軟件中斷(SWI)特權模式(SVC)60x0c指令預取中止中止模式50x10數據訪問中止中止模式20x14保留未使用未使用0x18外部中斷請求(IRQ)外部中斷(IRQ)模式40x1c快速中斷請求(FIQ)快速(FIQ)中斷模式39.1.3異常中斷使用的寄存器各異常中斷對應著一定的處理器模式。應用程序通常運行在用戶模式下。ARM中的處理器模式如表9.3所示。7處理器模式描述用戶模式(User,usr)正常程序執(zhí)行的模式快速中斷模式(FIQ,fiq)用于高速數據傳輸和通道處理外部中斷模式(IRQ,irq)用于通常的中斷處理特權模式(Supervisor,sve)供操作系統(tǒng)使用的一種保護模式中止模式(Abort,abt)用于虛擬存儲及存儲保護未定義指令模式(Undefined,und)用于支持通過軟件仿真硬件的協(xié)處理器系統(tǒng)模式(System,sys)用于運行特權級的操作系統(tǒng)任務9.1.3異常中斷使用的寄存器各種不同的處理器模式可能有對應于該處理器模式的物理寄存器組,如表9.4所示。89.2進入和退出異常中斷的過程本節(jié)主要介紹處理器對于各種異常中斷的響應過程以及從異常中斷處理程序中返回的方法。對于不同的異常中斷處理程序,返回地址以及使用的指令是不同的。99.2.1ARM處理器對異常中斷的響應過程ARM處理器對異常中斷的響應過程如下。(1) 保存處理器當前狀態(tài)、中斷屏蔽位以及各條件標志位。(2) 設置當前程序狀態(tài)寄存器CPSR中相應的位。(3) 將寄存器lr_mode設置成返回地址。(4) 將程序計數器值(PC)設置成該異常中斷的中斷向量地址,從而跳轉到相應的異常中斷處理程序處執(zhí)行。109.2.1ARM處理器對異常中斷的響應過程1.響應復位異常中斷2.響應未定義指令異常中斷3.響應SWI異常中斷4.響應指令預取中止異常中斷5.響應數據訪問中止異常中斷6.響應IRQ異常中斷7.響應FIQ異常中斷119.2.2從異常中斷處理程序中返回從異常中斷處理程序中返回包括下面兩個基本操作:恢復被中斷的程序的處理器狀態(tài),即把SPSR_mode寄存器內容復制到當前程序狀態(tài)寄存器CPSR中。返回到發(fā)生異常中斷的指令的下一條指令處執(zhí)行,即把lr_mode寄存器的內容復制到程序計數器PC中。復位異常中斷處理程序不需要返回。整個應用系統(tǒng)是從復位異常中斷處理程序開始執(zhí)行的,因而它不需要返回。129.2.2從異常中斷處理程序中返回1.

SWI和未定義指令異常中斷處理程序的返回2.

IRQ和FIQ異常中斷處理程序的返回3.指令預取中止異常中斷處理程序的返回4.數據訪問中止異常中斷處理程序的返回139.3在應用程序中安排異常中斷處理程序通常有兩種方法將異常中斷處理程序注冊到異常中斷向量表中。一種是使用跳轉指令,另一種是使用數據讀取指令LDR。使用跳轉指令的方法比較簡單,可以在異常中斷對應的向量表中的特定位置放一條跳轉指令,直接跳轉到該異常中斷的處理程序。這種方法有一個缺點,即跳轉指令只能在32MB的空間范圍內跳轉。使用數據讀取指令LDR向程序計數器PC中直接賦值。這種方法分為兩步:先將異常中斷處理程序的絕對地址存放在距離向量表4KB的范圍之內的一個存儲單元中;再使用數據讀取指令LDR將該單元的內容讀取到程序計數器PC中。149.3.1在系統(tǒng)復位時安排異常中斷處理程序1.地址0x0處為ROM的情況(1) 使用數據讀取指令LDR的示例(2) 使用跳轉指令的示例2.地址0x0處為RAM的情況159.3.2在C程序中安排異常中斷處理程序1.中斷向量表中使用跳轉指令的情況(1) 讀取中斷處理程序的地址。(2) 從上一步得到的地址中減去該異常中斷對應的中斷向量的地址。(3) 從上一步得到的地址中減去8,以允許指令預取。(4) 將上一步得到的地址右移2位,得到以字(32位)為單位的偏移量。(5) 確保上一步得到的地址值高8位為0,因為跳轉指令只允許24位的偏移量。(6) 將上一步得到的地址與數據0xea000000作邏輯或,從而得到將要寫到中斷向量表中的跳轉指令的編碼。169.3.2在C程序中安排異常中斷處理程序2.中斷向量表中使用數據讀取指令的情況(1) 讀取中斷處理程序的地址。(2) 從上一步得到的地址中減去該異常中斷對應的中斷向量的地址。(3) 從上一步得到的地址中減去8,以允許指令預取。(4) 將上一步得到的地址與數據0xe59ff000做邏輯或,從而得到將要寫到中斷向量表中的數據讀取指令的編碼。(5) 將中斷處理程序的地址放到相應的存儲單元中。179.4SWI異常中斷處理程序通過SWI異常中斷,用戶模式的應用程序可以調用系統(tǒng)模式下的代碼。在實時操作系統(tǒng)中,通常使用SWI異常中斷為用戶應用程序提供系統(tǒng)功能調用。189.4.1SWI異常中斷處理程序的實現(xiàn)1.第1級SWI異常中斷處理程序2.使用匯編程序的第2級SWI異常中斷處理程序3.使用C程序的第2級SWI異常中斷處理程序199.4.2SWI異常中斷調用1.在特權模式下調用SWI2.從應用程序中調用SWI3.從應用程序中動態(tài)調用SWI209.5FIQ和IRQ異常中斷處理程序ARM提供的FIQ和IRQ異常中斷用于外部設備向CPU請求中斷服務。這兩個異常中斷的引腳都是低電平有效的。當前程序狀態(tài)寄存器CPSR的I控制位可以屏蔽這兩個異常中斷請求:當程序狀態(tài)寄存器CPSR中的I控制位為1時,F(xiàn)IQ和IRQ異常中斷被屏蔽;當程序狀態(tài)寄存器CPSR中的I控制位為0時,CPU正常響應FIQ和IRQ異常中斷請求。FIQ異常中斷為快速異常中斷,它比IRQ異常中斷優(yōu)先級高,這主要表現(xiàn)在如下兩個方面:當FIQ和IRQ異常中斷同時產生時,CPU先處理FIQ異常中斷。在FIQ異常中斷處理程序中,IRQ異常中斷被禁止。219.5.1IRQ/FIQ異常中斷處理程序1.不可重入的IRQ/FIQ異常中斷處理程序保存APCS規(guī)定的被破壞的寄存器。保存其他中斷處理程序中用到的寄存器。同時將(LR-4)賦予程序計數器PC,實現(xiàn)中斷處理程序的返回,并且恢復CPSR寄存器的內容。2.可重入的IRQ/FIQ異常中斷處理程序(1) 將返回地址保存到IRQ的數據棧中。(2) 保存工作寄存器和SPSR_irq。(3) 清除中斷標志位。(4) 將處理器切換到系統(tǒng)模式,重新使能中斷(IRQ/FIQ)。(5) 保存用戶模式的LR寄存器和被調用者不保存的寄存器。(6) 調用C語言的IRQ/FIQ異常中斷處理程序。(7) 當C語言的IRQ/FIQ異常中斷處理程序返回后,恢復用戶模式的寄存器,并禁止中斷(IRQ/FIQ)。(8) 切換到IRQ模式,禁止中斷。(9) 恢復工作寄存器和寄存器LR_irq。(10) 從IRQ異常中斷處理程序中返回。229.5.2IRQ異常中斷處理程序舉例本例中有多達32個中斷源,每個中斷源對應一個單獨的優(yōu)先級值,優(yōu)先級的取值范圍為0~31。假設系統(tǒng)中的中斷控制器的基地址為IntBase,存放中斷優(yōu)先級值的寄存器的偏移地址為IntLevel。寄存器R13指向一個FD類型的數據棧。例子的源代碼如程序9.13中所示。程序9.13多中斷源的IRQ異常中斷處理程序:參見教材P301239.6復位異常中斷處理程序復位異常中斷處理程序在系統(tǒng)加電或復位時執(zhí)行,它將進行一些初始化工作,具體內容與具體系統(tǒng)相關,然后程序控制權交給應用程序,因而復位異常中斷處理程序不需要返回。下面是通常在復位異常中斷處理程序中進行的一些處理:設置異常中斷向量表。初始化數據棧和寄存器。初始化存儲系統(tǒng),如系統(tǒng)中的MMU等(如果系統(tǒng)中包含這些部件的話)。初始化一些關鍵的I/O設備。使用中斷。將處理器切換到合適的模式。初始化C語言環(huán)境變量,跳轉到應用程序執(zhí)行。249.7未定義指令異常中斷這種仿真的處理過程類似于SWI異常中斷的功能調用。在SWI異常中斷的功能調用中通過讀取SWI指令中的24位(位[23:0])立即數,判斷具體請求的SWI功能。這種仿真機制的操作過程如下。(1) 將仿真程序設置成未定義指令異常中斷的中斷處理程序(鏈接到未定義指令異常中斷的中斷處理程序鏈中),并保存原來的中斷處理程序。(2) 讀取該未定義指令的位[27:24],判斷該未定義指令是否是一個協(xié)處理器指令。(3) 如果不仿真該未定義指令,則程序跳轉到原來的未定義指令異常中斷的中斷處理程序中執(zhí)行。Thumb指令集中不包含協(xié)處理器指令,因而不需要這種指令仿真機制。259.8指令預取中止異常中斷處理程序如果系統(tǒng)中不包含MMU,指令預取中止異常中斷處理程序只是簡單地報告錯誤,然后退出。如果系統(tǒng)中包含MMU,則發(fā)生錯誤的指令觸發(fā)虛擬地址失效,在該失效處理程序中重新讀取該指令。指令預取中止異常中斷是由錯誤的指令執(zhí)行時被觸發(fā)的,這時LR_abt寄存器還沒有被更新,它指向該指令的下面一條指令。因為該有問題的指令要被重新讀取,因而應該返回到該有問題的指令,即返回到(LR_abt-4)處。269.9數據

溫馨提示

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

評論

0/150

提交評論