实验5_外部中断应用实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五外部中断应用实验
一、实验目的:
1.了解S3C2440外部中断的工作原理。
2.掌握S3C2440外部中断的使用方法。
二、实验设备:
PC机、仿真器、ARM 实验箱。
三、实验内容:
通过外部S201、S202、S203 按键触发外部中断。
四、实验原理:
5.1 ARM 的异常中断类型
在嵌入式系统中外部设备的功能实现主要是靠中断机制来实现的。中断功能可以解决
CPU 内部运行速度远远快于外部总线速度而产生的等待延时问题。ARM 提供的FIQ 和
IRQ 异常中断用于外部设备向CPU 请求中断服务,一般情况下都是采用IRQ 中断。
5.2 异常中断响应过程和返回过程
异常中断的响应过程:
1).保存处理器当前状态寄存器CPSR 的值到备份程序状态寄存器SPSR 中。
2).设置但前程序状态寄存器CPSR 的值,其中包括:设置CPSR 响应位的值,使处理
24
器进入特定的处理器模式;按要求屏蔽中断,通常应该屏蔽IRQ 中断。在FIQ 总断时屏
蔽FIQ 中断。
3).设置Lr 寄存器。将相应中断模式的Lr 寄存器的值设为异常中断的返回地址。
4).处理程序计数器PC,将PC 值设为相应的中断向量的地址,从而实现跳转以执行中
断服务程序。
异常中断的返回过程:
当处理器执行完以上流程之后,处理器已经从中断向量进入异常处理的状态。异常中断
处理完毕之后,在异常中断程序的末端,处理器进入异常中断的返回状态,其流程如下:1).恢复状态寄存器。将保存的备份程序状态寄存器SPSR 值赋给当前程序状态寄存器CPSR。
2).将返回地址赋值到程序计数器(PC)。这样程序将返回到异常中断产生的下一条指令
或出现问题的指令处执行。
需要注意的是:对于不同的异常中断,其返回地址的计算方法也是不同的,IRQ 和FIQ
异常中断产生时,程序计数器PC 已经更新,而SWI 中断和未定义指令中断时由当前指令
自身产生的,程序计数器PC尚未更新,所以要计算出下一条指令的地址来执行返回操作;指令预取指中指异常中断和数据访问中断要求,返回到出现异常的执行现场,重新执行操作。保存状态寄存器CPSR->进入特定模式、屏蔽中断->设置Lr 寄存器->设置程序计
数器PC进入中断向量、异常中断的处理程序->恢复状态寄存器->将返回地址复制到程序计数器。
5.3 异常中断的安装
S3C2440 系统通过异常向量表安装异常中断处理程序。即将异常向量表指向异常中断
处理程序的入口,实现面向异常中断的跳转,异常向量中断的的入口地址是固定的(0x00 -0x1C),系统运行到满足异常中断时,系统将自动跳入相应的异常中断向量表中,而在异常向量表中保存的正是利用跳转指令或LDR 指令指向该中断的异常中断处理程序,这就实现了异常中断处理程序的安装。
1).利用跳转指令实现异常中断的安装
将 BL 指令放置到中断向量表的特定位置,跳转目标地址为中断处理程序的首地址,
便可直接实现异常中断的安装。其优点是BL指令可以直接保存地址,缺点是BL的跳转范
围只有32MB 的地址空间。
2).利用ldr 指令实现异常中断的安装
利用ldr 直接向程序计数器PC 中赋值也可以实现中断处理程序的安装。先要将异常
中断处理程序首地址的绝对地址放在临近的一个存储单元中,然后用ldr 命令将该内存单元中的地址读取到PC 中。其优点是可调用程序的范围不受限制。
五、S3C2440 的中断控制器:
SRCPND――源中断指示寄存器
SRCPND 寄存器32 位中的每一位对应着一个中断源,每一位被设置为 1,则相应的
中断源产生中断请求并且等待中断被服务。因此,这个寄存器表明了哪个中断源在等待中断请求被处理。注意,SRCPND 寄存器的每一位是由中断源自动设置的,而不管INTMSK
寄存器中的屏蔽位是否置 1。另外,SRCPND 寄存器不影响中断控制器的优先级逻辑。
在指定中断源的中断服务程序中,SRCPND 寄存器相对应的位必须被清除,这样才可
以正确响应来自同一中断源的中断请求。如果从ISR 返回而没有清除相应的位,也就是SRCPND 寄存器中的对应的位还是1,那么就会一直响应这个中断请求。
SRCPND 中相应的中断位清除的时间依赖于用户的需求,如果想要从同一中断源接收
另一次有效的中断请求,你在第一次就应该清除相应的位,并且使能中断。用户可以通过向SRCPND 寄存器的相应位写“1”,这样可以清除该位。下表为SRCPND 寄存器的地址和位定义说明。
INTMOD――中断模式寄存器
中断模式寄存器(INTMOD)的32 位中的每一位对应一个中断源,当INTMOD 的每
一位都设置位 1,则ARM 内核将以FIQ 模式相应中断,否则将以IRQ 模式相应中断。
25
INTMOD 寄存器的定义如下表:
INTPND――中断请求寄存器
中断请求寄存器32 位中的每一位对应着相应的中断请求,经过优先级逻辑后,
INTPND 寄存器只能有一位被设置为 1,并且向ARM 产生中断请求。在IRQ 中断服务
子程序,能够读取这个寄存器的值来决定32 个中断源的那一个中断被服务。
同 SRCPND 寄存器,在中断服务子程序里,这个寄存器的相应位需要被清除。我们可
以向INTPND 寄存器写一个数据 1,来清除寄存器的指定位。
INTMSK――中断屏蔽寄存器
在 INTMSK 寄存器中,32 位依次对应着每个中断源,如果指定位被设为 1,ARM 将
不响应中断源的中断请求(注意,即使在SRCPND 相应的位被置位1 的条件下也不响应)。如果屏蔽位为 0,则中断请求可以被响应。
INTOFFSET――中断偏移寄存器
中断偏移寄存器INTOFFSET 中的值显示了INTPND 寄存器中哪一个IRQ 的中断请
求,这个位在清除SRCPND 和INTPND 后将自动清除。
S3C2440 子中断列表
SUBSRCPND――次级源中断指示寄存器
INTSUBMSK――次级中断屏蔽寄存器
EXTINTn――外部中断控制寄存器n
外部中断控制寄存器可以控制外部中断信号有效方式,外部中断信号有效方式可以设置