ARM異常中斷處理概述 當正常的程序執行流程發生暫時的停止時,稱之為異常,例如處理一個外部的中斷請求。在處理異常之前,當前處理器的狀態必須保留,這樣當異常處理完成之后,當前程序可以繼續執行。處理器允許多個異常同時發生,它們將會按固定的優先級進行處理。 ARM體系結構所支持的異常類型 異常類型 具體含義 異常向量表(Exception Vectors) 地址 異常 進入模式 0x0000,0000 復位 管理模式 ox0000,0004 未定義指令 未定義模式 0x0000,0008 軟件中斷 管理模式 0x0000,000c 中止(預存指令) 中止模式 0x0000,0010 中止(數據) 中止模式 0x0000,0014 保留 保留 0x0000,0018 IRQ IRQ 0x0000,001c FIQ FIQ 異常優先級(Exceprion Priorities) 優先級 異常 1(最高) 復位 2 數據中止 3 FIQ 4 IRQ 5 預取指令 6(最低) 未定義指令、SWI 對異常的響應 當一個異常出現以后,ARM微處理器會執行以下幾步操作 1、將下一條指令的地址存入相應連接寄存器LR,以便程序在處理異常返回時能從正確的位置重新開始執行。 異常處理完畢之后,ARM微處理器會執行以下幾步操作從異常返回: 1、將連接寄存器LR的值減去相應的偏移量后送到PC中。 可以認為應用程序總是從復位異常處理程序開始執行的,因此復位異常處理程序不需要返 中斷處理程序的安裝 一般在系統的啟動代碼中安裝異常處理程序。大致可以分為兩種情況: 1、地址處存儲器為ROM/FLASH 在ROM/FLASH中安裝中斷處理程序 在ROM/FLASH的異常中斷向量表中,可以使用LDR指令直接向程序計數器PC中賦值,也可以直接使用跳轉指令轉到異常中斷處理程序。 當0地址處為ROM時,將跳轉指令安裝在0地址處: ;為中斷向量分配地址空間,此空間處為RAM的地址 RAM中安裝中斷處理程序 當0地址處為RAM時,中斷向量表必須使用數據讀取指令直接指向PC中賦值的形式。而且必須把中斷向量從ROM中復制到RAM地址的0地址處。 MOV r8, #0 ; ARM處理器共有7種不同的處理器模式: 1、用戶模式(User)2、快速中斷模式(FIQ)3、外部中斷模式(IRQ)4、特權模式(SVC)5、數據訪問中止模式(ABT)6、未定義指令中止模式(UND)7、系統模式(SYS)
![]() 除了用戶模式以外的其他6種處理器模式稱為特權模式。在這些模式下,程序可以訪問所有的系統資源,也可以任意地進行處理器的模式切換。ARM內部寄存器和一些片內外設在硬件設計上只允許(或者可選為只允許)特權模式下訪問。此外,特權模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。 其中,除了用戶模式、系統模式以外,其他5種特權模式又稱為異常模式。它們除了可以通過程序切換進入外,也可以由特定的異常進入。當特定的異常出現時,處理器進入相應的模式。每種異常模式都有一些獨立的寄存器,以避免異常退出時用戶模式的狀態不可靠。 用戶和系統模式這兩種模式都不能由異常進入,而且它們使用完全相同的寄存器組。 系統模式是特權模式,不受用戶模式的限制。操作系統在該模式下訪問用戶模式的寄存器就比較方便,而且操作系統的一些特權任務可以使用這個模式訪問一些受控的資源。 |
|