免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1472 | 回复: 3
打印 上一主题 下一主题

8250A应答 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-11 06:38 |只看该作者 |倒序浏览
函数里有一句

irq_desc[irq].handler->ack(irq);

也就是mask_and_ack_8259A() 函数,每次进入__do_irq()函数后都会调用该语句向8259A确认中断的收到,同时屏蔽该级中断。我不太明白的是,在中断发生后,8259A本身实际上已经屏蔽了同级或更低级别的中断,所以我认为这里只要应答就可以了,而没有必要显式屏蔽中断了。当然,内核作者有更成熟的考虑,但有一个能够说得通的解释也会帮助我理解内核代码。

论坛徽章:
0
2 [报告]
发表于 2010-08-11 17:27 |只看该作者
咋每人回复呢?

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
3 [报告]
发表于 2010-08-13 17:42 |只看该作者
本帖最后由 smalloc 于 2010-08-13 19:03 编辑

这篇精华贴讲的很详细 或许有帮助
http://linux.chinaunix.net/bbs/viewthread.php?tid=996409

我的猜想是
第8页中讲的CPU2次通过INTA给8259A发信号并不是软件可控制的,这全是硬件完成的
所以上面函数中的ACK仅仅是指CPU写EOI
在写EOI前,
"8259A本身实际上已经屏蔽了同级或更低级别的中断"
但是一但写EOI则这个屏蔽是失效的.
但是写了EOI并不表示处理器的中断程序结束.还有读写IO的操作没完成.处理器也没通过iret返回
那其实没有iret前CPU的eflag的中断位是禁止中断的.在写了EIO后也不能处理新的中断
为什么有急于使一个新中断可通过PIC到达CPU而不处理呢?
原因我想可能是为了让可丢失的边缘中断有更大机会保持.
其原则就是尽量让中断过早的透过PIC.到达处理器,即使你现在也不想处理它.

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
4 [报告]
发表于 2010-08-16 01:45 |只看该作者
本帖最后由 smalloc 于 2010-08-16 02:27 编辑

8259A上面的一段话:
当在2次INTA之间发生一个高优先级别的中断,则在第2次INTA时非使能INTR线.然后过一个不确定时间重新使能INTR线,这个不确定时间估计就是等待EOI结束.
整个过程看来就是仅仅是高优先级别的中断请求能被预先准备好而已.这个和屏蔽低优先级别的中断没什么关系.

而从处理器是内核角度看.执行的写EOI后内核的中断函数并没有执行完,
只要EFLAG的位不屏蔽.就能发生中断嵌套执行

从PIC硬件的的角度再说下边缘触发和水平触发的区别.

首先.PIC的 IRR寄存器才是真正存储中断请求的地方,而不是几个中断线管脚
也就是在一个PIC中断处理结束(即写EOI完成)后或空闲时间,PIC发现IRR有位置1就开始向处理器发请求
边缘模式和水平模式的区别是:
触发器不同而已
边缘模式是中断线上升边缘导致IRR相应位变成1
而水平模式是在一个时钟边缘如果中断线高电平则置相应IRR位为1
那么可以知道水平触发方式在写EOI后因为外设中断线仍然为高.这个时候会继续触发同一个中断.
所以先在写EOI前将本中断屏蔽掉.smalloc 发表于 2010-08-16 02:26
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP