免费注册 查看新帖 |

Chinaunix

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

[操作系统] [已解决]请教,X86的第二片8259(slave)不能产生中断 [复制链接]

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-16 12:34 |只看该作者 |倒序浏览
本帖最后由 残剑饮血 于 2012-04-18 21:27 编辑

在X86上面折腾裸机玩,GRUB加载ELF可以正常运行。
定时器中断,串口中断,键盘中断都可以正常工作。
RTOS运行中。。。

后来想弄PCI,结果发现PCI不能产生中断。
开始以为是PCI没有发生中断。

后来检查后怀疑不是PCI这边的问题。
于是想试下闹钟中断(IRQ8),结果也不能产生中断,
到点后,dump出RTC的寄存器发现中断位AF已经置位了,却没有中断发生。

仔细检查8259 master和slave的设置,没有发现问题,也核对过LINUX的代码。完全一样的。

现不知道从哪里查了,求高人指点。

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
2 [报告]
发表于 2012-04-16 12:52 |只看该作者
本帖最后由 残剑饮血 于 2012-04-16 12:53 编辑

刚搜到这个贴子,喜出望外:http://bbs.chinaunix.net/thread-2059200-1-1.html
里面有讲:“而涉及从片中IRQ7-IRQ15高号中断时,除在从片中的屏蔽寄存器中打开相对应的中断,还须打开主片中的IRQ2

我目前的程序确实没有打开IRQ2,于是,打开IRQ2,满以为这样就可以有中断了,但还是没有。

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
3 [报告]
发表于 2012-04-18 08:47 |只看该作者
昨天晚上开始想配置为非级联的,结果配置后第一片也不能中断,估计配置错了。
于是把级联由IRQ2改为其它暂时没用的,这样用于测试slave是否有产生中断并且master的IRQ2是可以收到的。
结果这样配置以后,再让闹钟,确实可以收到IRQ2的中断。
看来确实是哪里出错了。

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
4 [报告]
发表于 2012-04-18 14:00 |只看该作者
  1. finsh>>int_dump()
  2. 8259 MASTER IMR:E8
  3. 8259 MASTER IRR:00
  4. 8259 MASTER ISR:00
  5. 8259 SLAVE  IMR:00
  6. 8259 SLAVE  IRR:01
  7. 8259 SLAVE  ISR:00
复制代码
打印了一下寄存器,发现只要主片的IR2设置为级联,就不能响应IR2中断了。
此时从片已经有中断请求 0x01 (IRQ,但主片的IRR还是为0。

如果主片的IRQ2设置为不级联,则是可以响应IR2的。

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
5 [报告]
发表于 2012-04-18 14:02 |只看该作者
另外做了测试,设置主片的IR2为不级联,并在IMR屏蔽IR2。
此时从片有中断过来。主片的IRR[2]是有置位的。
  1. finsh>>int_dump()
  2. 8259 MASTER IMR:ED
  3. 8259 MASTER IRR:04
  4. 8259 MASTER ISR:00
  5. 8259 SLAVE  IMR:00
  6. 8259 SLAVE  IRR:01
  7. 8259 SLAVE  ISR:00
复制代码

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
6 [报告]
发表于 2012-04-18 14:05 |只看该作者
现在倒是想到一个办法,就是设置为不级联。
当主片收到IR2后,由程序去查从片的IRR。

但问题依然没解决。

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
7 [报告]
发表于 2012-04-18 16:34 |只看该作者
问题已解决:
配置8259时,slave的ICW2本应该是

  1.     /* ICW2: 8259A-2 IR0-7 mapped to IRQ8_VECTOR */
  2.     outb(PIC_SLAVE_IMR, IRQ_OFFSET + 8);
复制代码
错写成了

  1.     /* ICW2: 8259A-2 IR0-7 mapped to IRQ8_VECTOR */
  2.     outb(PIC_SLAVE_CMD, IRQ_OFFSET + 8);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP