免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1852 | 回复: 6

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

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

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
发表于 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
发表于 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
发表于 2012-04-18 14:05 |显示全部楼层
现在倒是想到一个办法,就是设置为不级联。
当主片收到IR2后,由程序去查从片的IRR。

但问题依然没解决。

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
发表于 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);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP