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

          新聞中心

          ARM中的異常和中斷

          作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
          ARM處理器中主要有7個(gè)異常(2個(gè)中斷異常):


          1、復(fù)位異常;在以ARM為核的單片機(jī)中,常把下列事件作為引起復(fù)位的原因。

          • 上電復(fù)位:在上電后,復(fù)位使內(nèi)部達(dá)到預(yù)定的狀態(tài),特別是程序跳到初始入口;

          •復(fù)位引腳上的復(fù)位脈沖:這是由外部其他控制信號(hào)引起的;

          • 對(duì)系統(tǒng)電源檢測(cè)發(fā)現(xiàn)過壓或欠壓;

          • 時(shí)鐘異常復(fù)位。

          ARM處理器復(fù)位后,處理器硬件將進(jìn)行以下操作:

          • 強(qiáng)制進(jìn)入管理模式;

          • 強(qiáng)制進(jìn)入ARM狀態(tài);

          • 跳轉(zhuǎn)到絕對(duì)地址PC=0x00000000處執(zhí)行;

          • 禁止IRQ中斷和FIQ中斷。

          復(fù)位后,程序狀態(tài)寄存器如下:

          本文引用地址:http://www.ex-cimer.com/article/201611/317585.htm
          ......
          I
          F
          T
          M4
          M3
          M2
          M1
          M0
          1
          1
          0
          1
          0
          0
          1
          1

          上電復(fù)位后,進(jìn)入管理模式,執(zhí)行操作系統(tǒng)程序,一般用做對(duì)系統(tǒng)初始化,例如開中斷等;然后切換到用戶模式,開始執(zhí)行正常的用戶程序。

          切換到用戶模式可使用下列程序:

          MRS R0,CPSR ;讀狀態(tài)寄存器
          BIC R0,R0,#03;把末兩位清0
          MSR CPRS_c,R0;把修改后的值加載給狀態(tài)寄存器,切換結(jié)束
          ......;用戶程序

          2、未定義指令異常;由于ARM使用32位代碼,包含的信息量很大,可達(dá)2的31方(4G)。ARM指令集不能用盡所有代碼。當(dāng)ARM處理器遇到無(wú)法譯碼的指令時(shí)就會(huì)發(fā)

          生未定義指令異常。進(jìn)入中斷處理程序。

          ARM的未定義指令異常有以下兩種情況:

          (1)遇到一條無(wú)法執(zhí)行的指令,此指令沒有定義;

          (2)執(zhí)行一條對(duì)協(xié)處理器的操作指令,在正常情況下,協(xié)處理器應(yīng)該應(yīng)答,但協(xié)處理器沒有應(yīng)答。

          未定義異常中斷時(shí),狀態(tài)寄存器中的F位不變。使用下列指令退出異常中斷,返回原程序 。

          • 把下一條指令的地址拷貝給LR;

          • 把程序狀態(tài)寄存器CPSR拷貝給SPSR_und;

          • 強(qiáng)制進(jìn)入未定義模式;

          • 強(qiáng)制進(jìn)入到ARM模式;

          • 跳轉(zhuǎn)到絕對(duì)地址PC=0x00000004處執(zhí)行;

          • 禁止IRQ中斷。

          進(jìn)入中斷后,程序狀態(tài)寄存器如下:

          ......
          I
          F
          T
          M4
          M3
          M2
          M1
          M0
          1
          x
          0
          1
          1
          0
          1
          1

          MOVS PC,R14.

          3、軟件中斷異常;是由指令SWI引起的。程序在執(zhí)行這一指令后,進(jìn)入異常中斷。處理器響應(yīng)中斷,硬件執(zhí)行如下的操作。

          • 把下一條指令的地址拷貝給LR;

          • 把程序狀態(tài)寄存器CPSR拷貝給SPSR_svc;

          • 強(qiáng)制進(jìn)入管理模式;

          • 強(qiáng)制進(jìn)入到ARM狀態(tài);

          • 跳轉(zhuǎn)到絕對(duì)地址PC=0x00000008處執(zhí)行;

          • 禁止IRQ中斷。

          進(jìn)入中斷后的程序狀態(tài)寄存器如下:

          ......
          I
          F
          T
          M4
          M3
          M2
          M1
          M0
          1
          x
          0
          1
          0
          0
          1
          1

          軟件中斷處理程序完成后,使用下列指令返回到原中斷處:MOVS PC,R14.

          4、預(yù)取指中止異常;由程序存儲(chǔ)器引起的中止異常叫做預(yù)取指中止異常;由數(shù)據(jù)存儲(chǔ)器引起的中止異常叫做數(shù)據(jù)中止異常。由于ARM的指令是3級(jí)流水線結(jié)構(gòu),讀

          指令周期是提前進(jìn)行的,因此把讀取指令的過程一般稱預(yù)取指。如果在取得指令的同時(shí)程序存儲(chǔ)器發(fā)出中止信號(hào),則ARM處理器把這一條指令標(biāo)記位無(wú)效,然后等待執(zhí)

          行。有兩種可能如下:

          • 當(dāng)執(zhí)行這條指令前程序發(fā)生跳轉(zhuǎn),則這條無(wú)效指令不引起異常中斷;

          • 當(dāng)執(zhí)行到這條指令時(shí),處理器會(huì)發(fā)生預(yù)取指中止異常,引起中斷。

          當(dāng)記進(jìn)入預(yù)取指異常中斷時(shí),處理器硬件響應(yīng)中斷,執(zhí)行以下的操作:

          • 把中斷時(shí)PC的地址拷貝給LR;

          • 把程序狀態(tài)寄存器CPSR拷貝給SPSR_abt;

          • 強(qiáng)制進(jìn)入中止異常模式;

          • 強(qiáng)制進(jìn)入到ARM狀態(tài);

          • 跳轉(zhuǎn)到絕對(duì)地址PC=0x0000000C處執(zhí)行;

          • 禁止IRQ中斷。

          進(jìn)入中斷后,程序狀態(tài)寄存器如下:

          ......
          I
          F
          T
          M4
          M3
          M2
          M1
          M0
          1
          x
          0
          1
          0
          1
          1
          1

          預(yù)取指中止異常中斷返回時(shí),應(yīng)該執(zhí)行下列指令:SUBS PC,R14,#4.

          5、數(shù)據(jù)中止異常;ARM處理器訪問數(shù)據(jù)存儲(chǔ)器時(shí),在讀取數(shù)據(jù)的同時(shí)數(shù)據(jù)存儲(chǔ)器發(fā)出了中止信號(hào),引起數(shù)據(jù)中止異常。

          數(shù)據(jù)中止異常中斷服務(wù)程序返回時(shí),使用下列指令:

          SUBS PC,R14,#8

          上述指令是返回到中斷時(shí)所執(zhí)行的指令,目的是再一次從數(shù)據(jù)存儲(chǔ)器中讀取數(shù)據(jù)。如果不再一次讀取數(shù)據(jù),則執(zhí)行下一條指令,此時(shí)使用下列指令返回:

          SUBS PC,R14,#4

          • 把中斷時(shí)的PC的地址拷貝給LR;

          • 把程序狀態(tài)寄存器CPSR拷貝給SPSR_abt;

          • 強(qiáng)制進(jìn)入中止異常模式;

          •強(qiáng)制進(jìn)入到ARM狀態(tài);

          • 跳轉(zhuǎn)到絕對(duì)地址PC=0x00000010處執(zhí)行;

          • 禁止IRQ中斷。

          進(jìn)入中斷后,程序狀態(tài)寄存器如下:

          ......
          I
          F
          T
          M4
          M3
          M2
          M1
          M0
          1
          x
          0
          1
          0
          1
          1
          1

          6、中斷請(qǐng)求(IRQ)異常;例如:定時(shí)器中斷、串行口通訊中斷、外部信號(hào)中斷和A/D處理中斷等。IRQ中斷是可屏蔽的。在狀態(tài)寄存器中的I位就是IRQ的屏蔽位

          。當(dāng)I=1時(shí)。則屏蔽IRQ中斷,當(dāng)I=0時(shí),則允許中斷。處理器復(fù)位后置I為1,關(guān)閉中斷。

          當(dāng)發(fā)生IRQ中斷時(shí),處理器硬件響應(yīng)中斷,執(zhí)行下列操作:

          • 把中斷時(shí)的PC的地址值拷貝給LR;

          • 把程序狀態(tài)寄存器CPSR拷貝給SPSR_irq;

          • 強(qiáng)制進(jìn)入IRQ異常模式;

          •強(qiáng)制進(jìn)入到ARM狀態(tài);

          • 跳轉(zhuǎn)到絕對(duì)地址PC=0x00000018處執(zhí)行;

          • 禁止IRQ中斷。

          進(jìn)入中斷后,程序狀態(tài)寄存器如下:

          ......
          I
          F
          T
          M4
          M3
          M2
          M1
          M0
          1
          x
          0
          1
          0
          0
          1
          0

          完成中斷處理后,程序執(zhí)行下列返回原中斷處:SUBS PC.R14,#4.

          7、快速中斷(FIQ)請(qǐng)求異常;FIQ快速中斷是可屏蔽的。在狀態(tài)寄存器中的F位就是FIQ的屏蔽位。當(dāng)F=1時(shí)。則屏蔽FIQ中斷,當(dāng)F=0時(shí),則允許中斷。處理器復(fù)

          位后置F為1,關(guān)閉中斷。

          當(dāng)發(fā)生IRQ中斷時(shí),處理器硬件響應(yīng)中斷,執(zhí)行下列操作:

          • 把中斷時(shí)的PC的地址值拷貝給LR;

          • 把程序狀態(tài)寄存器CPSR拷貝給SPSR_fiq;

          • 強(qiáng)制進(jìn)入FIQ異常模式;

          •強(qiáng)制進(jìn)入到ARM狀態(tài);

          • 跳轉(zhuǎn)到絕對(duì)地址PC=0x0000001C處執(zhí)行;

          • 禁止FIQ中斷。

          進(jìn)入中斷后,程序狀態(tài)寄存器如下:

          ......
          I
          F
          T
          M4
          M3
          M2
          M1
          M0
          1
          x
          0
          1
          0
          0
          0
          1

          完成中斷處理后,程序執(zhí)行下列返回原中斷處:SUBS PC.R14,#4




          關(guān)鍵詞: ARM異常中

          評(píng)論


          技術(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); })();