首 页电子文章电子资料客户留言94论坛繁體中文
设为首页
加入收藏
联系我们
您当前的位置:中国电子前沿 -> ARM技术 -> ARM入门 -> 电子文章内容 退出登录 用户管理
栏目导航
· ARM入门 · ARM系统
· ARM应用
热门电子文章
· [linux移植] 如何监控和保..
· [linux移植] Linux解释器..
· [linux移植] 在Redhat Li..
· [CPLD应用] CPLD器件在时..
· [VHDL学习] 错误检测与纠..
· [VHDL学习] 在PLD开发中提..
· [VXwork移植] BSP配置文件..
· [USB技术] USB设计
· [USB技术] USB综述
· [USB技术] 如何构造一个简..
· [USB技术] 《USB总线开发..
· [USB技术] 电脑USB接口可..
相关电子文章
· 致 ARM 初学者!!
· arm学习
· ARM的应用和选型
· ARM开发的调试方法概..
· ARM体系结构发展-
· ARTX菜鸟外部中断笔..
· ARM菜鸟心中的中断防..
· ARM Boot 示例
· ARM体系结构和编程学..
· ARM体系结构与编程 ..
ARM体系结构与编程 第一章(2)- (zz)
作者:佚名  来源:不详  发布时间:2006-9-11 14:20:37  发布人:zangyl

减小字体 增大字体

4中断介绍

共有七个中断类型:MCU在中断发生时会把PC-4存入LR
ARM体系结构所支持的异常
异常类型
具体含义
复位
当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。
未定义指令
ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真。
软件中断
该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。
指令预取中止
若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。
数据中止
若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。
IRQ(外部中断请求)
当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。
FIQ(快速中断请求)
当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。

4.1 对异常的响应

当一个异常出现以后,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

4.2从异常返回

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

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

2、将SPSR复制回CPSR中。

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

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

4.3各类异常的具体描述

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)信号,预取的指令被记为无效,但只有当处理器试图执行无效指令时,指令预取中止异常才会发生,如果指令未被执行,例如在指令流水线中发生了跳转,则预取指令中止不会发生。

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

当确定了中止的原因后,Abort处理程序均会执行以下指令从中止模式返回,无论是在ARM状态还是Thumb状态:

SUBS PC, R14_abt, #4      ;指令预取中止
SUBS PC, R14_abt, #8      ;数据中止
以上指令恢复PC(从R14_abt)和CPSR(从SPSR_abt)的值,并重新执行中止的指令。

Software Interruupt(软件中断)

软件中断指令(SWI)用于进入管理模式,常用于请求执行特定的管理功能。软件中断处理程序执行以下指令从SWI模式返回,无论是在ARM状态还是Thumb状态:

MOV  PC , R14_svc
以上指令恢复PC(从R14_svc)和CPSR(从SPSR_svc)的值,并返回到SWI的下一条指令。

Undefined Instruction(未定义指令)

当ARM处理器遇到不能处理的指令时,会产生未定义指令异常。采用这种机制,可以通过软件仿真扩展ARM或Thumb指令集。

在仿真未定义指令后,处理器执行以下程序返回,无论是在ARM状态还是Thumb状态:

MOVS PC, R14_und
以上指令恢复PC(从R14_und)和CPSR(从SPSR_und)的值,并返回到未定义指令后的下一条指令。

[] [返回上一页] [打 印] [收 藏]
∷相关电子文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
关于本站网站帮助广告合作下载声明友情连接网站地图
Copyright © 2002-2006 EMB-CN.com. All Rights Reserved .