Frage

RESOLVED

Nach viel Verwirrung und Frustration, ich meine Festplatte endlich zu unterbrechen. : D Es kam im Grunde bis auf die Tatsache, dass ich das Statusregisters anstelle der alternativen gehalten Lesen Statusregister. Ein paar andere Dinge wurden vermasselt zu booten, aber der Punkt ist mein Festplattentreiber endlich Gestalt anzunehmen beginnt. Nun, für andere, die ich die ursprüngliche Post verlassen.

P. S. Zur weiteren Klärung brauchte ich keine Art von Reset-Befehl zu erteilen. Alles, was ich tat, war die folgende:

  1. Wählen Sie das Gerät (wollte nicht das Betriebssystem Solaris auf der anderen Platte töten)
  2. Deaktivieren Sie den Nien-Bit im DEVICE CONTROL-Register
  3. Ausgabe durch das IDENTIFY Befehl DEVICE ***

Eigentlich bin ich nicht sicher, ob der Befehl DEVICE IDENTIFY müssen, ist, weil ich das Labor glücklich verlassen, bevor ich den Code testen konnte den Befehl ohne Ausgabe. Allerdings ist der wichtigste Punkt, dass ich brauchte, die alternativen Status registriert und hat zu lesen, um sicherzustellen, dass die Nien für einen Reset ohne die Notwendigkeit gelöscht Bit. Das BIOS offenbar kümmert sich um die meisten Sachen.


Ich versuche zur Zeit einen Plattentreiber für ein Hobby zu schreiben OS an meiner Schule entwickelt. Ich habe derzeit Routinen / Schreiben von Daten in dem PCI-Konfigurationsraum zu lesen und Montageroutinen-Port IO mit den verschiedenen Registern von ATA / ATAPI-7 definiert zu tun. Nun meine Frage, und zwar, wie bekomme ich eine IDE-Festplatte zu starten Interrupts zu erzeugen? Ich habe durch all diese Dokumentation suche und habe mich nicht klar worden, was ich falsch mache.

Kann jemand genau erklären, was eine IDE-Festplatte verursacht Unterbrechungen starten Generierung? Ich habe bereits eine Interrupts Service-Routine bereit zu testen, aber habe Schwierigkeiten die Interrupts in erster Linie zu bekommen. Kann dies durch das ATA SOFT RESET erreicht werden?

Danke!

UPDATE: Ok, ich war in der Lage, den Sekundärkanal, ein ATAPI-CD-ROM zu erhalten Unterbrechungen zu erzeugen, indem den SRST-Bit im DEVICE CONTROL-Register für ein Soft-Reset einstellen. Dies gilt nicht auf dem primären Kanal für die Festplatte arbeiten. Was ich bis jetzt aufgefallen ist, dass, wenn ich das SRST-Bit für die HDD gesetzt, den BSY-Bit setzt und verlässt ihn gesetzt. Von dort weiß ich nicht, was zu tun ist.

War es hilfreich?

Lösung

Dieser Hinweis sollte man ein gutes Stück helfen: Kenos Beschreibung der Programmierung ATA / ATAPI .

Der grundlegende Mechanismus Interrupts zu ermöglichen, ist nien in der DCR (Device Control Register) zu löschen:

  

Nien: Antrieb Interrupt Bit aktiviert. Der Aktivieren-Bit für den Antrieb unterbrechen, um den Host. Wenn nien 0 oder der Antrieb das Host-Interrupt-Signal INTRQ ausgewählt wird, um den Host einen Tri-State-Puffer aktiviert durch. Wenn nien 1 oder der Antrieb der Host-Interrupt-Signals INTRQ ist in einem Zustand hoher Impedanz, unabhängig von der Anwesenheit oder Abwesenheit eines anhängigen Interrupts nicht ausgewählt.

Das www.ata-atapi.com ist ein guter Startpunkt Weg zu finden, weitere Informationen über ATA / PATA / SATA / ATAPI, als Sie ... Hinweis wissen wollen, dass die offizielle ATA-6/7 / etc Spezifikationen Kosten $$ von T13, wenn Sie die aktuellen Entwürfe von ATA-8 von ihnen herunterladen.

Das Link rel="nofollow beschreibt ein paar der viele Weisen ATA-Geräte von den Spezifikationen abweichen. (I verwenden SCSI- und ATA / ATAPI-Treiber für Commodore / Amiga zu schreiben, Weg zurück, wenn, sowie Hilfe bei der Qualifikation Laufwerke -. Oder genauer gesagt, herauszufinden, was Plattenhersteller Dummheiten gemacht hatte)

Andere Tipps

, wenn dies nur ein Hobby O, warum nicht das BIOS-Interrupt verwenden (int 13h)? zwar nicht so schnell wie direkter Plattenzugriff, aber sicherer für Ihre Festplatte (Ich habe mit Disk-I / O-Messing einen Lesekopf über einen Teller vor).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top