真实硬件上ATA中断持续触发问题求助
真实硬件上ATA中断持续触发问题求助
最近我在折腾ATA相关的代码,碰到个特别头疼的问题:在真实硬件上,ATA控制器用的是IRQ_11,但每次发送完IDENTIFY命令后,这个中断就会一直不停地触发,我只能手动屏蔽IRQ_11才能让驱动继续跑下去。
下面是简化后的复现代码:
mov si, 45056 ;Real hardware port mov dx, si add dx, 6 mov al, 0xA0 out dx, al ;Select drive (master in this test) push 10 ;Give controller a bit more time call wait_milliseconds ;These things should be set to 0 mov dx, si add dx, 3 mov al, 0 out dx, al ;Set to 0 mov dx, si add dx, 4 mov al, 0 out dx, al ;Set to 0 mov dx, si add dx, 5 mov al, 0 out dx, al ;Set to 0 ;Send identify command mov dx, si add dx, 7 mov al, 0xEC out dx, al
我已经排查过这些点,但都没解决问题:
- 确认中断处理程序已经发送了EOI信号
- 确认PIC已经完成重新映射
- 试过在发送命令后读取状态端口,也试过在中断处理程序里读,但都没用
现在完全摸不着头脑,中断一直触发,屏幕上全是我在处理程序里加的提示信息,有没有大佬能帮我看看这是咋回事?
备注:内容来源于stack exchange,提问作者Lprogrammer20
相关产品推荐
相关产品推荐

