arm中断返回地址详细分析

arm中断返回地址详细分析

ID:33801891

大小:61.00 KB

页数:5页

时间:2019-03-01

arm中断返回地址详细分析_第1页
arm中断返回地址详细分析_第2页
arm中断返回地址详细分析_第3页
arm中断返回地址详细分析_第4页
arm中断返回地址详细分析_第5页
资源描述:

《arm中断返回地址详细分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、在ARM体系中,通常有以下3种方式控制程序的执行流程:1、在正常执行过程中,每执行一条ARM指令,程序计数器PC的值加4个字节;每执行一条Thumb指令,程序计数器PC加2个字节。整个过程是顺序执行的;2、跳转B指令执行跳转操作;BL指令在执行跳转的同时,保存子程序返回地址;BX指令,执行跳转的同时,根据目标地址的最低位,可以将程序状态切换到Thumb状态;BLX指令执行上述3个操作;3、当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程序退出时,

2、要恢复被中断的程序的执行现场。当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。异常中断种类、异常中断向量地址和异常中断优先级别见下表:ARM运行的几种处理器模式如上表所示。其中,应用程序通常运行在用户模式下!为了说明异常中断执行过程,先了解各处理器模式下的寄存器组,如下表:重点:ARM处理器对异常中断的响应过程:㈠、保存当前程序状态寄存器CPSR到对应异常中断的处理器模式下的SPSR中;㈡、设置当前程序状态寄存器CPSR的处理器模式位M(4:0)为对应的处理器模式,并禁止IRQ中断(设置I位=1);当进入的是FIQ模式时,

3、禁止FIQ中断(设置F位=1);㈢、将对应异常中断的处理器模式下的LR设置成返回地址;㈣、将程序计数器PC值,设置成该异常中断向量地址,从而跳转到相应的异常中断处理程序处执行。上述处理器对异常中断的响应过程可以用伪代码描述如下:R14=returnLinkSPSR=CPSRCPSR[4:0]=exceptionmdenumberCPSR[5]=0//所有异常均在ARM状态下处理(本句出自《基于ARM的嵌入式系统开发与实例》P32)if(==Resetor

4、FIQ)thenCPSR[6]=1//禁止FIQ中断CPSR[7]=1//禁止IRQ中断PC=exceptionvetoraddress程序将自动跳转到对应异常中断的处理程序中。上述过程,完全由处理器自动完成,所以,当发生一种异常中断时,寄存器R14、CPSR、SPSR和PC的值将是上述的结果!结果如下图所示:下面是引用别人的文章:ARM处理器中主要有7个异常(2个中断异常):1、复位异常;在以ARM为核的单片机中,常把下列事件作为引起复位的原因。?上电复位:在上电后,复位使内部达到预定的状态,特别是程序跳到初始入口;?复位引脚上的复位脉冲:这是由

5、外部其他控制信号引起的;?对系统电源检测发现过压或欠压;?时钟异常复位。ARM处理器复位后,处理器硬件将进行以下操作:?强制进入管理模式;0b10011?强制进入ARM状态;T=0?跳转到绝对地址PC=0x00000000处执行;?禁止IRQ中断和FIQ中断。I=1,F=1;复位后,程序状态寄存器如下:......IFTM4M3M2M1M011010011上电复位后,进入管理模式,执行操作系统程序,一般用做对系统初始化,例如开中断等;然后切换到用户模式,开始执行正常的用户程序。切换到用户模式可使用下列程序:MRSR0,CPSR;读状态寄存器BICR

6、0,R0,#03;把末两位清0MSRCPRS_c,R0;把修改后的值加载给状态寄存器,切换结束......;用户程序2、未定义指令异常;由于ARM使用32位代码,包含的信息量很大,可达2的31方(4G)。ARM指令集不能用尽所有代码。当ARM处理器遇到无法译码的指令时就会发生未定义指令异常。进入中断处理程序。ARM的未定义指令异常有以下两种情况:(1)遇到一条无法执行的指令,此指令没有定义;(2)执行一条对协处理器的操作指令,在正常情况下,协处理器应该应答,但协处理器没有应答。未定义异常中断时,处理器硬件将进行以下操作:?把下一条指令的地址拷贝给L

7、R;?把程序状态寄存器CPSR拷贝给SPSR_und;?强制进入未定义模式;0b11011?强制进入到ARM模式;T=0?跳转到绝对地址PC=0x00000004处执行;?禁止IRQ中断。I=0?状态寄存器中的F位不变。进入中断后,程序状态寄存器如下:......IFTM4M3M2M1M01x011011使用下列指令退出异常中断,返回原程序。MOVSPC,R14.3、软件中断异常;是由指令SWI引起的。程序在执行这一指令后,进入异常中断。{下面是《ARM体系结构与编程》书中的一段摘录}********SWI和未定义指令异常中断是由当前执行的指令自身

8、产生的。当SWI和未定义指令异常中断产生时,程序计数器PC的值还未更新,它指向当前指令后面第2条指令(对于ARM指令来说+

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。