S3C2440的中断体系结构

概述

S3C2440A中的中断控制器接受来自60个中断源的请求。提供这些中断源的能够是内部外设,如DMA控制器、UART、IIC等等。在这些中断源中,UARTn、AC97和EINTn中断对于中断控制器而言是“或”关系(在这几个源中还能够有中断分支)。3d

当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求ARM920T内核的FIQ或IRQ。blog

总流程图以下:

程序状态寄存器(PSR)的 F 位和 I 位

若是 ARM920T CPU 中的 PSR 的 F 位被置位为 1,CPU 不会接受来自中断控制器的快中断请求(FIQ)。同
样的若是 PSR 的 I 位被置位为 1,CPU 不会接受来自中断控制器的中断请求(IRQ)。所以,中断控制器能够经过
清除 PSR 的 F 位和 I 位为 0 而且设置 INTMSK 的相应位为 0 来接收中断。table

中断模式

ARM920T 有两种中断模式的类型:FIQ 或 IRQ(能够经过 中断模式 INTMOD 寄存器 设置成FIQ或IRQ)。全部中断源在中断请求时决定使用哪一种类型。class

中断挂起寄存器

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

中断屏蔽寄存器

此寄存器代表若是中断相应的屏蔽位被置位为 1 则禁止该中断。若是某个 INTMSK 的中断屏蔽位为 0,将正常
服务中断。若是 INTMSK 的中断屏蔽位为 1 而且产生了中断,将置位源挂起位。请求

中断控制器支持 60 个中断源,以下图所示:


这里,外部中断 4 至 7是共用一个源、UART2 中断的(ERR、RXD 和 TXD)是共用一个源....我以为这样的做用就是为了每项功能 (例如挂起、屏蔽)能够用一个寄存器来管理。程序

中断次级源,以下图:


我想你们看到这个图后就应该明白了为何要有 次级源挂起(SUBSRCPND)寄存器 和 中断次级屏蔽(INTSUBMSK)寄存器 了吧。方法

当一个源中还有子源的话,就会走第一张图的上支路,反而走下支路。假如咱们在 INTSUBMSK 中屏蔽了 INT_TC 这个中断,和它共处一个源的 INT_ADC_S 中断仍是能够进来,可是若是屏蔽了 INT_ADC 这个中断源,它们两个就都会被屏蔽掉。im

中断优先级

每一个仲裁器能够处理基于 1 位仲裁器模式控制(ARB_MODE)和选择控制信号(ARB_SEL)的 2 位的 6 个中断请求,以下:d3

仲裁器的 REQ0 的优先级老是最高而且 REQ5 的优先级老是最低经过改变 ARB_SEL 位,能够轮换 REQ1 到 REQ4 的顺序(当 ARB_MODE 为 1 时)。
– 若是 ARB_SEL 位为 00b,优先级顺序为 REQ0、REQ一、REQ二、REQ三、REQ4 和 REQ5。
– 若是 ARB_SEL 位为 01b,优先级顺序为 REQ0、REQ二、REQ三、REQ四、REQ1 和 REQ5。
– 若是 ARB_SEL 位为 10b,优先级顺序为 REQ0、REQ三、REQ四、REQ一、REQ2 和 REQ5。
– 若是 ARB_SEL 位为 11b,优先级顺序为 REQ0、REQ四、REQ一、REQ二、REQ3 和 REQ5。
中断优先级发生模块:

最后介绍一下中断偏移(INTOFFSET)寄存器

中断偏移寄存器中的值代表了是哪一个 IRQ 模式的中断请求在 INTPND 寄存器中。此位能够经过清楚 SRCPND
和 INTPND 自动清除

大概意思就是你能够把这个寄存器当成中断请求后的标志位,经过察看偏移值就能够知道当前是哪一个中断源发生请求。

相关文章
相关标签/搜索