130 likes | 264 Views
Gestione della tastiera. Interfaccia tra PC e tastiera. Keyboard Interface. Keyboard. Y-decoder. Micro controllore. Keyboard chip. Cavo della tastiera. Scan Matrix. X-decoder. Scan Matrix.
E N D
Interfaccia tra PC e tastiera Keyboard Interface Keyboard Y-decoder Micro controllore Keyboard chip Cavo della tastiera Scan Matrix X-decoder
Scan Matrix • La tastiera è organizzata elettricamente come una matrice di linee che si incrociano. Ad ogni incrocio è posizionato un interruttore, su cui è localizzato un tasto. La pressione di un tasto chiude un interruttore. • Le linee della matrice sono collegate ad un chip che riconosce il tasto premuto.
Microcontrollore • Il chip trasmette il codice relativo al tasto premuto su un cavo seriale collegato al PC. • Tale informazione è ricevuta da un microcontrollore (8042 per i primi PC/AT, 8741 o 8742 per i più recenti PC).
Scan Code • Ad ogni tasto è associato un codice che lo identifica (scan code). Tale codice è codificato su 8 bit. • Il chip sulla tastiera trasmette al microcontrollore 2 tipologie di codici • make code, in corrispondenza della pressione di un tasto • break code, in corrispondenza del rilascio del tasto. • Per ogni tasto • il codice di make corrisponde allo scan code • il codice di break corrisponde allo scan code + 128 (bit 7 pari a 1).
Controllore della tastiera • Per la programmazione e la lettura della tastiera è possibile accedere al microcontrollore come se fosse un normale dispositivo periferico.
Porte • Indirizzo 60h receiver buffer e transmitter buffer • indirizzo 64h control register (write-only) e status register (read-only). • La funzione del registro dipende dal tipo di istruzione che svolge il processore • lettura all’indirizzo 60h receiver buffer • lettura all’indirizzo 64h status register • scrittura all’indirizzo 60h transmitter buffer • scrittura all’indirizzo 64h control register
Status Register • Leggendo all’indirizzo 64h è possibile leggere lo stato del controllore della tastiera. • I bit del registro di stato hanno il seguente significato • bit 7 1 = l’ultimo byte ricevuto con errore di parità • bit 6 1 = la tastiera non risponde (time-out) • bit 5 utilizzato dal mouse • bit 4 1 = tastiera disponibile, 0 = tastiera bloccata • bit 3 1 = ultimo byte scritto dalla CPU è un comando al control register, 0 = ultimo byte scritto dalla CPU è un dato per il trasmitter buffer • bit 2 1 = self-test della tastiera non presenta errore • bit 1 1 = transmitter buffer register full • bit 0 1 = receiver buffer full
Receiver buffer full • Se il bit 0 del registro di stato vale 1, un byte di dato è disponibile sul receiver buffer. • Quando la CPU legge il receiver buffer, il bit 0 del registro di stato viene azzerato automaticamente.
Control Register • Scrivendo all’indirizzo 64h è possibile inviare un comando alla tastiera. • I codice di alcuni comandi sono i seguenti • AAh self-test il controllore della tastiera esegue un test della tastiera e scrive 55h nel receiver buffer se non è stato rilevato nessun errore • ADh tastiera è disabilitata • AEh tastiera è abilitata
Esempio • Lettura di un codice nel receiver buffer • rbr equ 60h • str equ 64h • tast proc • test_fi in al, str • test al, 01h • jz test_fi • in al, rbr • ret • tast endp
Scan Code in tastiera USA • ESC 01h - _ 0Ch I 17h G 22h X 2Dh • 1 ! 02h =+ 0Dh O 18h H 23h C 2Eh • 2 @ 03h BKSP 0Eh P 19h J 24h V 2Fh • 3 # 04h TAB 0Fh [ 1Ah K 25h B 30h • 4 $ 05h Q 10h ] 1Bh L 26h N 31h • 5 % 06h W 11h enter 1Ch ; : 27h M 32h • 6 ^ 07h E 12h CTRL 1Dh , @ 28h , < 33h • 7 & 08h R 13h A 1Eh ‘ 29h . > 34h • 8 * 09h T 14h S 1Fh shift 2Ah / ? 35h • 9 ( 0Ah Y 15h D 20h \ 2Bh shift 36h • 0) 0Bh U 16h F 21h Z 2Ch print 37h
Scan Code in tastiera USA • alt 38h F9 43h + 4Eh • blank 39h F10 44h END 4Fh • caps-lock 3Ah NUM-Lock 45h cursor do 50h • F1 3Bh Scroll 46h page do 51h • F2 3Ch Home 47h ins 52h • F3 3Dh Cursor up 48h del 53h • F4 3Eh Page up 49h F11 57h • F5 3Fh - 4Ah F12 58h • F6 40h cursor le 4Bh • F7 41h 5 4Ch • F8 42h cursor ri 4Dh