ARM的異常中斷機制 .

來源:互聯網
上載者:User

在我們平時使用電腦時我們敲擊鍵盤,電腦會對我做出響應。這是什麼原因呢?處理器又是如何響應外圍請求的呢?其實這都是通過處理器的中斷機制實現的。ARM又是怎樣的中斷機制?讓我們一起探討吧!

在ARM處理器裡主要是通過3中情況在控製程序執行的:
1.流水方式執行程式,PC的值是下一條指令的地址,即每執行一條指令PC都加一個字的位移。
2.通過跳轉指令來控製程序執行。
   B 跳轉到指定的指令處執行。
   BL 跳轉執行,儲存子程式地址並返回。
   BX 跳轉執行並切換到Thumb狀態。
   BLX 三種方式組合。
3.通過異常中斷機制控製程序執行。
   當異常中斷髮生時,系統執行完當前指令後,將跳轉到相應的異常中斷處理常式處執行。在進入異常中斷處理常式執行完時,程式返回到發生到產生中斷指令的下一條指令處執行。在進入異常中斷處理常式時,要儲存被中斷的程式的執行現場,從異常中斷處理常式退出時,要恢複被中斷的程式的執行現場。
在實際情況中ARM處理器在控製程序執行時往往是以上3種方式結合執行的。

ARM有以下幾種異常中斷種類:

異常中斷名稱  含義
Reset    複位中斷,
當處理器複位引腳有效時,如系統產生複位中斷則跳轉至複位中斷例外處理常式處執行。
有兩種情況:
系統加電,
系統複位
Undefined instruction   當ARM處理器認為當前指令未定義時,產生未定義的指令異常中斷。
Software interrupt 非強制中斷,這是有使用者定義的中斷指令。可用於使用者模式下的程式調用的特權操作指令,在RTOS中可以通過該機制實現系統功能調用。
Prefech Abort  指令預取中止,預讀指令地址不存在或不能訪問則產生該中斷。
Data Abotr  資料訪問中止,資料訪問指令地址不存在或不能訪問則產生該中斷。
IRQ  外部插斷要求,當處理器外部引腳有效時,且CPSR的寄存器I被清除時,產生該中斷,並調用中斷服務子程式。
FIQ 快速插斷要求,當處理器快速外部引腳有效時,且CPSR的寄存器F被清除時,產生該中斷,並調用中斷服務子程式。

呵呵,讓我們來看看ARM的異常中斷響應過程吧!
1.儲存處理器目前狀態、中斷屏蔽位及各條件標誌位。怎樣儲存呢?
  ARM的6種模式下都有自己的SPSR,它就是通過把當前的CPSR儲存到將要執行異常中斷的SPSR_mode實現的。
2.設定當前的CPSR的相應的標誌位。
  設定M、I、F等控制位。
3.將lr_mode設成返回地址。
4.將PC指向中斷向量表的地址,跳轉到對應的中斷服務程式處執行。
5.恢複被中斷處理的處理器狀態。(將SPSR_mode複製到CPSR)
6.返回到發生異常中斷的下一條指令處執行。(即PC = lr_mode)

用虛擬碼描述如下:
lr_mode = pc
spsr_mode = cpsr
cpsr[4:0] =  exception mode
if <exception mode> == Reset or FIQ then
    cpsr[6] = 1
cpsr[7] = 1
pc = exception mode vector address
cpsr = spsr_mode
pc = lr_mode

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.