《嵌入式ARM技术及应用》课程实验指导书实验6:外部中断实验,(2014.7.10)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
地址异常类型进入时的模式
进入时 I 的状态
进入时 F 的状
态
0x00000000复位管理禁止禁止0x00000004未定义指令未定义I F 0x00000008软件中断管理禁止F 0x0000000C 中止(预取)中止I F 0x00000010中止(数据)
中止I F 0x00000014
保留
保留
--
实验三 外部中断实验
一、实验目的
理解ARM 处理器中断原理;
掌握中断服务子程序,中断中现场的保护和恢复以及中断的返回程序的编写方法;
利用中断方式,实现键盘中断流程。
二、实验原理
本实验以键盘中断为例,介绍 ARM 微处理器中断处理过程。设定编程预期的实验现象:系统启动后,按 12345678 任意键,相应的八段数码管就会显示相应的数字。
三、主要实验设备
1.硬件:宿主机、ARM 教学试验箱;
2.软件:Windows 操作系统、ADS1.2集成开发环境。
四、实验内容
1.首先设置中断向量表,见表4.1。
表 4.1 ARM 中断向量表
每当一个中断发生后,ARM 处理器便强制把程序计数器(PC )指
针置为向量表中对应中断类型所对应的地址值。由于ARM微处理器每个中断向量中只有4个字节的大小,所以通常在中断向量位置存放1条跳转指令或存放1条直接对程序计数器(PC)寄存器赋值的指令,使程序能跳转到相应的异常中断处理程序中执行。如果中断处理程序所在的物理地址小于32MB,可使用B跳转指令;当跳转范围大于32MB 时,需使用LDR指令。对于程序中未使用的中断,可使中断异常跳转到一个只含返回指令的哑函数或跳转到自身标号地址处,以防止中断异常引起系统的混乱。比如:
Undefined_Handler
B Undefined_Handler
下面代码为 ARM 微处理器中断向量表的初始化过程。
B Reset_Handler ; //跳转复位 0x0000,0000 复位管理模式
B Undefined_Handler ; //跳转未定义指令 0x0000,0004 未定义指令未定义模式
B SWI_Handler ; //跳转软件中断 0x0000,0008 软件中断管理模式
B Prefetch_Handler ; //跳转预取指令 0x0000,000
C 预取指令中止模式
B DataAbort_Handler ; //跳转数据异常 0x0000,0010 中止模式
NOP ; //延时保留
B IRQ_Handler ; //跳转 IRQ(中断请求) 0x0000,0018 IRQ
B FIQ_Handler ; // 跳转 FIQ(快速中断请求) 0x0000,001
C FIQ
从表4.1分析可知,NOP 一定不能去掉,必须要保证中断向量表正确建立。
当然,ARM 微处理器中断向量表的初始化工作也可以写成如下形式:
LDR PC,=Reset_Handler ; //跳转复位 0x0000,0000 复位
管理模式
LDR PC,=Undef_instrution_Handler ; //跳转未定义指令
0x0000,0004 未定义指令未定义模式
LDR PC,=SWI_Handler ; //跳转软件中断 0x0000,0008 软件中断管理模式
LDR PC,=Prefetch_Handler ; //跳转预取指令 0x0000,000C 预取指令中止模式
LDR PC,=Abort_Handler ; //跳转数据异常 0x0000,0010 中止模式
NOP ; //延时保留
LDR PC,=IRQ_Handler ; //跳转 IRQ(中断请求)
0x0000,0018 IRQ
LDR PC,=FIQ_Handler ; // 跳转 FIQ(快速中断请求)
0x0000,001C FIQ
2.中断处理过程
GPIO、堆栈、内存等初始化过程在实验一中已经介绍过,下面重点对中断初始化过程作详细分析:
处理器要对中断进行处理时,需要对CPSR的IRQ和FIQ与
ICMR(中断控制器屏蔽寄存器)相应的中断屏蔽位进行正确的配置:即当CPSR的IRQ、FIQ位为“0”时,ARM 处理器可以响应IRQ、FIQ 中断,如果为“1”时,ARM 处理器将不响应IRQ或FIQ中断。
同样,当ICMR的相应位为“1”时,相应的中断被开启,为“0”时,相应的中断被屏蔽。中断控制器处理中断架构如图4.1所示,该图为某个中断请求进入中断控制器后,被成功响应时的 IRQ 和 FIQ 的流程图。
如果在中断开启的情况下,即中断屏蔽寄存器ICMR相应的位
置“1”时,当中断源产生中断时,中断请求寄存器ICPR相应的中断源所对应位会被设置 1。
发出的中断请求通过中断级别控制寄存器ICLR相应的设置将产生IRQ或FIQ中断,同时该中断请求会发送到IRQ中断请求寄存器ICIP或FIQ中断请求ICFR上。
中断请求将以IRQ或FIQ异常中断方式进行处理。即中断控制器根据中断向量表,跳转到相应的中断服务例程中处理中断请求。
开启IRQ中断,使得ARM处理器可以响应外部中断。图4.1为中断控制器处理功能架构。
图4.1 中断控制器处理功能架构
代码如下:
/***************************
;Enable & Set Interrupt
;***************************/
mrs r1, CPSR ; //读取 CPSR 寄存器值