ARM裸机程序开发——中断系统
来源:互联网 发布:vb集成开发环境 编辑:程序博客网 时间:2024/06/08 17:13
★中断控制机制
CPU在运行过程中,怎样知道外部设备需要进行一些事件的处理呢?比如在一个按键程序设计中,按下某个按键,蜂鸣器会发出响声。当按下按键的时候,CPU怎样知道按键已经被按下,并且调用相应的蜂鸣器处理函数呢?在这里有两种方式,一种是轮询,另一种是中断。
◇轮询
轮询就是让CPU不同的循环检测有没有按键被按下,如果检测到按键被按下了,就马上执行其他的操作。但是这种方式会降低CPU的效率,因为当CPU在轮询的时候会浪费大量的时间,而这些时间本可以处理很多其他的事情。
◇中断
中断就是当CPU在处理其他事情的时候,按键被按下,然后通过某种方式通知到CPU,CPU会保存并停止目前做的事情,跳转到一个固定的地址,去处理这个按键中断,处理完之后再回过头来处理前面做的事情。中断的好处就解决了轮询方式产生的缺点,可以大大的提高CPU的效率。
★中断处理流程相关寄存器
中断能提高CPU的效率,那么中断从中断源的产生到时间被CPU处理这个过程中,它的流程是怎样的?有哪些寄存器?分别有什么作用?
◇中断源
中断源有外部中断源与内部中断源之分。内部中断源是指在CPU内部产生的中断信号,例如时钟中断源,串口中断等等。外部中断是指在CPU以外,嵌入式系统中的产生的中断信号,例如:各种传感器等等。
◇中断处理流程
▲S3C2440中断处理流程
(本图来源:http://unicornx.github.io/2016/01/23/20160123-s3c2440-interrupt/)
▲按照中断源进行分类,S3C2440中断处理流程如下
(本图来源:http://blog.csdn.net/lnf_2373837248/article/details/50202005)
◇中断相关寄存器
SUBSRCPND标明内部复用子中断(如:INT_RXD0)是否发生。S3c2440有15个内部复用子中断,SUBSRCPND中每一位对应一个内部子中断,当这些子中断发生时,相应的位被置为1。清除子中断只需向SUBSRCPND寄存器中相应位写入1。INTSUBMSK用来屏蔽SUBSRCPND寄存器所标示的子中断。某位被设为1时,相应的子中断被屏蔽。设为0时,表示子中断被允许。EINTPEND标明外部复用子中断(如:EINT23)是否发生。S3c2440有20个外部复用子中断,EINTPEND中每一位对应一个外部子中断,当这些子中断发生时,相应的位被置为1。清除子中断只需向EINTPEND寄存器中相应位写入1。EINTMASK用来屏蔽EINTPEND寄存器所标示的子中断。某位被设为1时,相应的子中断被屏蔽。设为0时,表示子中断被允许。SRCPND标识32路中断信号输入上哪些中断发生了。在IRQ中断服务程序中需要清理;在FIQ中断服务程序中也需要清理。INTMASK屏蔽SRCPND,如果一个中断的屏蔽位为1,在该中断发出请求时挂起位还是会被设置为1,但中断请求都不被受理。INTMOD设置哪些中断请求信号为FIQ,哪些为IRQ,但只有一个中断信号输入可以被设置为FIQ模式。PRIORITY配置IRQ的优先级INTPND标识32路中断信号经过屏蔽过滤和仲裁,最后剩下的FIQ和IRQ。在IRQ中断服务程序中需要清理,但在FIQ中断服务程序中不需要清理INTPND。INTOFFSET用于检测INTPND中具体哪个中断端口上有IRQ中断请求发生,直接读取该寄存器的值就对应中断端口号。有关FIQ的信息不用该寄存器检测。EXTINT0~EXTINT224个外部中断分为三组,用这三个寄存器分别用于配置外部中断的触发方式(高电平,低电平,上升沿,下降沿,上升下降均可)。
寄存器编号 功能描述
★中断处理流程是如何工作的
★关于优先级仲裁◇如果某个中断源A是独立的中断源,如果发生,则直接经过寄存器SRCPND
◇如果某个中断源B含有子中断,如果发生,则会先经过寄存器SUBSRCPND(用来表明子中断是否发生),然后经过寄存器INTSUBMSK(用来屏蔽SUBSRCPND所标示的中断)
◇如果中断源B没有被屏蔽则会经过SRCPND。SRCPND寄存器中的每一位用来标示一个或者一类中断是否已经发生。例如SUBSRCPND寄存器中的子中断INT_RXD0发生了,且没有被INTSUBMSK屏蔽掉则寄存器SRCPND中的INT_UART0位被置1。
◇无论A或者B讲过SRCPND后可能会经过INTMSK寄存器,这个寄存器是用来屏蔽SRCPND所标示的中断。INTMSK某位设置为1时,对应的中断被屏蔽,设置为0时,相应的中断被允许。INTMSK只能屏蔽设为IRQ的中断,不能屏蔽设为FIQ的中断。
◇也有可能会经过INTMOD寄存器。INTMOD寄存器中某位被置1时,它所对应的中断源会被设置为FIQ模式,即此中断发生时,CPU将进入快锁中断模式,这通常用于处理特别紧急的中断。当该位被置位0时,表示IRQ模式
◇当确认的中断为IRQ中断后,就会进行优先级排序。与优先级相关的寄存器是INTPND寄存器。经过优先级仲裁器选出优先级高的中断后,这个中断在INTPND寄存器中的相应位被置1,随后,CPU将进入中断模式处理它。同一时间内,此寄存器只有一位被置1;在ISR中可以根据这个位确定中断类型。清除该中断时,往这个位写入0。
S3C2440支持60种中断,如果其中有几种中断源同时产生中断请求,中断控制器该怎么进行处理呢?
中断控制器采用优先级仲裁比较的方式进行选择,找出优先级最高的中断源。中断控制器将60种中断源分成7组,如下图所示,它类似体育赛事里的比赛方式,所有参赛选手在小组赛PK,选择出小组赛最优秀选手,然后进入决赛阶段和其它小组最优先选择再PK,最后优胜者就是总冠军。其中ARBITER0~ARBITER5为“小组赛”阶段,中断源信号在各自小组里进行优先级仲裁,选择出最高优先级中断信号,每小组选出的中断信号送到ARBITER6,也就是决赛阶段,选择出最高优先级中断信号,交给ARM内核。
- ARM裸机程序开发——中断系统
- ARM裸机程序开发11(中断控制系统)
- ARM裸机程序设计—按键中断程序设计
- ARM裸机程序开发——按键控制LED灯
- linux 裸机开发arm程序
- 2440裸机程序——按键中断
- Tiny6410学习ing—(三)、ARM裸机开发—(4)、系统时钟(汇编语言程序设置)—①
- S5PV210ARM裸机部分—中断系统
- Exynos4412裸机开发——中断处理
- Exynos4412裸机开发——中断处理
- Exynos4412裸机开发——中断处理
- Exynos4412裸机开发——中断处理
- ARM裸机程序开发——ARM运行模式及寄存器
- ARM裸机程序开发——ARM寻址方式及指令集
- ARM裸机程序开发——ADS集成开发环境配置及调试
- Eclipse开发调试ARM裸机程序
- ARM裸机程序开发9(GPIO)
- arm裸机程序开发环境简介
- iOS获取沙盒路径
- IOS内存泄露分析Retain Cycle的解决方法
- 程序员素质思考
- linux 基本命令
- 你应该了解的 一些web缓存相关的概念
- ARM裸机程序开发——中断系统
- Android : Builder模式 详解及学习使用
- jquery获取对象在数组对象中的索引值
- delaycall.js 修改表单延迟自动提交的 jQuery / Zepto 插件
- R语言绘图渐进
- request和response区别
- iOS10适配汇总
- 聚类算法比较
- Java数据库开发学习的几个特点