3

解决

经过一番困惑和挫折,我终于让我的硬盘中断了。:D 这基本上归结为我一直在读取状态寄存器而不是备用状态寄存器。其他一些事情在启动时搞砸了,但关键是我的硬盘驱动程序终于开始成形了。现在,对于其他人,我将离开原来的帖子。

PS为了进一步澄清,我不需要发出任何类型的重置命令。我所做的只是:

  1. 选择设备(不想杀死另一个磁盘上的 Solaris OS)
  2. 清除设备控制寄存器中的 nIEN 位
  3. 发出识别设备命令***

实际上,我不确定是否需要 IDENTIFY DEVICE 命令,因为在没有发出命令的情况下测试代码之前,我很高兴离开了实验室。然而,重点是我需要确保读取备用状态寄存器并清除 nIEN 位而不需要复位。BIOS 显然可以处理大多数事情。


我目前正在尝试为我学校正在开发的爱好操作系统编写磁盘驱动程序。我目前有例程来读取/写入 PCI 配置空间中的数据,还有汇编例程来使用 ATA/ATAPI-7 定义的各种寄存器进行端口 IO。现在,我的问题是,具体来说,我将如何让 IDE 硬盘开始产生中断?我一直在查看所有这些文档,但我并不清楚我做错了什么。

有人可以准确解释导致 IDE 硬盘驱动器开始产生中断的原因吗?我已经准备好测试中断服务例程,但是一开始就很难获得中断。这可以通过 ATA SOFT RESET 完成吗?

谢谢!

更新:好的,通过设置设备控制寄存器中的 SRST 位进行软复位,我能够获得辅助通道,即 ATAPI CDROM 以产生中断。这不适用于主通道上的硬盘。到目前为止我注意到的是,当我为 HDD 设置 SRST 位时,它会设置 BSY 位并保持设置。从那里我不知道该怎么办。

4

2 回答 2

3

该参考资料应该对您有所帮助:Kenos description of programming ATA/ATAPI

启用中断的基本机制是清除 DCR(设备控制寄存器)中的 nIEN:

nIEN:驱动中断允许位。主机驱动中断的使能位。当 nIEN 为 0 或选择驱动器时,主机中断信号 INTRQ 通过三态缓冲器启用主机。当 nIEN 为 1 或未选择驱动器时,主机中断信号 INTRQ 处于高阻抗状态,无论是否存在未决中断。

这个www.ata-atapi.com是一个很好的起点,可以找到比您想知道的更多关于 ATA/PATA/SATA/ATAPI 的信息……请注意,官方 ATA-6/7/etc 规格的价格为 $ $ 来自 T13,尽管您可以从他们那里下载当前的 ATA-8 草案。

链接描述了ATA 设备与规格不同的多种方式中的几种。(我曾经为 Commodore/Amiga 编写 SCSI 和 ATA/ATAPI 驱动程序,早在那个时候,以及对合格驱动器的帮助 - 或者更准确地说,弄清楚驱动器制造商做了什么愚蠢的事情。)

于 2009-05-14T21:06:02.070 回答
1

如果这只是一个爱好操作系统,为什么不使用 BIOS 中断(int 13h)?诚然不如直接磁盘访问快,但对您的硬盘驱动器更安全(在弄乱磁盘 I/O 之前,我已经将读头通过盘子)。

于 2009-05-14T20:37:43.293 回答