ARM的中断原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ARM的中断原理(转)
1.中断概述
CPU与外设的数据传输方式通常有以下3种方式:查询方式、中断方式、DMA方式。
所谓查询方式是指,CPU不到查询外设的状态,如果外设准备就绪则开始进行数据传输;如果外设还没有准备好,CPU将进入循环等待状态。很显然这样浪费了大量的CPU时间,降低了CPU的利用率。
所谓中断方式是指,当外设准备好与CPU进行数据传输时,外设首先向CPU发出中断请求,CPU 接收到中断请求并在一定条件下,暂时停止原来的程序并执行中断服务处理程序,执行完毕以后再返回原来的程序继续执行。由此可见,采用中断方式避免了CPU把大量的时间花费在查询外设状态的操作上,从而大大提高了CPU的执行效率。
1.中断概述
CPU与外设的数据传输方式通常有以下3种方式:查询方式、中断方式、DMA方式。
所谓查询方式是指,CPU不到查询外设的状态,如果外设准备就绪则开始进行数据传输;如果外设还没有准备好,CPU将进入循环等待状态。很显然这样浪费了大量的CPU时间,降低了CPU的利用率。
所谓中断方式是指,当外设准备好与CPU进行数据传输时,外设首先向CPU发出中断请求,CPU 接收到中断请求并在一定条件下,暂时停止原来的程序并执行中断服务处理程序,执行完毕以后再返回原来的程序继续执行。由此可见,采用中断方式避免了CPU把大量的时间花费在查询外设状态的操作上,从而大大提高了CPU的执行效率。
ARM系统包括两类中断:一类是IRQ中断,另一类是FIQ中断。IRQ是普通中断,FIQ是快速中断,在进行大批量的复制、数据传输等工作时,常使用FIQ中断。FIQ的优先级高于IRQ。
在ARM系统中,支持7类异常,包括:复位、未定义指令、软中断、预取中止、数据中止、IRQ和FIQ,每种异常对应于不同的处理器模式。一旦发生异常,首先要进行模式切换,然后程序将转到该异常对应的固定存储地址执行。这个固定的地址称为异常向量。异常向量中保存的通常为异常处理程序的地址。ARM的异常向量如下:
异常模式正常地址高向量地址
复位管理 0x00000000 0xFFFF0000
未定义指令未定义 0x00000004 0xFFFF 0004
软中断管理 0x00000008 0xFFFF 0008
预取指中止中止0x0000000C 0xFFFF 000C
数据中止中止0x00000010 0xFFFF0010
IRQ IRQ 0x00000018 0xFFFF0018
FIQ FIQ 0x0000001C 0xFFFF 001C
由此可见,IRQ中断和FIQ中断都属于ARM的异常模式。在ARM系统中,一旦有中断发生,不管是外部中断,还是内部中断,正在执行的程序都会停下来。接下来通常会按照如下步骤处理中断:
(1)保存现场。保存当前的PC值到R14,保存当前的程序运行状态到SPSR。
(2)模式切换。根据发生的中断类型,进入IRQ模式或FIQ模式。
(3)获取中断源。以异常向量表保存在低地址处为例,若是IRQ中断,则PC指针跳动0x18处;若是FIQ中断,则跳到0x1C处。IRQ和FIQ的异常向量地址处一般保存的是中断服务子程序的地址,所以接下来PC指针跳入中断服务子程序处理中断。
(4)中断处理。
(5)中断返回,恢复现场。当完成中断服务子程序后,将SPSR中保存的程序运行状态恢复到CPSR 中,R14中保存的被中断程序的地址恢复到PC中,继续执行被中断的程序。
2.S3C2410A的中断控制器
ARM920T CPU的中断可分为FIQ和IRQ。为了使CPU能够响应中断,必须首先对程序状态寄存器(PSR)中的F位和I位进行正确设置。如果PSR的F位为1,则CPU不会响应来自中断控制器的FIQ 中断;如果PSR的I位为1,则CPU不会响应来自中断控制器的IRQ中断。因此,为了使中断控制器能够接收中断请求,必须在启动代码中将PSR中的F位和I位设置为0,同时还需要将中断屏蔽寄存器(INTMSK)中的相应位设置为0。
中断屏蔽寄存器用于指示中断是否禁止。设置为1表示相应中断禁止,为0则发生中断时正常执行中断服务。如果发生中断时相应的屏蔽位正好为1,则中断挂起寄存器中的相应中断源挂起位将置1。
S3C2410A有2个中断挂起寄存器:中断源挂起寄存器(SPCPND)和中断挂起寄存器(INTPND)。这两个挂起寄存器用于指示某个中断请求是否处于挂起状态。当多个中断源请求中断服务时,SRCPND寄存器中的相应位置1,仲裁过程结束后INTPND寄存器中只有1位被自动置1。
S3C2410A中的中断控制器能够接收来自56个中断源的请求。见芯片手册,由于引脚有限,因此采用了共享中断技术。由芯片手册可知S3C2410A共有32个中断请求信号。中断请求的优先级逻辑是由7个仲裁器组成的,其中包括6个一级仲裁器和1个二级仲裁器。每个仲裁器是否使能由寄存器PRIORITY[6:0]决定。每个仲裁器可以处理4~6个中断源,从中选出优先级最高的。优先级顺序由寄存器PRIORITY[20:7]的相应位决定。
要想使用S3C2410A的中断控制器,必须对以下列出的寄存器进行正确配置。以下寄存器中的每一位含义参阅芯片手册。
寄存器地址描述复位值SRCPND 0x4A000000 中断源挂起寄存器,当中断产生后,相应位置1 0x0 INTMOD 0x4A000004 中断模式寄存器 0=IRQ模式,1=FIQ模式0x0 INTMSK 0x4A00 0008 中断屏蔽寄存器0=中断允许,1=中断蔽 0xFFFFFFF
PRIORITY 0x4A00000C 中断优先级控制寄存器,设置中断优先级 0x7F INTPND 0x4A000010 中断挂起寄存器,只是中断请求的状态。0x0
0=该中断没有请求1=该中断源发出中断请求
INTOFFSET 0x4A000014 中断偏移寄存器,只是IRQ中断源0x0 SUBSRCPND 0x4A000018 子中断源挂起寄存器,指示中断请求的状态 0x0
0=该中断没有请求1=该中断源发出中断请求