忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12
最近访问板块 发新帖
楼主: mordorwww

[硬件及驱动] 内核 edge中断 在中断被关闭时是如何重新触发的 [复制链接]

论坛徽章:
0
发表于 2018-04-16 16:01 |显示全部楼层
回复 10# mordorwww


In a GIC that does not support interrupt grouping:
• the GICD_CTLR.Enable bit controls the forwarding of interrupts from the Distributor to the CPU interfaces
• the GICC_CTLR.Enable bit controls the signaling of interrupts by the CPU interface to the connected
processor.
For the Distributor:
• When GICD_CTLR.Enable is set to 1, the Distributor forwards the highest priority pending interrupt for each
CPU interface, subject to the prioritization rules.
• When GICD_CTLR.Enable is set to 0:
— the Distributor does not forward pending interrupts to the CPU interfaces
— it is  IMPLEMENTATION DEFINED whether an edge-triggered interrupt signal sets the interrupt to the
pending state.

— reads of GICC_IAR, GICC_AIAR, GICC_HPPIR, or GICC_AHPPIR return a spurious interrupt ID
— software can read or write the Distributor registers
— it is  IMPLEMENTATION DEFINED whether SGIs can be set pending using GICD_SGIR.

看起来如果屏蔽某个edge interrupt的话,来中断的话,实现相关可能不会设置pending状态,那么中断就丢失了。
level interrupt没有这个问题,不管屏蔽没有,都会设置pending


论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
发表于 2018-05-10 15:58 |显示全部楼层
回复 10# mordorwww

好久没劲论坛了。 要弄清楚, 中断是由CPU中断系统 + 中断控制器 + 中断源决定的。 linux在处理中断是关中断(或者我们主动关闭中断)(这里指全局管中断、非中断线)。控制的是CPU中断系统(CPU的 FLAGS寄存器)。
而边沿出发还是电平触发,是由中断控制器决定的。 无论哪种方式, 在CPU没有发出INTA信号给它前, 他一直被寄存在IRR寄存器。
因此, 虽然CPU关中断了, 关中断是, edge已经过去了, 不可能再来了, 但edge发生跳变是, 它已经呆在IRR里了。 一直呆到CPU重新开中断(期间中断控制器的INT信号一直有效), 然后给8259发INTA,响应信号。



中断丢了指: 1) 对应中断线关了(中断控制器的MASK位置位), 无论中断源怎么样, IRR不置位了。  2) 在关中断期间, 中断源已经发生多次了, 例如已经来两edge了, 但IRR是一个标记,而不是一个计数,他只标明曾经来中断了。
怎么处理这种情况: 1)当然要处理中断的快一点  2)不要假定中断不丢, 中断处理程序在被调用是, 必须以中断源的状态标记为准, 保证要取的内容都以读完, 例如FIFO读空。


有点懒, 不想翻ACPI的文档, 给你8086年代的。
http://www.uobabylon.edu.iq/eprints/publication_12_20160_1426.pdf  (Lecture8: 8086 interrupt )
https://pdos.csail.mit.edu/6.828/2010/readings/hardware/8259A.pdf
https://en.wikipedia.org/wiki/Interrupt_flag

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
发表于 2018-05-15 23:53 来自手机 |显示全部楼层
关闭edge中断的时机,很特殊。

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
发表于 2018-05-15 23:54 来自手机 |显示全部楼层
你disable边缘中断,内核不会马上disable的,它只是打个标记而已。。

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
发表于 2018-05-15 23:57 来自手机 |显示全部楼层
你disable边缘中断,内核不会马上disable的,它只是打个标记而已。等到下个中断来了,记住了在disable期间,有新的中断到达,才会真的disable。。

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
发表于 2018-05-15 23:57 来自手机 |显示全部楼层
你disable边缘中断,内核不会马上disable的,它只是打个标记而已。等到下个中断来了,记住了在disable期间,有新的中断到达,才会真的disable。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP