<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM基礎(chǔ)知識教程(三):ARM中異常中斷的種類

          ARM基礎(chǔ)知識教程(三):ARM中異常中斷的種類

          作者: 時間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
          **復(fù)位(RESET)**

          當處理器復(fù)位引腳有效時,系統(tǒng)產(chǎn)生復(fù)位異常中斷,程序跳轉(zhuǎn)到復(fù)位異常中斷處理程序處執(zhí)行。復(fù)位異常中斷通常用在下面幾種情況下:系統(tǒng)加電時;系統(tǒng)復(fù)位時;跳轉(zhuǎn)到復(fù)位中斷向量處執(zhí)行成為軟復(fù)位。

          本文引用地址:http://www.ex-cimer.com/article/201611/317748.htm

          **未定義的指令**
          ARM處理器或者是系統(tǒng)中的協(xié)處理器認為當前指令未定義時,產(chǎn)生未定義的指令異常中斷,可以通過改異常中斷機制仿真浮點向量運算。

          **軟件中斷**
          這是一個由用戶定義的中斷指令。可用于用戶模式下的程序調(diào)用特權(quán)操作指令。在實時操作系統(tǒng)中可以通過該機制西線系統(tǒng)功能調(diào)用。

          **指令與取終止(PrefechAbort)**
          如果處理器預(yù)取的指令的地址不存在,或者該地址不允許當前指令訪問,當被預(yù)取的指令執(zhí)行時,處理器產(chǎn)生指令預(yù)取終止異常中斷。

          **數(shù)據(jù)訪問終止(DATAABORT)
          如果數(shù)據(jù)訪問指令的目標地址不存在,,或者該地址不允許當前指令訪問,處理器產(chǎn)生數(shù)據(jù)訪問終止異常中斷

          **外部中斷請求(IRQ)**
          當處理器的外部中斷請求引腳有效,而且CPSR的寄存器的I控制位被清除時,處理器產(chǎn)生外部中斷請求異常中斷。系統(tǒng)中個外設(shè)通過該異常中斷請求處理服務(wù)。

          **快速中斷請求(FIQ)**
          當處理器的外部快速中斷請求引腳有效,而且CPSR的F控制位被清除時,處理器產(chǎn)生外部中斷請求異常中斷

          異常中斷向量表及異常中斷優(yōu)先級
          中斷向量表指定了個異常中斷及其處理程序的對應(yīng)關(guān)系。他通常存放在存儲地址的低端。在ARM體系中,異常中斷向量表的大小為32字節(jié),其中每個異常中斷占據(jù)4個字節(jié)大小,保留了4個字節(jié)空間。
          每個異常中斷對應(yīng)的中斷向量表中的4個字節(jié)的空間中存放了一個跳轉(zhuǎn)指令或者一個向PC寄存器中賦值的數(shù)據(jù)訪問指令。通過這兩種指令,程序?qū)⑻D(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。當幾個異常中斷同時發(fā)生時,就必須按照一定的次序來處理這些異常中斷。

          各個異常中斷的中斷向量地址以及中斷的處理優(yōu)先級
          中斷向量地址 異常中斷類型 異常中斷模式 優(yōu)先級(6最低)
          0x00 復(fù)位 特權(quán)模式 1
          0x04 未定義的指令 未定義指令終止模式 6
          0x08 軟件中斷 特權(quán)模式 6
          0x0C 指令預(yù)取終止 終止模式 5
          0x10 數(shù)據(jù)訪問終止 終止模式 2
          0x14 保留 未使用 未使用
          0x18 外部中斷請求 IRQ模式 4
          0x1C 快速中斷請求 FIQ模式 3

          在應(yīng)用程序中安裝異常中斷處理程序
          1.使用跳轉(zhuǎn)指令:可以在異常中斷對應(yīng)異常向量表中特定位置放置一條跳轉(zhuǎn)指令,直接跳轉(zhuǎn)到該異常中斷的處理程序。這種方法有一個缺點,即只能在32M空間范圍內(nèi)跳轉(zhuǎn)。
          2.使用數(shù)據(jù)讀取指令LDR:使用數(shù)據(jù)讀取指令LDR向程序計數(shù)器PC中直接賦值。這種方法分為兩步:先將異常中斷處理程序的絕對地址存放在存放在距離向量表4KB范圍內(nèi)的一個存儲單元中;再使用數(shù)據(jù)讀取指令LDR將該單元的內(nèi)容讀取到程序計數(shù)器PC中。 **在系統(tǒng)復(fù)位時安裝異常中斷處理程序**
          1.地址0x00處為ROM的情況
          使用數(shù)據(jù)讀取指令LDR示例如下所示:
          Vector_Init_Block
          LDR PC, Reset_Addr
          LDR PC, Undefined_Addr
          LDR PC, SW_Addr
          LDR PC, Prefeth_Addr
          LDR PC, Abort_Addr
          NOP
          LDR PC, IRQ_Addr
          LDR PC, FIQ_Addr

          Reset_Addr DCD Start_Boot
          Undefined_Addr DCD Undefined_Handle
          SW_Addr DCD SWI_Handle
          Prefeth_Addr DCD Prefeth_Handle
          Abort_Addr DCD Abort_Handle
          DCD 0
          IRQ_Addr DCD IRQ_Handle
          FIQ_Addr DCD FIQ_Handle
          使用跳轉(zhuǎn)指令的示例如下所示:
          Vector_Init_Block
          BL Reset_Handle
          BL DCD Undefined_Handle
          BL SWI_Handle
          BL Prefeth_Handle
          BL Abort_Handle
          NOP
          BL IRQ_Handle
          BL FIQ_Handle
          2.地址0x00處為RAM的情況
          地址0x00處為RAM時,中斷向量表必須使用數(shù)據(jù)讀取指令直接指向PC中賦值的形式。而且,必須使用下面的代碼巴中斷向量表從ROM中復(fù)制到RAM中地址0x00開始處的存儲空間中:

          MOV r8,#0
          ADR r9,Vector_Init_Block
          ;復(fù)制中斷向量表(8字)
          LDMIA r9!,(r0-r7)
          STMIA r8!,(r0-r7)
          ;復(fù)制保存各中斷處理函數(shù)地址的表(8字words)
          LDMIA r9!,(r0-r7)
          STMIA r8!,(r0-r7)



          關(guān)鍵詞: ARM基礎(chǔ)知識異常中

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();