新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM微處理器的編程模型之:異常中斷處理

ARM微處理器的編程模型之:異常中斷處理

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò) 收藏

本文引用地址:http://butianyuan.cn/article/257085.htm

3.4

異?;蛑袛嗍怯脩?hù)程序中最基本的一種執(zhí)行流程和形態(tài)。這部分主要對(duì)架構(gòu)下的異常中斷做詳細(xì)說(shuō)明。

有7種類(lèi)型的異常,按優(yōu)先級(jí)從高到低的排列如下:(Reset)、(Data Abort)、快速中斷異常(FIQ)、外部中斷異常(IRQ)、預(yù)取異常(Prefetch Abort)、軟件中斷(SWI)和未定義指令異常(Undefined instruction)。

注意

文檔中,使用術(shù)語(yǔ)Exception來(lái)描述異常。Exception主要是從處理器被動(dòng)接受異常的角度出發(fā),而Interrupt帶有向處理器主動(dòng)申請(qǐng)的色彩。在本書(shū)中,對(duì)“異常”和“中斷”不做嚴(yán)格區(qū)分,兩者都是指請(qǐng)求處理器打斷正常的程序執(zhí)行流程,進(jìn)入特定程序循環(huán)的一種機(jī)制。

3.4.1 異常種類(lèi)

ARM體系結(jié)構(gòu)中,存在7種異常處理。當(dāng)異常發(fā)生時(shí),處理器會(huì)把PC設(shè)置為一個(gè)特定的存儲(chǔ)器地址。這一地址放在被稱(chēng)為向量表(vector table)的特定地址范圍內(nèi)。向量表的入口是一些跳轉(zhuǎn)指令,跳轉(zhuǎn)到專(zhuān)門(mén)處理某個(gè)異常或中斷的子程序。

存儲(chǔ)器映射地址0x00000000是為向量表(一組32位字)保留的。在有些處理器中,向量表可以選擇定位在存儲(chǔ)空間的高地址(從偏移量0xffff0000開(kāi)始)。一些嵌入式操作系統(tǒng),如Linux和Windows CE就要利用這一特性。

表3.4列出了ARM的7種異常。

表3.4 ARM的7種異常

異 常 類(lèi) 型

處理器模式

執(zhí)行低地址

執(zhí)行高地址

(Reset)

特權(quán)模式

0x00000000

0xFFFF0000

未定義指令異常(Undefined interrupt)

未定義指令中止模式

0x00000004

0xFFFF0004

軟中斷異常(Software Abort)

特權(quán)模式

0x00000008

0xFFFF0008

預(yù)取異常(Prefetch Abort)

數(shù)據(jù)訪(fǎng)問(wèn)中止模式

0x0000000C

0xFFFF000C

(Data Abort)

數(shù)據(jù)訪(fǎng)問(wèn)中止模式

0x00000010

0xFFFF0010

外部中斷請(qǐng)求IRQ

外部中斷請(qǐng)求模式

0x00000018

0xFFFF0018

快速中斷請(qǐng)求FIQ

快速中斷請(qǐng)求模式

0x0000001C

0xFFFF001C

異常處理向量表如圖3.5所示。

當(dāng)異常發(fā)生時(shí),分組寄存器r14和SPSR用于保存處理器狀態(tài),操作偽指令如下。

R14_exception_mode> = return link

SPSR_exception_mode> = CPSR

CPSR[4∶0] = exception mode number

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

If exception_mode> = = reset or FIQ then

CPSR[6] = 1 /*屏蔽快速中斷FIQ*/

CPSR[7] = 1 /*屏蔽外部中斷IRQ*/

PC = exception vector address

圖3.5 異常處理向量表

異常返回時(shí),SPSR內(nèi)容恢復(fù)到CPSR,連接寄存器r14的內(nèi)容恢復(fù)到程序計(jì)數(shù)器PC。

1.

當(dāng)處理器的復(fù)位引腳有效時(shí),系統(tǒng)產(chǎn)生復(fù)位異常中斷,程序跳轉(zhuǎn)到復(fù)位程序處執(zhí)行。復(fù)位異常中斷通常用在下面兩種情況下。

· 系統(tǒng)上電。

· 系統(tǒng)復(fù)位。

當(dāng)復(fù)位異常時(shí),系統(tǒng)執(zhí)行下列偽操作。

R14_svc = UNPREDICTABLE value

SPSR_svc = UNPREDICTABLE value

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

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

CPSR[6] = 1 /*禁止快速中斷*/

CPSR[7] = 1 /*禁止外設(shè)中斷*/

If high vectors configured then

PC = 0xffff0000

Else

PC = 0x00000000


上一頁(yè) 1 2 3 4 5 6 7 8 9 10 下一頁(yè)

評(píng)論


相關(guān)推薦

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

關(guān)閉