如何配置ATA硬盘以开始生成中断?

时间:2009-05-13 15:31:10

标签: operating-system x86 device-driver

分辨

经过多次困惑和挫折之后,我终于让我的硬盘中断了。 :D它基本上归结为我一直在读状态寄存器而不是 alternate 状态寄存器。其他一些东西搞砸了,但重点是我的硬盘驱动器终于开始成型。现在,对于其他人,我将离开原来的帖子。

P.S。为了进一步说明,我不需要发出任何类型的重置命令。我所做的就是以下内容:

  1. 选择设备(不想杀死其他磁盘上的Solaris OS)
  2. 清除DEVICE CONTROL寄存器中的nIEN位
  3. 发出IDENTIFY DEVICE命令***
  4. 实际上,我不确定是否需要IDENTIFY DEVICE命令,因为在没有发出命令的情况下测试代码之前我离开了实验室。但是,重点是我需要确保读取备用状态寄存器并清除nIEN位而无需复位。 BIOS显然需要处理大部分内容。


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

    有人能解释究竟是什么原因导致IDE硬盘开始产生中断吗?我已经有一个准备测试的中断服务程序,但是我很难在第一时间获得中断。这可以通过ATA SOFT RESET完成吗?

    谢谢!

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

2 个答案:

答案 0 :(得分: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的当前草稿。

link描述了ATA设备与规格不同的一些许多方式。 (我曾经为Commodore / Amiga编写SCSI和ATA / ATAPI驱动程序,回过头来,以及对符合条件的驱动器的帮助 - 或者更准确地说,找出驱动器制造商所做的事情。)

答案 1 :(得分:1)

如果这只是一个爱好操作系统,为什么不使用BIOS中断(int 13h)?不可否认,它不如直接磁盘访问速度快,但对于硬盘驱动器来说更安全(我在读取磁盘I / O之前已将读取头放在盘子中)。