女影星的名字图片大全:ARM9(S3C2440)的中断系统——理论知识

来源:百度文库 编辑:中财网 时间:2024/05/06 01:31:55

一  ARM9(S3C2440)的中断系统——理论知识

(2011-08-05 12:12:05) 转载分类: ARM9裸机学习笔记 概述
S3C2440A 中的中断控制器接受来自60 个中断源的请求。提供这些中断源的是内部外设,如DMA 控制器、
UART、IIC 等等。在这些中断源中,UARTn、AC97 和EINTn 中断对于中断控制器而言是“或”关系。
当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求ARM920T 内核的FIQ
或IRQ。
仲裁步骤由硬件优先级逻辑决定并且写入结果到帮助用户通告是各种中断源中的哪个中断发生了的中断挂起寄存器中

中断控制器操作
程序状态寄存器(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,则可以
服务中断请求。还有就是清除中断时有子中断的要先清除子中断位,再清除中断位,有子中断的要设置子中断屏蔽寄存器打开子中断。