ARM及嵌入式開發近年越來越熱,特別是android與linux在手機、平板等許多消費類電子及工業設備中越來越成熟的應用。同學們在嵌入式培訓學習過程中會遇到很多問題,其中一個就是——ARM的異常中斷響應過程是怎樣的?
當發生異常時,除了復位異常立即中止當前指令外,處理器盡量完成當前指令,然后脫離當前的指令處理序列去處理異常。嵌入式培訓總結ARM異常處理器對異常中斷響應過程是這樣子的:
① 將CPSR的內存保存到將要執行的異常中斷對應的SPSR中,以實現對處理器當前狀態、中斷屏蔽及各條件標志位的保存。各異常中斷模式都有自己相應的物理SPSR寄存器。
② 設置當前狀態寄存器CPSR中的相應位。
設置CPSR模式控制位CPSR[4:0],,是處理器進入相應的執行模式;
設置中斷標志位(CPSR[6]=1),禁止IRQ中斷;
當進入Reset或FIQ模式時,還要設置中斷標志位(CPSR[7]=1),禁止FIQ中斷。
③ 將引起異常指令的下一條指令的地址保存到新的異常工作模式的R14即R14_mode中,使異常處理程序執行完后能正確返回原程序。
④ 給程序計數器強制賦值,是程序從ARM體系中的異常工作模式表中給出的相應的矢量地址開始執行中斷處理程序。一般來說,矢量地址處將包含一條指向相應程序的轉移指令,從而可跳轉到相應的異常中斷處理程序處執行異常中斷處理程序。
ARM處理器對異常的響應過程可用偽代碼描述:
R14_<exception_mode>=return link
SPSR_<exception_mode>=CPSR
CPSR[4:0]=exception mode number
CPSR[5]=0
CPSR[6]=1
If<exception-mode>=Reset or FIQ then
CPSR[7]=1
PC=exception vector address
上面每個異常模式對應有2個寄存器R13_<mode>、 R14_<mode>,分別保存相應模式下的堆棧指針、返回地址。堆棧指針可用來定義一個存儲區域保存其他用戶寄存器,這樣異常處理程序就可使用這些寄存器。
FIQ模式還有額外的專用寄存器R8_fiq~R12_fiq,使用這些寄存器可加快快速中斷的處理速度。
ARM嵌入式培訓機構哪個好?粵嵌嵌入式培訓開設了適合零基礎學員的階梯式課程安排,不僅有適合零基礎的學習的基礎班,更有適合有基礎的就業班,歡迎你來學習。