ARM异常中断处理及编程

上传人:宝路 文档编号:48210185 上传时间:2018-07-11 格式:PPT 页数:97 大小:412.57KB
返回 下载 相关 举报
ARM异常中断处理及编程_第1页
第1页 / 共97页
ARM异常中断处理及编程_第2页
第2页 / 共97页
ARM异常中断处理及编程_第3页
第3页 / 共97页
ARM异常中断处理及编程_第4页
第4页 / 共97页
ARM异常中断处理及编程_第5页
第5页 / 共97页
点击查看更多>>
资源描述

《ARM异常中断处理及编程》由会员分享,可在线阅读,更多相关《ARM异常中断处理及编程(97页珍藏版)》请在金锄头文库上搜索。

1、第7章 ARM异常中断处理及编程 7.1 ARM异常中断处理概述7.2 ARM体系异常中断种类7.3 ARM应用系统中异常中断处理程序的安装7.4 ARM的SWI异常中断处理程序设计7.5 FIG和IRQ异常中断程序设计7.6 基于ARM9芯片S3C2410异常中断程序设计第7章 ARM异常中断处理及编程 本章的主要内容:ARM异常中断处理概述 异常中断的进入与退出 应用程序中异常中断处理程序的安装 SWI异常中断处理程序 FIQ和IRQ异常中断处理程序 复位异常中断处理程序 未定义异常中断 指令预取中止异常中断处理程序 数据访问中止异常中断处理程序第7章 ARM异常中断处理及编程 7.1 A

2、RM异常中断处理概述 ARM异常中断处理需要实现中断的响应、解析跳转和返回 等操 作,以便支持上层应用程序的开发。 当异常中断发生时,系统执行完当前指令后,将跳转到相 应的异常中断处理程序处执行。 当异常中断处理程序执行完成后,程序返回到发生中断的 指令的下一条指令处执行。 进入异常中断处理程序时,要保存被中断的程序的执行现 场。从异常中断处理程序退出时,要恢复被中断的程序的执行 现场。 ARM体系中常在存储地址的低端固化了一个32字节的硬件 中断向量表,用来指定各异常中断及其处理程序的对应关系。第7章 ARM异常中断处理及编程 当一个异常出现后,ARM微处理器执行以下操作: (1)保存处理器

3、当前状态、中断屏蔽位以及各条件标志位; (2)设置当前程序状态寄存器CPSR中相应的位; (3)将寄存器lr_mode设置成返回地址; (4)将程序计数器(PC)值设置成该异常中断的中断向量地址 ,从而跳转到相应的异常中断处理程序处执行。 接收到中断请求后,ARM处理器内核会自动执行以上四 步,程序计数器PC总是跳转到相应的固定地址。从异常中断处理程序中返回: (1)恢复被屏蔽的程序的处理器状态; (2)返回到发生异常中断的指令的下一条指令处继续执行。 当异常中断发生时,程序计数器PC所指的位置对于各种不同 的异常中断是不同的,同样,返回地址对于各种不同的异常 中断也是不同的。第7章 ARM异

4、常中断处理及编程 7.2 ARM体系异常中断种类ARM处理器中主要有7个异常(2个中断异常)复位(RESET)未定义的指令软件中断指令与取终止(PrefechAbort)数据访问终止(DATAABORT)外部中断请求(IRQ)快速中断请求(FIQ) 第7章 ARM异常中断处理及编程 7.2.1异常中断向量表及异常中断优先级在ARM体系中,异常中断向量表的大小为32字节,每异常中断占4个字节。每个异常中断对应的中断向量表中的4个字节的空间中存放了一条跳转指令或者一条向PC寄存器中赋值的数据访问指令。第7章 ARM异常中断处理及编程 第7章 ARM异常中断处理及编程 1复位异常在以ARM为核的系统

5、中,引起复位的原因有:上电复位复位引脚上的复位脉冲对系统电源检测发现过压或欠压。时钟异常复位。ARM处理器复位后,将进行以下操作:强制进入管理模式;强制进入ARM状态; 跳转到绝对地址PC=0x00000000处执行;禁止IRQ中断和FIQ中断。第7章 ARM异常中断处理及编程 复位后,程序状态寄存器如下:.IFTM4M3M2M1M0 110 10011上电复位后,进入管理模式,执行操作系统程序,一般用做对系统初始化,例如开中断等;然后切换到用户模式,开始执行正常的用户程序。第7章 ARM异常中断处理及编程 切换到用户模式可使用下列程序:MRS R0,CPSR ;读状态寄存器BIC R0,R0

6、,#03 ;把末两位清0MSR CPRS_c,R0 ;把修改后的值加载给;状态寄存器,切换结束. ;用户程序第7章 ARM异常中断处理及编程 2未定义指令异常ARM的未定义指令异常有以下两种情况: (1)遇到一条没有定义指令; (2)执行一条对协处理器的操作指令没有应答。未定义异常中断时,状态寄存器中的F位不变。使用下列指令退出异常中断,返回原程序 。 把下一条指令的地址拷贝给LR; 把程序状态寄存器CPSR拷贝给SPSR_und; 强制进入未定义模式; 强制进入到ARM模式; 跳转到绝对地址PC=0x00000004处执行; 禁止IRQ中断。第7章 ARM异常中断处理及编程 进入中断后,程序

7、状态寄存器如下:. .IF T M 4M 3M 2M 1M 0 1 x 0 1 10 1 1未定义异常中断返回时,使用下列指令返回到原中断处:MOVS PC,R14.第7章 ARM异常中断处理及编程 3软件中断异常是由指令SWI引起的。程序在执行这一指 令后,进入异常中断。处理器响应中断,硬件 执行如下的操作: 把下一条指令的地址拷贝给LR; 把程序状态寄存器CPSR拷贝给SPSR_svc; 强制进入管理模式; 强制进入到ARM状态; 跳转到绝对地址PC=0x00000008处执行; 禁止IRQ中断。第7章 ARM异常中断处理及编程 进入中断后的程序状态寄存器如下:. .IF T M 4M 3

8、M 2M 1M 0 1 x 0 1 00 1 1软件中断处理程序完成后,使用下列指令返回到原中断处:MOVS PC,R14第7章 ARM异常中断处理及编程 4预取指中止异常程序存储器引起的中止异常叫做预取指中止异常;数据存储器引起的中止异常叫做数据中止异常。有两种可能如下:当执行这条指令前程序发生跳转,则这条无效指令不引起异常中断;当执行到这条指令时,处理器会发生预取指中止异常,引起中断。第7章 ARM异常中断处理及编程 当进入预取指异常中断时,处理器硬件响应中断,执行以下的操作:把中断时PC的地址拷贝给LR;把程序状态寄存器CPSR拷贝给SPSR_abt;强制进入中止异常模式;强制进入到AR

9、M状态;跳转到绝对地址PC=0x0000000C处执行;禁止IRQ中断。第7章 ARM异常中断处理及编程 进入中断后,程序状态寄存器如下:. .IF T M 4M 3M 2M 1M 0 1 x 0 1 01 1 1预取指中止异常中断返回时,应该执行下列指令:SUBS PC,R14,#4.第7章 ARM异常中断处理及编程 5数据中止异常ARM处理器访问数据存储器时,在读取数据的同时数据存储器发出了中止信号,引起数据中止异常。数据中止异常中断服务程序返回时,用下列指令: SUBS PC,R14,#8上述指令是返回到中断时所执行的指令,目的是再一次从数据存储器中读取数据。如果不再一次读取数据,则执行

10、下一条指令,此时使用下列指令返回:SUBS PC,R14,#4第7章 ARM异常中断处理及编程 当进入数据中止异常中断时,处理器硬件响应中断,执行以下的操作:把中断时的PC的地址拷贝给LR;把程序状态寄存器CPSR拷贝给SPSR_abt;强制进入中止异常模式;强制进入到ARM状态;跳转到绝对地址PC=0x00000010处执行;禁止IRQ中断。第7章 ARM异常中断处理及编程 进入中断后,程序状态寄存器如下:. .IF TM 4M 3M 2M 1M 0 1 x 0 1 01 1 1第7章 ARM异常中断处理及编程 6中断请求(IRQ)异常当I=1时。则屏蔽IRQ中断,当I=0时,则允许中断。处

11、理器复位后置I为1,关闭中断。ARM系统中外设通过该异常中断请求处理服务。例如:定时器中断、串行口通讯中断、外部信号中断和A/D处理中断等。IRQ中断是可屏蔽的。在状态寄存器中的I位就是IRQ的屏蔽位。第7章 ARM异常中断处理及编程 当发生IRQ中断时,处理器硬件响应中断,执行下列操作:把中断时的PC的地址值拷贝给LR;把程序状态寄存器CPSR拷贝给SPSR_irq; 强制进入IRQ异常模式;强制进入到ARM状态;跳转到绝对地址PC=0x00000018处执行;禁止IRQ中断。第7章 ARM异常中断处理及编程 进入中断后,程序状态寄存器如下:. .IF T M 4M 3M 2M 1M 0 1

12、 x 0 1 00 1 0完成中断处理后,程序执行下列返回原中断处:SUBS PC.R14,#4.第7章 ARM异常中断处理及编程 7.2.2 支持中断跳转 的解析程序 (1)解析程序的概 念和作用中断解析程序是为 了使得上层应用程序 与硬件中断跳转联系 起来所编写一段中间 的服务程序。中断跳转流程图 如图7.1所示。第7章 ARM异常中断处理及编程 (2)解析过程以一次IRQ跳转为例说明解析过程,假定中断向量表定义 在0x00400000开始的外部RAM空间,中断解析示例流程如图7.2 所示。图中实线表示的流程都用ARM汇编语言编写,一般作为 boot代码的一部分放在系统的底层模块中。填写向

13、量表的操作 可以在上层应用程序中方便地实现,比如在C语言中: *( int *(0x00400018) = (int) ISR_IRQ;这样就将IRQ中断的服务程序 入口地址(0x00300260)填写到中断向量表中的固定地址 0x00400018开始的4字节空间了。这样就可避免在应用程序中计算中断的跳转地址,并可 很方便的选择不同的函数作为指定中断的服务程序。当然,在 程序开发时要合理开辟好向量表,避免对向量表地址空间不必 要的写操作。 第7章 ARM异常中断处理及编程 第7章 ARM异常中断处理及编程 (3)解析程序的扩展在ARM处理器中会包含很多中断源,通常 会在ARM内核外面扩展一个中

14、断控制器来管理 各种原因产生的中断。如,三星公司的S3C4510B处理器中的 IRQ/FIQ类型的中断源可以有21个S3C44B0X有26个。解析程序的扩展处理流程可用图7.3表示。7.3 中断解析的扩展处理流程第7章 ARM异常中断处理及编程 7.3 中断解析的扩展处理流程第7章 ARM异常中断处理及编程 (4) 向量中断的处理在设计外部扩展的中断控制器时提供了一种叫 做“向量中断”的中断跳转机制。与前面叙述的扩 展解析跳转流程有所不同,它不需要软件来识别具 体的中断源,也就是不需要添加图7.3中的IRQ/FIQ 服务程序,而完全由硬件自动跳转到对应的中断地 址。其它跳转流程的原理都是一样的

15、。这相当于扩 展了ARM内核的硬件中断向量表,减小了中断响应 延时。以S3C2410X处理器的外部中断0为例,需要 在其对应的硬件固定跳转地址0x00000020处添加指 令: ldr pc,=HandlerEINT,使得程序跳转到其服务 程序HandlerEINT0处执行。向量中断的处理如图7.4 所示。第7章 ARM异常中断处理及编程 图7.4 向量中断的处理 第7章 ARM异常中断处理及编程 7.3 中断解析的扩展处理流程7.3 ARM应用系统中异常中断处理程序的安装在ARM应用程序中安装异常中断处理程序通常有下 列两种方法。 使用跳转指令:可以在异常中断对应异常向量表 中特定位置放置一

16、条跳转指令,直接跳转到该异常中 断的处理程序。但只能在32M空间范围内跳转。 使用数据读取指令LDR:使用数据读取指令LDR 向程序计数器PC中直接赋值。这种方法分为两步:先 将异常中断处理程序的绝对地址存放在距离向量表 4KB范围内的一个存储单元中;再使用数据读取指令 LDR将该单元的内容读取到程序计数器PC中。第7章 ARM异常中断处理及编程 7.3 中断解析的扩展处理流程7.3.1 在系统复位时安装异常中断处理程序1地址0x00处为ROM的情况当地址0x0处为ROM时:在异常中断向量表中,可以使用数据读取指令LDR直接向程序计数器PC中赋值,也可以直接使用跳转指令跳转到异常中断处理程序。第7章 ARM异常中断处理及编程 使用数据读取指令LDR的示例如下所示: Vector_Ini

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号