ARM處理器異常模式

發(fā)布時間:2024-03-05
只要正常的程序流被暫時中止,處理器就進入異常模式。例如響應一個來自外設的中斷。在處理異常之前,arm7tdmi內核保存當前的處理器狀態(tài),這樣當處理程序結束時可以恢復執(zhí)行原來的程序。如果同時發(fā)生兩個或更多異常,那么將按照固定的順序來處理異常,詳見“異常優(yōu)先級”部分。
關于“異常的入口和出口處理”:如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復用戶寄存器并實現(xiàn)返回。
關于“進入異常”:在異常發(fā)生后,arm7tdmi內核會作以下工作:
1.在適當?shù)膌r中保存下一條指令的地址,當異常入口來自:
arm狀態(tài),那么arm7tdmi將當前指令地址加4或加8復制(取決于異常的類型)到lr中;
為thumb狀態(tài),那么arm7tdmi將當前指令地址加4或加8 (取決于異常的類型)復制到lr中;異常處理器程序不必確定狀態(tài)。
2.將cpsr復制到適當?shù)膕psr中;
3. 將cpsr模式位強制設置為與異常類型相對應的值;
4.強制pc從相關的異常向量處取指。
arm7tdmi內核在中斷異常時置位中斷禁止標志,這樣可以防止不受控制的異常嵌套。
注:異??偸窃赼rm狀態(tài)中進行處理。當處理器處于thumb狀態(tài)時發(fā)生了異常,在異常向量地址裝入pc時,會自動切換到arm狀態(tài)。
關于“退出異?!保寒敭惓=Y束時,異常處理程序必須:
1.將lr中的值減去偏移量后存入pc,偏移量根據(jù)異常的類型而有所不同;
2.將spsr的值復制回cpsr;
3.清零在入口置位的中斷禁止標志。
注:恢復cpsr的動作會將t、f和i位自動恢復為異常發(fā)生前的值。
下面利用,圖示來演示“進入異常”過程:
1. 程序在系統(tǒng)模式下運行用戶程序,假定當前處理器狀態(tài)為thumb狀態(tài)、允許irq中斷;
2. 用戶程序運行時發(fā)生irq中斷,硬件完成以下動作:
(1)將cpsr寄存器內容存入irq模式的spsr寄存器
(2)置位i位(禁止irq中斷)
(3)清零t位(進入arm狀態(tài))
(4)設置mod位,切換處理器模式至irq模式
(5)將下一條指令的地址存入irq模式的lr寄存器
(6)將跳轉地址存入pc,實現(xiàn)跳轉
圖示“退出異?!边^程:
在異常處理結束后,異常處理程序完成以下動作:
(1)將spsr寄存器的值復制回cpsr寄存器;
(2)將lr寄存的值減去一個常量后復制到pc寄存器,跳轉到被中斷的用戶程序。
下面講講“快速中斷請求”:快速中斷請求(fiq)適用于對一個突發(fā)事件的快速響應,這得益于在arm狀態(tài)中,快中斷模式有8個專用的寄存器可用來滿足寄存器保護的需要(這可以加速上下文切換的速度)。
不管異常入口是來自arm狀態(tài)還是thumb狀態(tài),fiq處理程序都會通過執(zhí)行下面的指令從中斷返回: subs pc,r14_fiq,#4
在一個特權模式中,可以通過置位cpsr中的f位來禁止fiq異常。
關于“中斷請求”:中斷請求(irq)異常是一個由nirq輸入端的低電平所產(chǎn)生的正常中斷(在 具體的芯片中,nirq由片內外設拉低,nirq是內核的一個信號,對用戶不可見)。irq的優(yōu)先級 低于fiq。對于fiq序列它是被屏蔽的。任何時候在一個特權模式下,都可通過置位cpsr中的i 位來禁止irq。
不管異常入口是來自arm狀態(tài)還是thumb狀態(tài),fiq處理程序都會通過執(zhí)行下面的指令從中斷返回: subs pc,r14_fiq,#4
關于“中止”:中止發(fā)生在對存儲器的訪問不能完成時,中止包含兩種類型:
(1)預取中止:發(fā)生在指令預取過程中
(2)數(shù)據(jù)中止:發(fā)生在對數(shù)據(jù)訪問時
中止——預取指中止:當發(fā)生預取中止時,arm7tdmi內核將預取的指令標記為無效,但在指 令到達流水線的執(zhí)行階段時才進入異常。如果指令在流水線中因為發(fā)生分支而沒有被執(zhí)行,中止將不會發(fā)生。在處理中止的原因之后,不管處于哪種處理器操作狀態(tài),處理程序都會執(zhí)行下面的指令恢復pc和cpsr并重試被中止的指令: subs pc,r14_abt,#4
中止——數(shù)據(jù)中止:當發(fā)生數(shù)據(jù)中止后,根據(jù)產(chǎn)生數(shù)據(jù)中止的指令類型作出不同的處理:
(1)數(shù)據(jù)轉移指令(ldr、str)回寫到被修改的基址寄存器。中止處理程序必須注意這一點;
(2)交換指令(swp)中止好像沒有被執(zhí)行過一樣(中止必須發(fā)生在swp指令進行讀訪問時);
(3)塊數(shù)據(jù)轉移指令(ldm,stm)完成。 當回寫被設置時,基址寄存器被更新。在指示出現(xiàn)中止后,arm7tdmi內核防止所有寄存器被覆蓋。這意味著arm7tdmi內核總是會保護被中止的ldm指令中的r15(總是最后一個被轉移的寄存器)。
在修復產(chǎn)生中止的原因后,不管處于哪種處理器操作狀態(tài),處理程序都必須執(zhí)行下面的返回指令 : subs pc,r14_abt,#8
關于“軟件中斷指令”:使用軟件中斷(swi)指令可以進入管理模式,通常用于請求一個特定的管理函數(shù)。swi處理程序通過執(zhí)行下面的指令返回: movs pc,r14_svc
這個動作恢復了pc和cpsr并返回到swi之后的指令。swi處理程序讀取操作碼以提取swi函數(shù)編號。
關于“未定義的指令”:當arm7tdmi處理器遇到一條自己和系統(tǒng)內任何協(xié)處理器都無法處理的指令時,arm7tdmi內核執(zhí)行未定義指令陷阱。軟件可使用這一機制通過模擬未定義的協(xié)處理器指令來擴展arm指令集。
注:arm7tdmi處理器完全遵循arm結構v4t,可以捕獲所有分類未被定義的指令位格式。在模擬處理了失敗的指令后,陷阱程序執(zhí)行下面的指令:movs pc,r14_svc
這個動作恢復了pc和cpsr并返回到未定義指令之后的指令。
關于“異常優(yōu)先級”:當多個異常同時發(fā)生時,一個固定的優(yōu)先級系統(tǒng)決定它們被處理的順序:
注意:(1)未定義的指令和swi異?;コ狻R驗橥粭l指令不能既是未定義的,又能產(chǎn)生有效的軟件中斷;
(2)當fiq使能,并且fiq和數(shù)據(jù)中止異常同時發(fā)生時,arm7tdmi內核首先進入數(shù)據(jù)中止處理程序,然后立即跳轉到fiq向量。在fiq處理結束后返回到數(shù)據(jù)中止處理程序。數(shù)據(jù)中止的優(yōu)先級必須高于fiq以確保數(shù)據(jù)轉移錯誤不會被漏過。
上一個:茶為什么可以叫做“萬病之藥”?
下一個:2021年玩cf電腦配置推薦(推薦玩cf的電腦配置)

iphone車載carplay在哪里(蘋果手機上carplay在哪)
解析域名方法,你都學會了嗎?
老筆記本換固態(tài)硬盤換多大的,筆記本換多大的固態(tài)硬盤夠用
目前買啥手機劃算(買什么手機劃算,性能還比較好的)
美版5S怎么查詢有無鎖,iphone5有無鎖怎么查詢
win10電腦開機后黑屏有鼠標(window10開機黑屏有鼠標)
聯(lián)想系統(tǒng)自帶的office在哪個文件夾(聯(lián)想自帶的office是什么版本)
屋子里彌漫著的茶香
非洲豬瘟檢測儀器及配套設備明細《臺風資訊》
氣彈簧性能試驗機/試驗機 型號:DP-S50A 參照標準
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos