

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 模式时,禁止 FIQ 中断
3、(设置 F 位=1);、将对应异常中断的处理器模式下的LR 设置成返回地址;、将程序计数器 PC 值,设置成该异常中断向量地址,从而跳转到相应的异常中断处理程序处执行。上述处理器对异常中断的响应过程可以用伪代码描述如下:R14=retur n Li nk SPSR=CPSR CPSR4:0=exception mdenumberCPSR5 = 0/所有异常均在 ARM 状态下处理(本句出自基于 ARM 的嵌入式系统开发与实例P32)if ( =Reset or FIQ)thenCPSR6=1 / 禁止 FIQ 中断 CPSR7 =1 / 禁止 IRQ 中断 PC = excepti on ve
4、tor address 程序将自动跳转到对应异常中断的处理程序中。上述过程,完全由处理器自动完成,所以,当发生一种异常中断时,寄存器 R14、CPSR、SPSR和 PC 的值将是上述的结果!结果如下图所示:下面是引用别人的文章:ARM 处理器中主要有 7 个异常(2 个中断异常):1、复位异常;在以 ARM 为核的单片机中,常把下列事件作为引起复位的原因。?上电复位:在上电后,复位使内部达到预定的状态,特别是程序跳到初始入口;?复位引脚上的复位脉冲:这是由外部其他控制信号引起的;?对系统电源检测发现过压或欠压;?时钟异常复位。ARM 处理器复位后,处理器硬件将进行以下操作:?强制进入管理模式;
5、0b10011?强制进入 ARM 状态;T=0?跳转到绝对地址 PC=0 x00000000 处执行;?禁止 IRQ 中断和 FIQ 中断。l=1,F=1;复位后,程序状态寄存器如下:I F T M4 M3 M2 M1 M01 1 0 1 0 0 1 1上电复位后,进入管理模式,执行操作系统程序,一般用做对系统初始化,例如开中 断等;然后切换到用户模式,开始执行正常的用户程序。切换到用户模式可使用下列程序:MRS R0,CPSR;读状态寄存器BIC R0,R0,#03;把末两位清 0MSR CPRS_c,R0 ;把修改后的值加载给状态寄存器,切换结束;用户程序2、未定义指令异常;由于 ARM
6、使用 32 位代码,包含的信息量很大,可达2 的 31 方(4G)。ARM 指令集不能用尽所有代码。当ARM 处理器遇到无法译码的指令时就会发生未定义指令异常。进入中断处理程序。ARM 的未定义指令异常有以下两种情况:(1)遇到一条无法执行的指令,此指令没有定义;(2)执行一条对协处理器的操作指令,在正常情况下,协处理器应该应答,但协处理器没有应答。未定义异常中断时,处理器硬件将进行以下操作:?把下一条指令的地址拷贝给LR;?把程序状态寄存器 CPSR 拷贝给 SPSR_und ;?强制进入未定义模式;0b11011?强制进入到 ARM 模式;T=0?跳转到绝对地址 PC=0 x0000000
7、4 处执行;?禁止 IRQ 中断。I=0?状态寄存器中的 F 位不变。进入中断后,程序状态寄存器如下:I F T M4 M3 M2 M1 M01 x 0 11011使用下列指令退出异常中断,返回原程序。MOVS PC,R14.3、软件中断异常; 是由指令 SWI 引起的。程序在执行这一指令后,进入异常中断。下面是ARM 体系结构与编程书中的一段摘录*SWI 和未定义指令异常中断是由当前执行的指令自身产生的。当SWI 和未定义指令异常中断产生时,程序计数器PC 的值还未更新,它指向当前指令后面第2 条指令(对于 ARM 指令来说+8 字节;对于 Thumb 指令来说+4 字节的位置)。当 SWI
8、 和未定义指令异常中断产生时,处理器将 值(PC-4)保存到异常模式下的寄存器LR_mode 中。这时(PC-4)即指向当前指令的下一条指令地址。因此返回操作可以通过下面的指令来实现:MOV PC,LR该指令将寄存器 LR 中的值复制到程序计数器PC 中实现程序返回,同时将 SPSR_mode 寄存器内容复制到当前程序状态寄存器CPSR 中。*摘录结束处理器响应中断,硬件执行如下的操作。?把下一条指令的地址拷贝给LR;?把程序状态寄存器 CPSR 拷贝给 SPSR_svc;?强制进入管理模式;0b10011?强制进入到 ARM 状态;T=0?跳转到绝对地址 PC=0 x00000008 处执行
9、;?禁止 IRQ 中断。1=1 ; F 保持不变;进入中断后的程序状态寄存器如下:I F T M4 M3 M2 M1 M01 x 010011软件中断处理程序完成后,使用下列指令返回到原中断处:MOVS PC,R14.4、预取指中止异常;由程序存储器引起的中止异常叫做预取指中止异常;由数据存储器引起的中止异常叫做数据中止异常。由于ARM 的指令是 3 级流水线结构,读取指令周期是提前进行的,因此把读取指令的过程一般称预取指。如果在取得指令的同时程序存储器发出中止信 号,则 ARM处理器把这一条指令标记位无效,然后等待执行。下面是ARM 体系结构与编程书中的一段摘录*在指令预取时,如果目标地址是
10、非法的,该指令将被标记成有问题的指令。这时,流水线上该指令之前的指令继续执行。当执行到该被标记成有问题的指令时,处理器产生指令预取 中止异常中断。当发生指令预取中止异常中断时,程序要返回到该有问题的指令处,重新读取并执行该指令。因此 指令预取中止异常中断程序应该返回到产生该指令预取中止异常中断的指令处,而不是像前面两种 情况下返回到发生中断的指令的下一条指令。指令预取中止异常中断是由当前执行的指令自身产生的,当指令预取中止异常中断产生时,程序计数器 PC 的值还未更新,它指向当前指令后面第2 条指令(对于 ARM 指令来说,它指向当前指令地址加 8 个字节的 w 位置;对于 Thumb 指令来
11、说,它指向当前指令地址加4 个字节的位置)。当指令预取中止异常中断产生时, 处理器将(PC-4)值保存到异常模式下的寄存器LR_mode 中。这时(PC-4)即指向当前指令的下一条指令。因此返回操作可以通过下面的指令来实现:SUBS PC,LR,#4该指令将寄存器 LR 中的值减 4 后,复制到程序计数器 PC 中,实现程序返回,同时将 SPSR_mode 寄存器内容复制到当前程序状态寄存器CPSR 中。*摘录结束有两种可能如下:?当执行这条指令前程序发生跳转,则这条无效指令不引起异常中断;?当执行到这条指令时,处理器会发生预取指中止异常,引起中断。当进入预取指异常中断时,处理器硬件响应中断,
12、执行以下的操作:?把中断时 PC 的地址拷贝给 LR;?把程序状态寄存器 CPSR 拷贝给 SPSR_abt ;?强制进入中止异常模式;0b10111?强制进入到 ARM 状态;T=0;?跳转到绝对地址 PC=0 x0000000C 处执行;?禁止 IRQ 中断。 1=1;进入中断后,程序状态寄存器如下:I F T M4 M3 M2 M1 M01 x 0 1 0111预取指中止异常中断返回时,应该执行下列指令:SUBS PC,R14,#4.5、数据中止异常;ARM 处理器访问数据存储器时,在读取数据的同时数据存储器发出了中 止信号,引起数据中止异常。当进入预取数据异常中断时,处理器硬件响应中断
13、,执行以下的操作:?把中断时的 PC 的地址拷贝给 LR;?把程序状态寄存器 CPSR 拷贝给 SPSR_abt ;?强制进入中止异常模式;?强制进入到 ARM 状态;?跳转到绝对地址 PC=OxOOOOOO1O 处执行;?禁止 IRQ 中断。进入中断后,程序状态寄存器如下:I F T M4 M3 M2 M1 M01 x 0 10111数据中止异常中断服务程序返回时,使用下列指令:SUBS PC,R14,#8上述指令是返回到中断时所执行的指令,目的是再一次从数据存储器中读取数据。如果不再一次读取数据,则执行下一条指令,此时使用下列指令返回:SUBS PC,R14,#46、中断请求(IRQ )异
14、常;例如:定时器中断、串行口通讯中断、外部信号中断和A/D处理中断等。IRQ 中断是可屏蔽的。下面是ARM 体系结构与编程书中的一段摘录P269*通常当处理器执行完当前指令后,查询IRQ 中断引脚及 FIQ 中断引脚,并且查看系统是否允许 IRQ 及 FIQ 中断。如果有中断引脚有效, 并且系统允许该中断产生,处理器将产生 IRQ或 FIQ 异常中断。这时,程序计数器 PC 的值已经更新,它指向当前指令后面的第 3 条指令(对于 ARM 指令来说,它指向当前指令地址 +12 字节位置;对于 Thumb 指令来说,它指向当前指令地址 +6 字节 的位置)。处理器这时将值(PC-4)保存到异常模式
15、下的寄存器LR_mode 中。这时(PC-4)即指向当前指令后面的第 2 条指令。因此返回操作可以通过下面的指令实现:SUBS PC, LR, #4该指令将寄存器 LR 中的值减 4 后,复制到程序计数器 PC 中,实现程序返回,同时将 SPSR_mode 寄存器内容复制到当前程序状态寄存器CPSR 中。*摘录结束在状态寄存器中的 I 位就是 IRQ 的屏蔽位。当 I=1 时。则屏蔽 IRQ 中断,当 1=0 时,则允许中断。处理器复位后置I 为 1,关闭中断。当发生 IRQ 中断时,处理器硬件响应中断,执行下列操作:?把中断时的 PC 的地址值拷贝给 LR;?把程序状态寄存器 CPSR 拷贝给 SPSR_irq ;?强制进入 IRQ 异常模式;?强制进入到 ARM 状态;?跳转到绝对地址 PC=0 x00000018 处执行;?禁止 IRQ 中断。进入中断后,程序状态寄存器如下:I F T M4 M3 M2 M1 M01 x 010010完成中断处理后,程序执行下列返回原中断处:SUBS PC.R14,#4.7、快速中断(FIQ)请求异常;FIQ 快速中断是可屏蔽的。在状态寄存器中的 F 位就是 FIQ的屏蔽位。当 F=1 时。则屏蔽 FIQ 中断,当 F=0 时,则允许中断。处理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国防水透气膜项目经营分析报告
- 线上线下混合式课程教学成效评价报告
- 中国溴氟苯腈项目创业计划书
- 保定市人民医院超声报告书写规范考核
- 中国铁氧体磁芯项目商业计划书
- 中国叔戊基苯项目商业计划书
- 邯郸市中医院肝脏良性肿瘤切除术适应证把握考核
- 中国莰醌项目商业计划书
- 鄂尔多斯市人民医院等离子消融术技能考核
- 2025年中国书写用墨汁制造项目投资计划书
- 2025年国家开放大学《医学伦理学》期末考试备考题库及答案解析
- 2025年及未来5年中国网闸行业市场深度评估及投资战略规划报告
- 2025年安全生产有限空间作业事故案例分析试题库试卷
- 川教版四年级上册《生命.生态.安全》全册教案(及计划)
- 工程竣工移交单(移交甲方、物业)
- 《针刺伤预防与处理》团体标准解读与实践
- 概念决策评审检查表
- 胸腔闭式引流术的护理PPT课件(PPT 27页)
- Q∕GDW 12152-2021 输变电工程建设施工安全风险管理规程
- 《航空电机学》课件第1章直流电机概述
- 日立i-EZ控制系统安装与使用
评论
0/150
提交评论