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