<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM中的異常和中斷

ARM中的異常和中斷

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


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

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

•復位引腳上的復位脈沖:這是由外部其他控制信號引起的;

• 對系統電源檢測發(fā)現過(guò)壓或欠壓;

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

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

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

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

• 跳轉到絕對地址PC=0x00000000處執行;

• 禁止IRQ中斷和FIQ中斷。

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

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

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

切換到用戶(hù)模式可使用下列程序:

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

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

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

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

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

(2)執行一條對協(xié)處理器的操作指令,在正常情況下,協(xié)處理器應該應答,但協(xié)處理器沒(méi)有應答。

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

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

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

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

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

• 跳轉到絕對地址PC=0x00000004處執行;

• 禁止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引起的。程序在執行這一指令后,進(jìn)入異常中斷。處理器響應中斷,硬件執行如下的操作。

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

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

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

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

• 跳轉到絕對地址PC=0x00000008處執行;

• 禁止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、預取指中止異常;由程序存儲器引起的中止異常叫做預取指中止異常;由數據存儲器引起的中止異常叫做數據中止異常。由于A(yíng)RM的指令是3級流水線(xiàn)結構,讀

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

行。有兩種可能如下:

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

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

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

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

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

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

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

• 跳轉到絕對地址PC=0x0000000C處執行;

• 禁止IRQ中斷。

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

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

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

5、數據中止異常;ARM處理器訪(fǎng)問(wèn)數據存儲器時(shí),在讀取數據的同時(shí)數據存儲器發(fā)出了中止信號,引起數據中止異常。

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

SUBS PC,R14,#8

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

SUBS PC,R14,#4

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

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

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

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

• 跳轉到絕對地址PC=0x00000010處執行;

• 禁止IRQ中斷。

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

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

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

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

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

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

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

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

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

• 跳轉到絕對地址PC=0x00000018處執行;

• 禁止IRQ中斷。

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

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

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

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

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

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

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

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

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

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

• 跳轉到絕對地址PC=0x0000001C處執行;

• 禁止FIQ中斷。

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

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

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




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

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>