You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

真实硬件上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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:49:08