ARM9的中断控制器
简要复习一下ARM9中断控制器的控制过程:
1.首先能识别触发的中断(对应中断源必须打开,然后查询当前中断状态寄存器),硬件会操控PC跳到中断向量入口(IRQ_HANDLE,硬件控制的只要是IRQ中断类型就会进入),在中断跳转函数里面保存现场(保存R0等等工作寄存器)--跳到服务函数(里面进行中断源判断和处理)---恢复现场,基本流程是这样。
2.中断的触发:高低电平,上升下降沿等等,具体的设置寄存器实现。
3.中断能否传到CPU?触发以后还要通过许多开关(寄存器设置使能与否)确保到达CPU,这样CPU才能识别(有的中断源是不需要的),有些中断是二级中断,需要开关比较多,注意芯片手册说明
4.
比如我们要触发的是INT_TC这个二级中断信号。好,那么我们要打开的开关是什么呢?在二级中断信号里,INTSUBMSK是二级中断信号的开关,我们要在里面找到INT_TC这个位并设置为1即可。二级中断还得传到一级中控器处理,那么我们先找出INT_TC是属于哪个一级中断信号的,看表里的紫色框起来的是二级属于同一个一级信号的,一级信号处理那个也有个紫色框,INT_ADC就是我们要找到的对应一级信号。而它也有对应的开关,那么就是INTMSK这个控制器。我们把INTMSK里的INT_ADC位设置为1就算成功了。
代码也就是
INTSUBMSK |= ( 0x1 << 9);//因为INT_TC在INTSUBMSK里的第9位,注意从0开始
INTMSK |= (0x1 << 31); //INT_ADC在INTMSK里的第31位。
其他的类似外部中断也是这样操作。只是一级中断的可以直接从一级中控器处理,那么就只设置一级中控器的相应开关即可。也就是说,我们要用到的设备接口,我们就把相应的开关打开就可以了,其他的让ARM来处理就可以了。
5.EIN4_7属于一级中断源,但是该中断源包含EIN4\EIN5\EIN6\EIN7四个子中断源。
SRCPND源挂起寄存器。
该寄存器在中断源发出请求时候,处理器就会自动置位该寄存器的相应的位为1.
注意:根据三星文档知道,该位不受寄存器影响,这个寄存器是屏蔽寄存器。在则在执行服务程序时候,该位不许进行清除,否则会导致连续中断。清除方法是往该位写入1。
INTMOD中断模式寄存器
该寄存器决定中断源为FIQ中断还是IRQ中断。
注意:根据三星文档,INTPND寄存器和INTOFFSET寄存器只对IRQ模式有效
INTMSK中断屏蔽寄存器
决定是否屏蔽某中断源
注意:没有
PRIORITY优先级寄存器
决定中断源优先级。
INTPND中断服务程序标志位
根据文档说,在中断源没被屏蔽,并且在等待中断服务,优先级也是最最高的置1.啥意思,就是该寄存器对应位置1,表示CPU已经响应该对应的中断请求。
注意:和SRCPND一样,在中断服务程序时候要清除该对应位。
INTOFFSET寄存器
该寄存器和INTPND配合使用的。标明INTPND寄存器里对应IRQ中断反映在INTOFFSET寄存器的值
注意:也需要清除位
SUBSRCPND寄存器
该寄存器与.SRCPND寄存器配合使用,在子中断源发出请求时候,处理器就会自动置位该寄存器的相应的位为1.
INTSUBMSK寄存器
该寄存器和INTMSK寄存器一样,只不过是相对于子中断而言而已。
6.借用别人网站的图
其中深黑色的就是编程要用的寄存器,而浅黑色的寄存器时CPU根据我们配置的寄存器产生的标志位寄存器。
7.最后我感觉和51还是比较类似的,设置引脚为外部中断(有的是内部中断),使能,确定优先级,识别到触发,保存现场,处理,恢复现场。嵌入式linux的程序需要和汇编一起组织,目前不是特别熟悉,学习ing~
ARM9的中断控制器的更多相关文章
- arm9的中断
GPIO 习惯了stm32的GPIO,发现高端处理器arm在这方面反而简单了. ARM9控制GPIO只有三种寄存器. GPxCON:配置引脚功能,GPACON用一位控制一个GPIO,分别是0为输出引脚 ...
- Linux中断子系统:级联中断控制器驱动
Linux中断子系统 Linux中断子系统是个很大的话题,如下面的思维导图所示,包含硬件.驱动.中断上半部.中断下半部等等.本文着眼于中断控制器(PIC),特别是级联中断控制器驱动部分,对驱动的设计和 ...
- 关于ck中断控制器
一.中断控制器 中断控制器模块包括 其使能寄存器,状态寄存器等. 中断使能寄存器为32bit,每一个bit 对应一个中断源,具体对应到硬件上线的连接 二.cpu怎样调用到中断 (1). 前置工作 首先 ...
- s3c2440中断控制器操作
一.ARM中断体系结构 arm有7中异常工作模式 用户模式.快中断模式.管理模式.数据访问终止模式.中断模式.系统模式.未定义指令终止模式. 几种模式有什么不同呢, 1.不同的寄存器 2.不同的权限 ...
- 【DSP开发】C6678的中断控制器
分两层,一层是每个core内部的中断控制器,这个叫interrupt controller,简写intc:一层是整个芯片的,属于芯片级的,在每个core的外面,这个叫chip-level interr ...
- 10.1 Nested vectored interrupt controller (NVIC) 嵌套矢量中断控制器
特点 60个可屏蔽中断通道(不包含16个Cortex™-M3的中断线): 16个可编程的优先等级(使用了4位中断优先级): 低延迟的异常和中断处理: 电源管理控制: 系统控制寄存器的实现: 1. 中断 ...
- 【原创】Linux中断子系统(一)-中断控制器及驱动分析
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...
- x86架构中的外部中断结构-Part 1:中断控制器的演化
本文主要讲解了x86体系架构从外部设备接受中断的过程,本文是系列文章的第一部分,试图回答以下问题: 什么是PIC以及它的用途是什么? 什么是APIC以及它的用途是什么?LAPIC和I/O APIC的目 ...
- LPC2478中断控制器以及串口详解
LPC2478的中断系统 LPC2478使用的是ARM PrimeCell向量中断控制器,一共支持32个中断向量,处于AHB空间便于系统快速访问,在中断向量的硬件优先级上还有一层可以用户自己设计的软件 ...
随机推荐
- .NET牛人需要了解的问题[转]
任何一个使用.NET的人 描述线程与进程的区别? 什么是Windows服务,它的生命周期与标准的EXE程序有什么不同 Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗 ...
- 运行DbVisualizer报the java_home environment viariable does not point to a working 32-bit JDK OR JRE错误
报这个错误的根本原因就是DbVisualizer和JDK的版本不一致,那么知道原因,修改起来就方便了,要么修改DbVisualizer的版本,要么修改JDK的版本. 1.JDK7 64位 那么就在Db ...
- [IOS 开发代码]UIImage+Blur 网络图片模糊用法
UIImage-Helpers 网络图片模糊用法 float quality = .00001f; float blurred = .5f; NSURL *url = [NSURL URLW ...
- udev
1.作为devfs的代替者,传统的devfs不能动态分配major和minor且有限,udev能像DHCP动态的分配IP一样去分配major和minor 2.device naming提供命名持久化机 ...
- Yann LeCun, Geoffrey E. Hinton, and Yoshua Bengio
- 端口限制情况下php+xdebug环境配置
PHP程序在开发的时候调试是比较方便的,大体情况下,输出,打log是可以解决几乎所有问题. 但是还不够,有些问题,用打log的形式定位问题是相当痛苦的事情,有些时候测试环境没配好的话,你可能需要做许多 ...
- 制造行业流程管理的“IPO”思维
流程管理是企业从流程角度出发,关注流程是否增值的一套管理体系.从认识流程.到建立流程.到管理流程.再到优化流程,企业管理人员要去除不增值和低价值的流程,减少员工犯错误的机会,建立一套卓越的流程体系. ...
- 使用Quartz.NET进行任务调度管理
1.Quartz.NET 介绍 Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用 ...
- 常见JDBC连接数据库字符串
1.Mysql 驱动类:com.mysql.jdbc.Driver 连接字符串:jdbc:mysql://localhost:3306/dbname 2.Oracle 驱动类:oracle.jdbc. ...
- extern引发的闹剧
最近一个朋友让我帮他解决一个问题,由于源代码不方便贴出来,所以就自己写了个demo把问题重现一次 1.新建一个application,添加一个继承于NSObject的类 本来是随便写的,就将此类命名为 ...