Autor Thema: PIC initialisieren  (Gelesen 5098 mal)

Developer30

  • Beiträge: 16
    • Profil anzeigen
Gespeichert
« am: 02. August 2013, 17:40 »
Hallo,

was für Könner wahrscheinlich eine Sache von einer Minute wäre, bringt mich gerade zum grübeln. Ich möchte die beiden PICs initialisieren, damit ich den IRQ1 für Tastaturereignisse benutzen kann. Also habe ich versucht, die Tabelle auf http://www.lowlevel.eu/wiki/Programmable_Interrupt_Controller#Initialisierung in Code umzusetzen:

// master
outb(0x20, 0x10); // Initialisierung einleiten
outb(0x21, 0x04); // IRQ0 soll auf Interrupt 32 sein (4*8)
outb(0x21, 0x04); // Bitmaske

// slave
outb(0xA0, 0x10); // Initialisierung einleiten
outb(0xA1, 0x04); // IRQ0 immernoch auf 32
outb(0xA1, 2);    // Verbindung zum Master

// kein Interrupt maskieren
outb(0x21, 0);
outb(0xA1, 0);

Die Tastatur habe ich folgendermaßen initialisiert:
// Puffer leeren
while (inb(0x64) & 0x1)
inb(0x60);

// Tastatur aktivieren
while((inb(0x64) & 0x2));
outb(0x60, command);

IDT ist auch initialisiert und ich habe eine Funktion für Interrupt 0x21 eingestellt, die über int $0x21 auch aufgerufen wird.
Wenn ich meinen Kernel mit bochs ausführe, dann passiert auf Tastendruck nichts, obwohl ich in meiner IRQ1 Funktion eine Bildschirmausgabe programmiert habe. Über den manuellen Aufruf mit int $0x21 erscheint die Bildschirmausgabe. Meine Vermutung ist jetzt, dass die PIC Controller nicht richtig eingestellt wurden. Kann mir da jemand weiterhelfen?

lg
Developer30


Developer30

  • Beiträge: 16
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 02. August 2013, 17:54 »
Oh. Problem hat sich schon erledigt. Ich hab diese Seite übersehen. Hier: http://www.lowlevel.eu/wiki/PIC_Tutorial findet sich ein gutes Beispiel.
Problem gelöst.

 

Einloggen