ARM中断异常处理的返回

发布者:omicron25最新更新时间:2016-06-20 来源: eefocus关键字:ARM  中断异常处理 手机看文章 扫描二维码
随时随地手机看文章
举个小例子,下面是一段ARM汇编代码:
地址

指令

0x3000

BL add

0x3004

MOV r0,#0

0x3008

MOV r1,#1

0x300C

MOV r2,#2

AREA test,CODE,READONLY
    ENTRY
    Start
         MOV r0,#1
         MOV r1,#1
         BL add
         MOV r0,#0
         MOV r1,#1
    Add
         ADD r0,r0,r1
         MOV r0,r0,r1
         END

当0x3000处的BL指令执行时,会把PC(=0x3008)保存到LR寄存器里面,也就是LR=0x3008。接下来处理器会立即对LR进行一个自动的更新动作:LR=LR-0x4,这样,LR里面的地址为0x3008 – 0x4 = 03004,它是指令”MOV r0,#0”的地址,所以当从子程序add返回时,LR里面正好是正确的返回地址。既是下一条要执行的指令的地址。

一、中断异常处理函数调用
异常就是正在执行的指令,由于各种软件或硬件故障被打断,比如,在读数据或指令时,访问存储器失败、产生了一个外部硬件中断等。当这些情况发生时,在ARM系统里,由异常和中断处理程序做出相应的处理,当处理完成后,要返回到被中止的指令,使被中止的指令能够继续正常执行下去。因此,确定异常和中断处理程序的返回地址是一个非常重要的问题。

1、中断处理

当外部中断IRQ和FIQ(Fast Interrpt Request,快速中断请求)发生时,ARM核完成一部分工作。当然,这些工作是任何异常发生时都必须要做的,所以ARM处理器就会自动带我们完成。 其它重要的工作,必须由程序员来完成。ARM处理器处理的事包括从用户模式切换到IRQ模式、状态寄存器值的变化及跳转。比如说,处理器自动跳转到从0x0地址开始的异常中断向量表的0x18处,在向量表的0x18处,最简单的指令为”B HandlerIRQ”。

那程序员所要关心的就是实现具体的异常处理程序(HandlerIRQ)。当用ARM汇编语言实现HandlerIRQ函数的时候,如何确定HandlerIRQ函数正确地返回地址,使被中止的指令能够继续正常执行下去。

比较常用的中断处理程序结构如下:

HandlerIRQ ;中断响应,从向量表直接跳来

SUB r14,r14,#4 ;计算返回地址

STMFD r13,{r0-r3,r14} ;保护现场,一般只需要保护{r0-r3,lr}

BL irqHandler ;跳到具体的异常处理函数

LDMFD r13,{r0-r3,pc}^ ;恢复现场

有程序可以看出,通过”SUB R14,R14,#4”计算中断函数的返回地址。那有人一定会问,为什么计算返回地址的时候要减去4呢?

地址

指令

0x3000

BL add

0x3004

MOV r0,#0

0x3008

MOV r1,#1

0x300C

MOV r2,#2

我们看上个表,比如在执行地址为0x3004的move指令时,突然来了一个IRQ中断,这个中断打断了move指令的执行,这个时候就要去跳转到异常处理函数,之后还要返回0x3004地址重新执行move指令。当中断发生时,LR里面保存了用户模式下PC的值,那么当执行地址为0x3004的move指令时,PC的值应该是0x300C,前面介绍过,当发生跳转时,处理器会对LR进行一个自动的更新动作:LR=LR-0x4,这样LR里面的地址是0x300C-0x04=0x3008。但是0x3008并不是我们要的地址,因为中断发生在地址为0x3004的move指令执行的时候,所以中断处理完后应该返回这个地址。 这就是在计算返回地址的时候LR减去4的原因。对于FIQ中断和预取指中止异常,计算返回地址方法和IRQ相同。

我的理解:本身PC总是指向当前指令的下两条指令的地址,PC的值为当前指令的地址值加8个字节。发生跳转时,LR=LR-04,所以子程序返回时处理器自动计算LR=LR+08-04(LR+04),刚好是执行下一条指令。而中断后是要返回发生中断的当前指令继续执行,所以应该在LR返回后再减去一条指令地址04,即LR=LR-04。

以下我的整理:

2 、ARM处理器对异常的响应步骤:

a. 保护LR;

b. 将CPSR到相应的SPSR中;

c. 根据异常类型强制设置CPSR的运行模式位;

d. 跳转异常处理程序。

3、 ARM处理器对异常的返回步骤:

a. LR,LR减去相应的偏移量后送到PC;

b. 将SPSR回CPSR中;

c.清楚中断禁止位。

二、各中断类型及优先级和返回值:

ARM中断异常处理的返回

1、FIQ(Fast Interrupt Request)

   FIQ异常是为了数据传输或通道处理而设计的。CPSR中的F位:=1 禁止FIQ中断,=0允许中断。只能在特权模式下才能改变F的状态。可由外部将nFIQ引脚输入低电平也能产生FIQ。返回指令: SUBS PC,R14_fiq,#4.

2、IRQ(Interrupt Request)

  IRQ异常属于正常的终端请求,可以在nIRQ引脚输入低电平产生。CPSR中的I位: =1 禁止IRQ中断,=0允许IRQ中断,只能在特权模式下才能改变I的状态。返回指令:SUBS PC,R14_irq,#4.

3、Abort:中止

  产生中止异常意味着对存储器的访问失败。

a:指令预取中止:发生在指令预取时。  中断后PC=PC+8,返回指令:SUBS PC,R14_abt,#4.

b:数据中止:发生在数据访问时。         中断后PC=PC+12,返回指令:   SUBS PC,R14_abt,#8.

4、Software Interrupt

 SWI用于进入管理模式,用于请求执行特定的管理功能。返回地址:MOV PC,R14_svc.

关键字:ARM  中断异常处理 引用地址:ARM中断异常处理的返回

上一篇:ARM处理器的SWI异常中断响应过程
下一篇:ARM中断PC返回值分析

推荐阅读最新更新时间:2024-03-16 14:57

Testin云测协同开发者 助力超越体验的ARM平板
    中国移动计算与平板峰会日前在深圳举行,Testin云测CEO王军发表了”与开发者合作,助力超越体验的ARM平板”的主题演讲,力荐移动平板厂商与广大移动游戏应用开发者合作,在开发者的持续不断地测试、优化下,向市场推出超出用户预期的平板电脑。    随着市场竞争的白热化,国内的品牌平板电脑厂商和为数众多的白牌平板电脑厂商的利润在倒逼的价格挤压下所剩无几,如何突围是摆在每个平板电脑厂商面前亟待解决的问题,以互联网的方式经营游戏、应用等内容,将一次性的销售收入,变为长久的运营利润,是一条已经被验证的成功之路,就像餐厅的经营一样,终端本身就如同米饭馒头等主食,不可或缺、但无法为经营带来更大的利润,只有菜品才是消费者埋
[手机便携]
ARM集成开发环境eclipse的安装(for Linux)
环境:ubuntu 16.04 64bit 1、安装JDK 下载:jdk-8u221-linux-x64.tar tar -zxvf 文件名 解压移动到/opt/目录下,并且更改目录名为jdk。 加入环境变量 vi /root/.bashrc export PATH=$PATH:/opt/jdk/bin 执行source ~/.bashrc 使环境变量生效 2、安装eclipse 下载 eclipse-cpp-helios-SR2-linux-gtk.tat.gz 点击下载 。 启动eclipse tar -zxvf 文件名 解压移动到/opt/目录下,并且更改目录名为eclipse。 加入环境变量 vi
[单片机]
<font color='red'>ARM</font>集成开发环境eclipse的安装(for Linux)
ARM汇编语言 - 简介 [三]
上文介绍了ARM的数据处理指令,本文将主要介绍ARM中的跳转指令。 【跳转指令】 无条件跳转 ARM中的基础跳转指令就一个字母 B ,代表Branch,相比起x86中和它功能基本相同的 jmp 指令,意思显得稍微隐晦了点。 B 属于无条件跳转,就是不管三七二十一,跳就对了,如果跳转的目标地址不是由立即数直接给出,而是通过寄存器给出,那就应该使用 BX 。 B label ;jump to the address given by the label BX reg ;jump to the address given by the register 目标地址是否由寄存器给出只是表象,真正的区
[单片机]
<font color='red'>ARM</font>汇编语言 - 简介 [三]
基于ARM7的MVB_CAN网关设计
0 引言 随着网络技术和控制技术的发展,机车信息化控制技术向着更高的方向发展。为此,IEC制定出新的列车通信网路国际标准TCN(机车通信 网络),以满足列车微机控制系统中对车载数据通信网提出的新要求。 按照TCN标准,列车通信网可分为两级:第一级是WTB绞线式列车总线(Wired Train Bus),可实现车辆间的数据通信;第二级是MVB(Mul- tifunction Vehicle bus)多功能车辆总线,主要实现同一个车辆内各个功能控制单元之间的数据通信。 多功能车辆总线(MVB)是主要用于有互操作性和互换性要求的互连设备之间进行串行数据通信的一种总线,MVB以其高实时性、高可靠性及可管理性等多方面的优势而广泛的
[单片机]
基于<font color='red'>ARM</font>7的MVB_CAN网关设计
u-boot.lds文件详解
网上大部分u-boot.lds文件的分析大部分都是千遍一律,例如下面就是本人在网上找到的关于u-boot.lds的资料。 OUTPUT_FORMAT( elf32-littlearm , elf32-littlearm , elf32-littlearm ) /*指定输出可执行文件是elf格式,32位ARM指令,小端*/ OUTPUT_ARCH(arm) /*指定输出可执行文件的平台为ARM*/ ENTRY(_start) /*指定输出可执行文件的起始代码段为_start*/ SECTIONS { /*指定可执行image文件的全局入口点,通常这个地址都放在ROM(flash)0x0位置。必须使编译器知道这个地
[单片机]
软银考虑将购并的ARM重新上市
根据英国《金融时报》的报导,日本电信及科技大厂软件银行(Softbank)的高层 Yoshimitsu Goto 在日前瑞士信贷所举行的亚洲投资会议上表示,软银可能对 2 年前收购的英国芯片知识产权大厂ARM进行再融资,并考虑未来会将其重新上市。不过,目前没有立即上市的详细计划。 报导指出,Yoshimitsu Goto 表示,对于 2016 年软银推出的“愿景基金”而言,ARM 的重新上市计划可能是一种潜在性的退出策略。之前,该基金已经从将从软银手中收购了 25% 的 ARM 股份。而且,软银仍在持续优化ARM的财务状况。 而根据《路透社》在日前的报导,软银目前正考虑借由 ARM 寻求 50 亿美元的贷款。主要是因为 A
[半导体设计/制造]
基于ARM-Linux的MAX1303驱动程序的组成模块和实现方法设计
在数据采集系统中,通常是通过传感器将自然世界的物理量转化成电量,电量是模拟量,必须经过模/数转换才能被系统的处理器读取。现在的很多微处理器都有片内AD,但这些AD多数是8位、10位或者12位,有时候很难满足精度要求。所以需要利用处理器的接口资源外扩精度较高的AD芯片。然而精度越高,价格越贵。所以在选择AD芯片时,必须充分考虑这两个方面。本系统在对采样精度和价格进行权衡后,决定选择16位模/数转换器。由于设计的数据采集系统放置于环境恶劣的野外,所以全部器件都要满足工业级标准,所以最终选择了MAXIM公司的MAX1303。处理器选用了恩智普公司的ARM9微处理器LPC3250。在此基础上,设计了硬件连接,以及Linux2.6.29内核
[单片机]
基于<font color='red'>ARM</font>-Linux的MAX1303驱动程序的组成模块和实现方法设计
物联网时代,后PC时代:ARM无处不在
    什么是产业最大的变化?后PC时代的到来!计算设备及用户之互动方式,正在经历着重大转变。平板电脑和智能手机为用户带来了台式机和笔记本所缺乏的普遍性、休闲性、亲密性与身体互动性。ARM®中国总裁吴雄昂先生在上海以这样的论述为一年一度的ARM技术研讨会揭开了帷幕。而全球总裁布朗先生关于 “伙伴关系将机遇转化为成功 Partnerships turn opportunities into success” 的主题演讲,更加详细的论证了这一点。2011年全球220亿SoC中,ARM占了将近28%;到了2015年SoC数量将会是今天的1.5倍也就是340亿。为了适应越来越多的细分市场与应用,ARM今年也是不断地推陈出新,光第4季度就有6
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved