使用共享中断
来源:互联网 发布:python使用指南 编辑:程序博客网 时间:2024/06/08 14:05
大多数CPU核心有两种中断输入:一种提供给常规中断的;另一种提供给非屏蔽性中断(nonmaskable interrupts,NMIs)的。标准外围设备使用常规中断输入;而NMIs被用来应付危险的中断,这些中断不能被忽略或禁止,如:Watchdog 的超时设定。在多数设计中,NMI并没有被使用。
对于大多数系统来说,仅有一个常规中断是不足以应付那么多的中断资源,比如:计数器、DMAs和通信端口。而使用中断控制器可以使CPU核心和更多的中断资源相联系。
中断控制器允许CPU读取的每一个中断线(interrupt line)的状态,并产生中断,对中断设立优先级。例如:有选择性的避免个别的中断资源打扰CPU。中断控制器可以是独立的外部器件,也可以使运算器芯片的一部分。
中断控制器能处理两种中断方式:电平触发方式和边缘触发方式。电平触发中断:当中断控制器探测到在中断线上有一个触发电平(满足一定电平高度)出现时,它就会请求一次CPU中断。然后,产生中断请求的外围设备就一直占据着中断线,等到CPU有所回应后,才会放开中断线。典型的做法是:由中断服务程序通知外围设备放开中断线。边缘触发中断:又分为两种,在中断线上,由高电平到底电平转换的边缘触发,以及由低电平到高电平转换的边缘触发。能对中断线产生短暂的脉冲波的外部外围设备可以用这种方式。另外,一些兼容电平触发的外围设备也同样可以使用这种方式,它们占据着中断线,只有当软件处理中断后才会放开所占据的中断线。
使用共享中断
当多个中断资源共用一个中断线时,就有麻烦了。当你的中断控制器的输入不够多时,共享中断是很有必要的。在硬件上,只要使用线接或(或者,逻辑或)阵列,就可以达到目的。共享中断比你想象中还要普遍。甚至即使电路设计者没有明确共用一个硬件中断线时,也会有共享中断的。看看典型的外部通用异步收发器(UART):它只有一个中断输出,为不同的内部中断资源所共享,比如:接受中断和发送中断。这些中断在中断控制器内部用“或方式”有效的连接到一块了。
无论你何时共用中断线,必须要考虑的是:当两个或更多的中断信号同时产生或相继产生时,会出现什么样的状况?如果不能很好处理的话,你就有可能丢失中断信号以及锁定中断线。
边缘触发中断的共享
共享边缘触发中断比较复杂。如果两个中断信号同时产生或相继产生,中断控制器就会只收到一个中断信号。要避免丢失中断信号,中断服务程序必须在离开当前命令行外壳之前检查所有中断资源。但还不够:另外,要避免竞争,使得下一个中断信号丢失的竞争,中断控制器就必须等待着中断线的被放开。这种特殊的处理能使边缘触发中断的共享不但效率低下,而且容易产生bug。丢失中断信号的结果可能很严重。如果外围设备依赖CPU来通知它放开它所占据的中断线,而中断控制器又没有收到中断信号的话,那么,这个中断线会被无限期的占据,换句话说,也就不会再有新的中断信号在这条中断线上产生了。
虽然上述情况发生的可能性很小,一旦发生,那就是一场又漫长又失败的调试会议了。因此,你要避免这种中断共享。
电平触发中断的共享
共享中断的最简单方式,就是使用电平触发中断类型。这种方式很安全,因为你是不可能丢失中断信号的。例如,如果两个中断请求同时要求中断服务,你也只能处理其中一个,这时中断线是不会锁住,仍然能有效工作。而另一个中断请求会照常产生,等待你的处理。
- 使用共享中断
- linux中断共享(dev_id的使用)
- linux中断共享(dev_id的使用)
- 共享中断
- 中断共享
- 共享中断
- 共享中断
- 中断共享
- 外部中断,共享中断向量
- 外部中断,共享中断向量
- request_irq中断模型 共享中断
- 中断及共享中断概述
- 在linux内核里有关共享中断的使用
- 对共享中断理解
- 共享中断的理解
- 共享中断 IRQF_SHARED 使用方法
- linux共享中断号
- Linux共享中断号
- Hadoop源代码分析【RPC】
- 半透明渲染新技术摘录
- jjjj
- Dos下获取日期和时间
- 阴影锥原理与展望—真实的游戏效果的实现
- 使用共享中断
- 最小化当前应用程序
- jni获取mac地址的问题  -  棒槌网@Android开发论坛 - Powered by phpwind
- Container
- 源码网站推荐
- Barcode条形码及对图片进行270翻转
- 读文件操作
- 微软控件telerik report中怎样设置分页
- UVa 111 - History Grading