<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í)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257085.htm

當數據訪(fǎng)問(wèn)中止異常發(fā)生時(shí),寄存器的值將根據以下規則進(jìn)行修改。

① 返回地址寄存器r14的值只與發(fā)生的指令地址有關(guān),與PC值無(wú)關(guān)。

② 如果指令中沒(méi)有指定基址寄存器回寫(xiě),則基址寄存器的值不變。

③ 如果指令中指定了基址寄存器回寫(xiě),則寄存器的值和具體芯片的Abort Models有關(guān),由芯片的生產(chǎn)商指定。

④ 如果指令只加載一個(gè)通用寄存器的值,則通用寄存器的值不變。

⑤ 如果是批量加載指令,則寄存器中的值是不可預知的值。

⑥ 如果指令加載協(xié)處理器寄存器的值,則被加載寄存器的值不可預知。

6.外部中斷IRQ

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

當外部中斷IRQ發(fā)生時(shí),處理器執行下列偽操作。

r14_irq = address of next instruction to be executed + 4

SPSR_irq = CPSR

CPSR[4∶0] = 0b10010 /*進(jìn)入特權模式*/

CPSR[5] = 0 /*處理器進(jìn)入狀態(tài)*/

/*CPSR[6]保持不變*/

CPSR[7] = 1 /*禁止外設中斷*/

If high vectors configured then

PC = 0xffff0018

Else

PC = 0x00000018

7.快速中斷FIQ

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

當快速中斷異常發(fā)生時(shí),處理器執行下列偽操作。

r14_fiq = address of next instruction to be executed + 4

SPSR_fiq = CPSR

CPSR[4∶0] = 0b10001 /*進(jìn)入FIQ模式*/

CPSR[5] = 0

CPSR[6] = 1

CPSR[7] = 1

If high vectors configured then

PC= 0xffff001c

Else

PC = 0x0000001c

3.4.2 異常優(yōu)先級

每一種異常按表3.5中設置的優(yōu)先級得到處理。

表3.5 異常優(yōu)先級

優(yōu) 先 級

異 常

最高 1

2

數據中止

3

快速中斷請求

4

中斷請求

5

預取指令異常

6

軟件中斷

最低 7

未定義指令

異??梢酝瑫r(shí)發(fā)生,處理器按表3.5的優(yōu)先級順序處理異常。例如,的優(yōu)先級最高,處理器上電時(shí)發(fā)生。所以當產(chǎn)生復位時(shí),它將優(yōu)先于其他異常得到處理。同樣,當一個(gè)數據訪(fǎng)問(wèn)中止異常發(fā)生時(shí),它將優(yōu)先于除復位異常外的其他所有異常。

優(yōu)先級最低的2種異常是軟件中斷和未定義指令異常。因為正在執行的指令不可能既是一條SWI指令,又是一條未定義指令,所以軟件中斷異常SWI和未定義指令異享有相同的優(yōu)先級。

3.4.3 處理器模式和異常

每一種異常都會(huì )導致內核進(jìn)入一種特定的模式。表3.6顯示了處理器異常及其對應的模式。此外,也可以通過(guò)編程改變CPSR,進(jìn)入任何一種處理器模式。

注意

用戶(hù)和系統模式是僅有的不可通過(guò)異常進(jìn)入的兩種模式,也就是說(shuō),要進(jìn)入這兩種模式,必須通過(guò)編程改變CPSR。

表3.6 ARM處理器異常及其對應模式

異 常

模 式

用 途

快速中斷請求

FIQ

進(jìn)行快速中斷請求處理

外部中斷請求

IRQ

進(jìn)行外部中斷請求處理

SWI

SVC

進(jìn)行操作系統的高級處理

復位

SVC

進(jìn)行操作系統的高級處理

預取指令中止異常

ABORT

虛存和存儲器保護

數據中止異常

ABORT

虛存和存儲器保護

未定義指令

Undefined

軟件模擬硬件協(xié)處理器



評論


相關(guān)推薦

技術(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>