实验5_外部中断应用实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

外部中断控制寄存器可以控制外部中断信号有效方式,外部中断信号有效方式可以设置

相关文档
最新文档