Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: B.G. am 16. April 2005, 23:53

Titel: Help me! Keyboard-Treiber [PM] Grundfunktion schon fertig
Beitrag von: B.G. am 16. April 2005, 23:53
Also, ich programmiere im PM und habe nun nach dem 2. Versuch (Beim ersten [~2,5 Stunden Versuch] hab ich mir letztendlich den Code zerschossen) geschafft meine eigenen IDT anzulegen (direkt aus dem PM herraus) und mit einträgen zu füllen.

Dafür hab ich mir fürs Keyboard das hier gecodet:

void irq_1(void) // Keyboard
{
  printf("Keyboard!");
}

Funktioniert auch im Grunde wunderbar und tut was es soll. Einen Text ausgeben bei Tastendruck. Allerdings nur ein mal. Drücke ich auf eine Taste wird der Code ausgegeben. Lass ich los und drück wieder kommt nichts.

So habe ich zwei Fragen:
1. Was muss ich tun um es beim 2. Mal auch zum Funktionieren zu bringen?
2. Wo bekomm ich letztendlich den Scancode der gedrückten Taste her?
Titel: Help me! Keyboard-Treiber [PM] Grundfunktion schon fertig
Beitrag von: Jidder am 17. April 2005, 09:37
zu 1. du musst ein End-of-Interrupt-Signal an den PIC senden, wenn du mit einem IRQ-handler fertig bist. Einmal 0x20 an Port 0x20 und noch einmal 0x20 an Port 0xA0
zu 2. den keycode bekommst du, wenn du port 0x60 ausliest.
Titel: Help me! Keyboard-Treiber [PM] Grundfunktion schon fertig
Beitrag von: Roshl am 17. April 2005, 10:01
Das ist so nicht ganz 100% richtig^^
Damit das Keyboard weitere Daten schickt, muss das EOI-Signal gesendet werden UND Port 0x60 gelesen werden.
EOI->Damit der PIC die IRQ's weiterleitet (allerdings reicht 0x20 an 0x20, da IRQ am Master anliegt und der Slave nicht wieder aktiviert werden muss, also nix mit 0xA0)
Port 0x60->Damit das Keyboard weitere an den PIC schickt
Titel: Help me! Keyboard-Treiber [PM] Grundfunktion schon fertig
Beitrag von: B.G. am 17. April 2005, 11:33
Jup, danke Jungs.


void irq_1(void) // Keyboard
{
  printf("Keyboard meldet sich!");
  out(0x20,0x20);
  out(0xA0,0x20);
  in(0x60);
}


Funktioniert wunderbar.  :D
Titel: Help me! Keyboard-Treiber [PM] Grundfunktion schon fertig
Beitrag von: Roshl am 17. April 2005, 11:58
das outb(0xA0,0x20); kannste weglassen, Keyboard liegt am Master-PIC und 0xA0 ist der Port für den Slave.