新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > ARM微处理器的编程模型之:异常中断处理

ARM微处理器的编程模型之:异常中断处理

作者: 时间:2013-09-13 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/257085.htm

当数据访问中止异常发生时,寄存器的值将根据以下规则进行修改。

① 返回地址寄存器r14的值只与发生的指令地址有关,与PC值无关。

② 如果指令中没有指定基址寄存器回写,则基址寄存器的值不变。

③ 如果指令中指定了基址寄存器回写,则寄存器的值和具体芯片的Abort Models有关,由芯片的生产商指定。

④ 如果指令只加载一个通用寄存器的值,则通用寄存器的值不变。

⑤ 如果是批量加载指令,则寄存器中的值是不可预知的值。

⑥ 如果指令加载协处理器寄存器的值,则被加载寄存器的值不可预知。

6.外部中断IRQ

当处理器的外部中断请求引脚有效,而且CPSR寄存器的I控制位被清除时,处理器产生外部中断IRQ异常。系统中各外部设备通常通过该异常中断请求处理器服务。

当外部中断IRQ发生时,处理器执行下列伪操作。

r14_irq = address of next instruction to be executed + 4

SPSR_irq = CPSR

CPSR[4∶0] = 0b10010 /*进入特权模式*/

CPSR[5] = 0 /*处理器进入状态*/

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

CPSR[7] = 1 /*禁止外设中断*/

If high vectors configured then

PC = 0xffff0018

Else

PC = 0x00000018

7.快速中断FIQ

当处理器的快速中断请求引脚有效且CPSR寄存器的F控制位被清除时,处理器产生快速中断请求FIQ异常。

当快速中断异常发生时,处理器执行下列伪操作。

r14_fiq = address of next instruction to be executed + 4

SPSR_fiq = CPSR

CPSR[4∶0] = 0b10001 /*进入FIQ模式*/

CPSR[5] = 0

CPSR[6] = 1

CPSR[7] = 1

If high vectors configured then

PC= 0xffff001c

Else

PC = 0x0000001c

3.4.2 异常优先级

每一种异常按表3.5中设置的优先级得到处理。

表3.5 异常优先级

优 先 级

异 常

最高 1

2

数据中止

3

快速中断请求

4

中断请求

5

预取指令异常

6

软件中断

最低 7

未定义指令

异常可以同时发生,处理器按表3.5的优先级顺序处理异常。例如,的优先级最高,处理器上电时发生。所以当产生复位时,它将优先于其他异常得到处理。同样,当一个数据访问中止异常发生时,它将优先于除复位异常外的其他所有异常。

优先级最低的2种异常是软件中断和未定义指令异常。因为正在执行的指令不可能既是一条SWI指令,又是一条未定义指令,所以软件中断异常SWI和未定义指令异享有相同的优先级。

3.4.3 处理器模式和异常

每一种异常都会导致内核进入一种特定的模式。表3.6显示了处理器异常及其对应的模式。此外,也可以通过编程改变CPSR,进入任何一种处理器模式。

注意

用户和系统模式是仅有的不可通过异常进入的两种模式,也就是说,要进入这两种模式,必须通过编程改变CPSR。

表3.6 ARM处理器异常及其对应模式

异 常

模 式

用 途

快速中断请求

FIQ

进行快速中断请求处理

外部中断请求

IRQ

进行外部中断请求处理

SWI

SVC

进行操作系统的高级处理

复位

SVC

进行操作系统的高级处理

预取指令中止异常

ABORT

虚存和存储器保护

数据中止异常

ABORT

虚存和存储器保护

未定义指令

Undefined

软件模拟硬件协处理器



评论


相关推荐

技术专区

关闭