S3C2440的中断体系结构
概述
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(可以通过 中断模式 INTMOD 寄存器 设置成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 并且产生了中断,将置位源挂起位。
中断控制器支持 60 个中断源,如下图所示:

这里,外部中断 4 至 7是共用一个源、UART2 中断的(ERR、RXD 和 TXD)是共用一个源....我觉得这样的作用就是为了每项功能 (例如挂起、屏蔽)可以用一个寄存器来管理。
中断次级源,如下图:

我想大家看到这个图后就应该明白了为什么要有 次级源挂起(SUBSRCPND)寄存器 和 中断次级屏蔽(INTSUBMSK)寄存器 了吧。
当一个源中还有子源的话,就会走第一张图的上支路,反而走下支路。假如我们在 INTSUBMSK 中屏蔽了 INT_TC 这个中断,和它共处一个源的 INT_ADC_S 中断还是可以进来,但是如果屏蔽了 INT_ADC 这个中断源,它们两个就都会被屏蔽掉。
中断优先级
每个仲裁器可以处理基于 1 位仲裁器模式控制(ARB_MODE)和选择控制信号(ARB_SEL)的 2 位的 6 个中断请求,如下:
| 仲裁器的 REQ0 的优先级总是最高并且 REQ5 的优先级总是最低通过改变 ARB_SEL 位,可以轮换 REQ1 到 REQ4 的顺序(当 ARB_MODE 为 1 时)。 | |
|---|---|
| – 如果 ARB_SEL 位为 00b,优先级顺序为 REQ0、REQ1、REQ2、REQ3、REQ4 和 REQ5。 | |
| – 如果 ARB_SEL 位为 01b,优先级顺序为 REQ0、REQ2、REQ3、REQ4、REQ1 和 REQ5。 | |
| – 如果 ARB_SEL 位为 10b,优先级顺序为 REQ0、REQ3、REQ4、REQ1、REQ2 和 REQ5。 | |
| – 如果 ARB_SEL 位为 11b,优先级顺序为 REQ0、REQ4、REQ1、REQ2、REQ3 和 REQ5。 |
中断优先级发生模块:

最后介绍一下中断偏移(INTOFFSET)寄存器
中断偏移寄存器中的值表明了是哪个 IRQ 模式的中断请求在 INTPND 寄存器中。此位可以通过清楚 SRCPND
和 INTPND 自动清除
大概意思就是你可以把这个寄存器当成中断请求后的标志位,通过察看偏移值就可以知道当前是哪个中断源发生请求。

S3C2440的中断体系结构的更多相关文章
- GNU μC/OS-II 在 S3C2440 上中断的实现
上一篇文章介绍了S3c2440的中断体系结构,今天我们来分析一下GNU-uC/OS-II在S3c2440上中断的实现. 首先找到IRQ的中断的向量,位于 2440init.S : OK ,我们通过名字 ...
- JZ2440 裸机驱动 第9章 中断体系结构
本章目标: 了解ARM体系CPU的7种工作模式 了解S3C2410/S3C2440中断体系结构 掌握S3C2410/S3C2440的中断服务程序的编写方法 9.1 S3C241 ...
- Linux中断体系结构
1.中断处理体系结构 Linux内核将所有中断统一编号,使用一个irq_desc结构数组来描述这些中断. 数组声明在/linux/kernel/irq/handle.c中,其中#define NR_I ...
- s3c2440——按键中断
s3c2440的异常向量表: IRQ中断地址是0x18.所以,根据之前的异常处理方式,我们编写启动文件: 为什么需要lr减4,可以参考这篇文章:http://blog.csdn.net/zzsfqiu ...
- 代码片段---S3C2440按键中断驱动程序的设计
用到的知识: 中断 等待队列 睡眠 select poll misc http://pan.baidu.com/s/1bneSG5h
- S3C2440外部中断系统详解
个中断源的请求.提供这些中断源的是内部外设,如DMA控制器.UART.IIC等等.在这些中断源中,UARTn.AC97和EINTn中断对于中断控制器而言是“或”关系.任意一个中断发生都会触发总中断 当 ...
- arm中断体系结构
ARM处理器中有7种类型的异常,按优先级从高到低的排列如下: 复位异常(Reset). 数据异常(Data Abort). 快速中断异常(FIQ) ...
- s3c2440中断控制器操作
一.ARM中断体系结构 arm有7中异常工作模式 用户模式.快中断模式.管理模式.数据访问终止模式.中断模式.系统模式.未定义指令终止模式. 几种模式有什么不同呢, 1.不同的寄存器 2.不同的权限 ...
- Linux驱动之中断处理体系结构简析
S3C2440中的中断处理最终是通过IRQ实现的,在Linux驱动之异常处理体系结构简析已经介绍了IRQ异常的处理过程,最终分析到了一个C函数asm_do_IRQ,接下来继续分析asm_do_IRQ, ...
随机推荐
- linux python 安装到用户目录
在公司服务器中,python可能存在多个版本,而且python中的包也有多个不同版本,由于不同猿的需求不同,经常会引起程序冲突,影响工作效率.因此,给大家分享一个在没有root权限时,将python安 ...
- C语言基础课第二次作业
一. 题目7-1 统计学生成绩 1.实验代码 #include<stdio.h> int main(void) { int i,grade,n; ,b=,c=,d=,e=; scanf( ...
- ubuntu 应用添加进环境变量
BG:公司同事使用的电脑系统大多为windows ,有部分mac和Ubuntu(我就是那个部分Ubuntu),某些情况为了统一格式,便下载了一些解压即可使用的软件,但是每次点开文件夹然后点开程序很繁琐 ...
- Linux安装yum
方法/步骤 1 查看.卸载已安装的yum包 查看已安装的yum包 #rpm –qa|grep yum 卸载软件包 #rpm –e –nodeps yum 2 下载安装依赖包python python- ...
- middleware#52
错误做法 这道题还是挺有意思的,一开始自己的做法是这样的 const app = { fns: [], callback(ctx) { console.log(ctx) }, use(fn) { th ...
- req、js
requests库中,可不写为headers内各键值对的部分参数: s=requests.Session() #或.session() s.allow_redirects=False #禁止重定 ...
- 如何读取R 的sumary()结果
思路 step 1: sum = summary(model) step 2: sum有好多属性,直接根据属性名称引用($)即可, 如: + > sum$call 返回 model 使用的模型语 ...
- LCA(最近公共祖先)——Tarjan
什么是最近公共祖先? 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点. 换句话说,就是两个点在这棵树上距离最近的公共祖先节点. ...
- GraphQL:你的容颜,十万光年
What? GraphQL 是一种类似于 SQL 的结构化查询语言,由 facebook 于2012年创造,于2015年开源.SQL 在服务端定义,GraphQL 在客户端定义,也就是说 GraphQ ...
- .NET手记-JS获取Url参数
最近为App做活动专区,其中很多活动都是采用html 5页面来制作的.一方面体量较小,制作快速,更新维护容易:另一方面,嵌入App后适配效果也不会很差. 这里我们采用混编形式来从native app传 ...