微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM应用系统开发详解 第2章 ARM微处理器的编程模型

ARM应用系统开发详解 第2章 ARM微处理器的编程模型

时间:11-20 来源:互联网 点击:

复位异常,程序跳转到复位异常处理程序处执行。

未定义指令

当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真。

软件中断

该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。

指令预取中止

若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。

数据中止

若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。

IRQ(外部中断请求)

当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。

FIQ(快速中断请求)

当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。

2.6.2对异常的响应

当一个异常出现以后,ARM微处理器会执行以下几步操作:

1、将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量,这样,异常处理程序就不需要确定异常是从何种状态进入的。例如:在软件中断异常SWI,指令MOV PC,R14_svc总是返回到下一条指令,不管SWI是在ARM状态执行,还是在Thumb状态执行。

2、将CPSR到相应的SPSR中。

3、根据异常类型,强制设置CPSR的运行模式位。

4、强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。

还可以设置中断禁止位,以禁止中断发生。

如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。

ARM微处理器对异常的响应过程用伪码可以描述为:

R14_ = Return Link

SPSR_ = CPSR

CPSR[4:0] = Exception Mode Number

CPSR[5] = 0;当运行于ARM工作状态时

If == Reset or FIQ then

;当响应FIQ异常时,禁止新的FIQ异常

CPSR[6] = 1

CPSR[7] = 1

PC = Exception Vector Address

2.6.3从异常返回

异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:

1、将连接寄存器LR的值减去相应的偏移量后送到PC中。

2、将SPSR回CPSR中。

3、若在进入异常处理时设置了中断禁止位,要在此清除。

可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。

2.6.4各类异常的具体描述

FIQ(Fast Interrupt Request)

FIQ异常是为了支持数据传输或者通道处理而设计的。在ARM状态下,系统有足够的私有寄存器,从而可以避免对寄存器保存的需求,并减小了系统上下文切换的开销。

若将CPSR的F位置为1,则会禁止FIQ中断,若将CPSR的F位清零,处理器会在指令执行时检查FIQ的输入。注意只有在特权模式下才能改变F位的状态。

可由外部通过对处理器上的nFIQ引脚输入低电平产生FIQ。不管是在ARM状态还是在Thumb状态下进入FIQ模式,FIQ处理程序均会执行以下指令从FIQ模式返回:

SUBS PC,R14_fiq ,#4

该指令将寄存器R14_fiq的值减去4后,到程序计数器PC中,从而实现从异常处理程序中的返回,同时将SPSR_mode寄存器的内容到当前程序状态寄存器CPSR中。

IRQ(Interrupt Request)

IRQ异常属于正常的中断请求,可通过对处理器的nIRQ引脚输入低电平产生,IRQ的优先级低于FIQ,当程序执行进入FIQ异常时,IRQ可能被屏蔽。

若将CPSR的I位置为1,则会禁止IRQ中断,若将CPSR的I位清零,处理器会在指令执行完之前检查IRQ的输入。注意只有在特权模式下才能改变I位的状态。

不管是在ARM状态还是在Thumb状态下进入IRQ模式,IRQ处理程序均会执行以下指令从IRQ模式返回:

SUBS PC , R14_irq , #4

该指令将寄存器R14_irq的值减去4后,到程序计数器PC中,从而实现从异常处理程序中的返回,同时将SPSR_mode寄存器的内容到当前程序状态寄存器CPSR中。

ABORT(中止)

产生中止异常意味着对存储器的访问失败。ARM微处理器在存储器访问周期内检查是否发生中止异常。

中止异常包括两种类型:

─指令预取中止:发生在指令预取时。

─数据中止:发生在数据访问时。

当指令预取访问存储器失败时,存储器系统向ARM处理器发出存储器中止(Abort)信号,预取的指令被记为无效,但只有当处理器试图执行无效指令时,指令预取中止异常才会发生,如果指令未被执行,例如在指令流水线中发生了跳转,则预取指令中止不会发生。

若数据中止发生,系统的响应与指令的类型

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top