ARM920T(S3C2440)的中断系统

IRQ中断和快速中断FIQ区别

ARM920T内核有两个中断:IRQ中断和快速中断FIQ

FIQ和IRQ是两种不同类型的中断,ARM为了支持这两种不同的中断,提供了对应的叫做FIQ和IRQ处理器模式(ARM有7种处理模式)。
一般的中断控制器里我们可以配置与控制器相连的某个中断输入是FIQ还是IRQ,所以一个中断是可以指定为FIQ或者IRQ的,为了合理,要求系统更快响应,自身处理所耗时间也很短的中断设置为FIQ,否则就设置了IRQ。
如果该中断设置为了IRQ,那么当该中断产生的时候,中断处理器通过IRQ请求线告诉ARM,ARM就知道有个IRQ中断来了,然后ARM切换到IRQ模式运行。类似的如果该中断设置为FIQ,那么当该中断产生的时候,中断处理器通过FIQ请求线告诉ARM,ARM就知道有个FIQ中断来了,然后切换到FIQ模式运行。

简单的对比的话就是FIQ比IRQ快,为什么快呢?

1:ARM的FIQ模式提供了更多的banked寄存器,r8到r14还有SPSR,而IRQ模式就没有那么多,R8,R9,R10,R11,R12对应的banked的寄存器就没有,这就意味着在ARM的IRQ模式下,中断处理程序自己要保存R8到R12这几个寄存器,然后退出中断处理时程序要恢复这几个寄存器,而FIQ模式由于这几个寄存器都有banked寄存器,模式切换时CPU自动保存这些值到banked寄存器,退出FIQ模式时自动恢复,所以这个过程FIQ比IRQ快。

2:FIQ比IRQ有更高优先级,如果FIQ和IRQ同时产生,那么FIQ先处理。

3:FIQ的中断向量地址在0x0000001C,而IRQ的在0x00000018。(也有的在FFFF001C以及FFFF0018),写过完整汇编系统的都比较明白这点的差别,18只能放一条指令,为了不与1C处的FIQ冲突,这个地方只能跳转,而FIQ不一样,1C以后没有任何中断向量表了,这样可以直接在1C处放FIQ的中断处理程序,由于跳转的范围限制,至少少了一条跳转指令。
4:IRQ和FIQ的响应延迟有区别
IRQ的响应并不及时,IRQ会延迟几个指令周期才跳转到中断向量处,看起来像是在等预取的指令执行完。FIQ的响应不清楚,也许比IRQ快。 

中断延迟:从外部中断请求信号发出到执行对应的中断服务程序ISR的第一条指令所需要的时间。通过软件程序设计来缩短中断延迟的方法有:中断优先级和中断嵌套。

中断控制

中断体系结构主要由中断源和控制寄存器两大部分构成,其寄存器主要有4种:模式、屏蔽、优先级、挂起(标志)寄存器等

寄存器简述

1控制寄存器
1.1模式:
FIQ/IRQ(默认IRQ)
1.2屏蔽:
中断是否允许, 
1 表示被屏蔽
1.3优先级:
多个中断源同时来临时处理的顺序
2状态:-=>  挂起/标志
读该寄存器查看中断状态, 
读到1中断来临 
写1清除中断标志,写1有效, 写0无效, 

寄存器名称

中断相关的寄存器
中断源挂起寄存器 SRCPND
中断挂起寄存器 INTPND
中断源屏蔽寄存器 INTMSK
中断模式寄存器 INTMOD
子中断源挂起寄存器 SUBSRCPND
子中断源屏蔽寄存器 SUBINTMSK

外部中断相关寄存器
外部中断源挂起寄存器 EINTPEND
外部中断源屏蔽寄存器 EINTMASK
外部中断控制 EXITINTx

寄存器详述

中断控制器操作

程序状态寄存器(PSR)的F 位和I 位
如果ARM920T CPU 中的PSR 的F 位被置位为1,CPU 不会接受来自中断控制器的快中断请求(FIQ)。同样的如果PSR 的I 位被置位为1,CPU 不会接受来自中断控制器的中断请求(IRQ)。因此,中断控制器可以通过清除PSR 的F 位和I 位为0 并且设置INTMSK 的相应位为0 来接收中断。

中断模式

ARM920T 有两种中断模式的类型:FIQ 或IRQ。所有中断源在中断请求时决定使用哪种类型。

中断挂起寄存器

S3C2440A 有两个中断挂起寄存器:源挂起寄存器(SRCPND)和中断挂起寄存器(INTPND)。这些挂起寄存器表明一个中断请求是否为挂起。当中断源请求中断服务,SRCPND 寄存器的相应位被置位为1,并且同时在仲裁步骤后INTPND 寄存器仅有1 位自动置位为1。如果屏蔽了中断,则SRCPND 寄存器的相应位被置位为1。这并不会引起INTPND 寄存器的位的改变。当INTPND 寄存器的挂起位为置位,每当I 标志或F 标志被清除为0 中断服务程序将开始。SRCPND 和INTPND 寄存器可以被读取和写入,因此服务程序必须首先通过写1 到SRCPND寄存器的相应位来清除挂起状态并且通过相同方法来清除INTPND 寄存器中挂起状态。

中断屏蔽寄存器

此寄存器表明如果中断相应的屏蔽位被置位为1 则禁止该中断。如果某个INTMSK 的中断屏蔽位为0,将正常服务中断。如果INTMSK 的中断屏蔽位为1 并且产生了中断,将置位源挂起位。

中断控制器特殊寄存器

此处中断控制器中有5 个控制寄存器:源挂起寄存器、中断模式寄存器、屏蔽寄存器、优先级寄存器和中断挂起寄存器。
所有来自中断源的中断请求首先被记录到源挂起寄存器中。基于中断模式寄存器,它们被分配到2 个组中,包括快中断请求(FIQ)和中断请求(IRQ)。IRQ 的多仲裁过程是基于优先级寄存器。

源挂起(SRCPND)寄存器

SRCPND 寄存器由32 位组成,其每一位都涉及一个中断源。如果中断源产生了中断则相应的位被设置为1并且等待中断服务。因此此寄存器指示出是哪个中断源正在等待请求服务。注意SRCPND 寄存器的每一位都是由中断源自动置位,其不顾INTMASK 寄存器中的屏蔽位。另外SRCPND 寄存器不受中断控制器的优先级逻辑的影响。
在指定中断源的中断服务程序中,必须通过清除SRCPND 寄存器的相应位来正确的获得来自相同源的中断请求。如果从ISR 中返回并且未清除相应位,则中断控制器的操作就好像其它中断请求已经从同一个源进入了。换句话说,如果SRCPND 寄存器的指定位被设置为1,其通常被认作一个有效中断请求正在等待服务。
清除相应位的时间依赖于用户的需要。如果希望收到来自相同冤源的其它有效请求,则应该首先清除相应位,并且接着使能中断。
可以通过写入一个数据到此寄存器来清除SRCPND 寄存器的指定位。其只清除那些数据中被设置为1 的相应位置的SRCPND 位。那些数据中被设置为0 的相应位置的位保持不变。 

中断模式(INTMOD)寄存器

此寄存器由32 位组成,其每一位都都涉及一个中断源。如果某个指定为被设置为1,则在FIQ(快中断)模式中处理相应中断。否则则在IRQ 模式中处理。特别注意,只能有一个中断设置为快速中断模式。

中断屏蔽(INTMSK)寄存器

此寄存器由32 位组成,其每一位都都涉及一个中断源。如果某个指定为被设置为1,则CPU 不会去服务来自相应中断源(请注意即使在这种情况中,SRCPND 寄存器的相应位也设置为1)的中断请求。如果屏蔽位为0,则
可以服务中断请求。

中断挂起(INTPND)寄存器

中断挂起寄存器中32 位的每一位都表明了是否相应未屏蔽并且正在等待中断服务的中断请求具有最高的优先级。当INTPND 寄存器在优先级逻辑后被定位了,只有1 位可以设置为1 并且产生中断请求IRQ 给CPU。IRQ 的
中断服务程序中可以读取此寄存器来决定服务32 个中断源的哪个源。
就如SRCPND 寄存器,必须在中断服务程序中清除了SRCPND 寄存器后清除此寄存器。可以通过写入数据到此寄存器中来清除INTPND 寄存器的指定位。只会清除数据中设置为1 的相应INTPND 寄存器位的位置。数据
中设置为0 的相应位的位置则保持不变。特别注意:在清除源挂起寄存器和中断挂起寄存器时,是向寄存器中的相应位写1,不是写0,这是由寄存器的硬件结构决定的。
次级源挂起(SUBSRCPND)寄存器可以通过写入数据到此寄存器来清除SUBSRCPND 寄存器的指定位。只有数据中那些被设置为1 的相应
SUBSRCPND 寄存器的位的位置才能被清除。数据中那些被设置为0 的相应位的位置则保持不变。

中断次级屏蔽(INTSUBMSK)寄存器

此寄存器有11 位,其每一位都与一个中断源相联系。如果某个指定位被设置为1,则相应中断源的中断请求
不会被CPU 所服务(请注意即使在这种情况中,SRCPND 寄存器的相应位也设置为1)。如果屏蔽位为0,则可以

服务中断请求。

还有就是清除中断时有子中断的要先清除子中断位,再清除中断位,有子中断的要设置子中断屏蔽寄存器打开子中断。
设置步骤:
0.相应引脚对应成外部中断功能
1. 设置触发方式:上升沿、下降沿、高电平、
低电平、双沿触发
2. 清中断源挂起寄存器(状态寄存器)、中断
服务寄存器(可选、防止原有中断干扰)
3. 设置中断模式(IRQ或FIQ可选,默认为IRQ)
4. 设置中断优先级(可选,一般默认即可)
5. 打开外部中断屏蔽(允许中断)
6. 设置中断服务入口程序

进入中断:
1、执行中断服务程序

2、清中断源挂起寄存器

转载:http://blog.csdn.net/gatieme/article/details/25033089

时间: 2024-10-26 05:50:05

ARM920T(S3C2440)的中断系统的相关文章

Linux中断(interrupt)子系统之一:中断系统基本原理【转】

转自:http://blog.csdn.net/DroidPhone/article/details/7445825 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 设备中断控制器和CPU IRQ编号 在驱动程序中申请中断 通用中断子系统Generic irq的软件抽象 irq描述结构struct irq_desc 中断子系统的proc文件接口 这个中断系列文章主要针对移动设备中的Linux进行讨论,文中的例子基本都是基于ARM这一体系架构,其他架构的原理其实也差不多,区

linux中断系统那些事之----中断处理过程【转】

转自:http://blog.csdn.net/xiaojsj111/article/details/14129661 以外部中断irq为例来说明,当外部硬件产生中断时,linux的处理过程.首先先说明当外部中断产生时,硬件处理器所做的工作如下: R14_irq = address of next instruction to be executed + 4/*将寄存器lr_mode设置成返回地址,即为当前pc的值,因为pc是当前执行指令的下两条指令*/        SPSR_irq = CP

stm32之中断系统

概述: 提供中断控制器,用于总体管理异常,称之为"嵌套向量中断控制器:Nested Vectored Interrupt Controller (NVIC) VIC:中断管理器: NVIC:内嵌中断管理器,将中断嵌套进入内核: 带来的优势:1.响应速度提高: 2.标准化,统一管理: stm32创新:所以IO口都可以中断: stm32的中断向量表:一个中断源,对应的地址.优先级等信息: 具体参见stm32的文档: NVIC中断优先级: 中断优先级高的中断可以抢占中断优先级低的中断,从而实现了中断嵌

Linux的IRQ中断子系统分析

本文以Linux中断子系统架构为视角,旨在提供一个对Linux中断系统的全局认识,不涉及具体实现细节. 一.Linux中断子系统架构 在Linux中断子系统(generic irq)出现之前,内核使用__do_IRQ处理所有的中断,这意味着__do_IRQ中要处理各种类型的中断,这会导致软件的复杂性增加,层次不分明,而且代码的可重用性也不好.通用中断子系统的原型最初出现于ARM体系中,一开始内核的开发者们把3种中断类型区分出来(电平中断.边缘中断.简易中断),后来又针对某些需要回应eoi(end

《51单片机应用开发从入门到精通》——2.6 中断控制功能的作用

2.6 中断控制功能的作用 51单片机应用开发从入门到精通 2.6.1 什么是中断 所谓中断,就是打断正在进行的工作,转而去做另外一件事情. 比如说,会计正在记账,桌面上摆着摊开的账本和正在使用的计数器,这时候有人敲门叫他去办另一件事情,他暂时放下手头工作,并保存好账本和计数器以免被弄乱或丢失(在中断中称"保护现场"):等处理完事情后返回办公桌前再拿出帐本和计数器(在中断中称"恢复现场"),继续记账.这一过程就是中断以及中断处理的过程. 单片机的中断过程与上述过程类

操作系统课堂笔记(2)操作系统的硬件环境之缓冲技术、中断技术

缓冲区是硬件设备之间进行数据传输时专门用来暂存这些数据的一个存储区域.    缓冲技术一般在三种情况下采用:1.处理器与内存之间,2.处理器与其他外部设备之间,3.设备与设备之间. 多Cache技术:Cache是离CPU最近的高速缓存,能使CPU更快速的访问经常使用的数据.是运行过程中,CPU首先到一级Cache中找数据(也可能是一段指令序列).如果没有找到,那么CPU就接着到二级CPU中找,然后是三级Cache(如果有的话),如果还是找不到,CPU就只好到运行速度较慢的系统内存中去找了. 中断

海量图片系统集群分布式存储和负载均衡案例分享

对于Web服务器而言,用户对图片信息的访问是很消耗服务器资源的.当一个网页被浏览时,Web服务器与浏览器建立连接,每个连接表示一个并发.当页面包含多个图片时,Web服务器与浏览器会产生多个连接,同时发送文字和图片以提高浏览速度.因此,页面中图片越多Web服务器受到的压力也就越大. 一般小型网站是把所有页面和图片统一存放在一个主目录下,这样的网站对系统架构.性能要求都很简单.下面是原理图 一些稍有规模的网站都保存有大量图片资源.用户在访问这些站点网页时,网页中图片信息占到页面数据流量的大部分.由于

Linux 内核中断内幕【转】

转自:https://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/index.html 本文对中断系统进行了全面的分析与探讨,主要包括中断控制器.中断分类.中断亲和力.中断线程化与 SMP 中的中断迁徙等.首先对中断工作原理进行了简要分析,接着详细探讨了中断亲和力的实现原理,最后对中断线程化与非线程化中断之间的实现机理进行了对比分析. 3评论 苏 春艳, 在读研究生 杨 小华 (normalnotebook@126.com),

linux内核分析笔记----中断和中断处理程序【转】

转自:http://www.cnblogs.com/hanyan225/archive/2011/07/17/2108609.html 中断还是中断,我讲了很多次的中断了,今天还是要讲中断,为啥呢?因为在操作系统中,中断是必须要讲的..        那么什么叫中断呢, 中断还是打断,这样一说你就不明白了.唉,中断还真是有点像打断.我们知道linux管理所有的硬件设备,要做的第一件事先是通信.然后,我们天天在说一句话:处理器的速度跟外围硬件设备的速度往往不在一个数量级上,甚至几个数量级的差别,这