Souris et clavier PS2
Introduction
Le protocole PS2 est à peu prés le même pour la souris et le clavier PS2. Il s’agit d’un protocole série assez comparable avec celui d’une liaison série RS232 sinon que celui-ci est de type synchrone puisqu’on dispose phyquement de deux connexions bidirectionnelles, « data » et clock ». C’est toujours le périphérique qui fournit l’horloge de synchronisation du transfert des données et si les liaisons sont bidirectionnelles, c’est pour permettre au dispositif central d’être « maitre » et de pouvoir reprendre la main à tout moment.
On trouvera des explications plus détaillées dans ce premier Document (pdf 176k)
Interface de bas niveau souris PS2
Le but est d’assurer l’initialisation de la souris et d’assurer le transfert en boucle de chaque trame produite dès qu’un évènement ( clic ou mouvement) déclenche le flux. On a choisi dans un premier temps de créer des sorties explicites sur 10 bits signés pour les données et sur un bit pour les sorties de type évènementiel.
ENTITY pilote_souris IS
PORT (
horloge_24MHz : IN std_ulogic; — horloge systeme
initialiser : IN std_ulogic; — reset general du circuit
donnee_souris : INOUT std_logic; — bidirectionnel
horloge_souris : INOUT std_logic; — la souris fournie l’horloge
bouton_gauche : OUT std_ulogic; — indique un appui
bouton_milieu : OUT std_ulogic; — indique un appui
bouton_droit : OUT std_ulogic; — indique un appui
position_h : OUT signed(9 DOWNTO 0); — excursion -512 à +511
position_v : OUT signed(9 DOWNTO 0)); — -512 +511
END pilote_souris;
La description complète se trouve dans le fichier pilote_souris.vhd
Périphériques PS2 pour processeur NIOS
Si l’on veut associer une souris ou un clavier à un processeur, il faut en plus des taches de bas niveau (le protocole) adapter au bus le périphérique. En particulier, un signal d’interruption sera émis chaque fois qu’un évènement apparait. Des registres (état, commandes, données) doivent être créés pour gérer l’interruption, pour initialiser le périphérique, pour lire/écrire des données.
Ce travail a été réalisé et testé dans un environnement NIOS d’Altera. Les signaux coté bus doivent être modifiés si l’on veut créer un périphérique identique avec microblaze de xilinx ou avec d’autres processeurs;
Souris
Le fichier souris_ps2.vhd contient outre l’interface PS2 proprement dite, la description des 4 registres (registre d’état , de déplacement horizontal , de déplacement vertical, de commande) avec leur adressage interne, ainsi que la demande d’interruption programmable.
Le fonctionnement est basée sur une machine d’état qui se contente d’assurer la réceptions de chaque trame et de paralelliser les données reçues.
Dans le cas du NIOS II, la liaison entre matériel et logiciel se fera par un fichier tel que mouse_regs.h qui décrit l’adressage des 4 regitres précédents.
Le fichier test_souris.c affiche les données immédiates obtenues par scrutation du registre d’état, tandis que le fichier test2_souris.c fait la même chose après mise en place du procéssus d’interruption.
Clavier
Le clavier est assez semblable à la souris sinon qu’un assez grand nombre de commandes doivent absolument pouvoir être implantées ( alors que la souris a été simplifiée en réception seule). La trame se réduit à un seul octet au lieu de 3.
Le fichier clavier_ps2.vhd est une description de périphérique clavier pour NIOS.
On lui associera comme précédemment un fichier de description des registres : lancelot_keyboard_regs.h
Pour comprendre maintenant les différentes couches logicielles qui vont traiter le clavier, il faut partir du fait qu’un appui sur une touche émet un scan code et qu’un relâchement émet un break code. Donc une succession de 3 octets successifs devront être traité par la première couche logicielle pour déterminer quelle touche a bénéficié d’un appui.
Une référence qui me semble intéréssante sur ce sujet et l’article: http://www.barcodeman.com/altek/mule/scandoc.php
Le fichier kbd_define.h définie les mots de commandes du clavier ps2, tandis que le fichier libkbd.c définie quelques routines de bas niveau.
Le fichier test_clavier.c affiche les données immédiates obtenues par scrutation du registre d’état, tandis que le fichier test2_clavier.c fait la même chose après mise en place du processus d’interruption.
Enfin, dans l’optique de construire un driver pour le système NIOS, le fichier lancelot_keyboard.c donne une description possible de décodage d’un clavier AZERTY. L’ensemble fonctionne sur interruption, les appuis multiples sont traités.
Leave a Reply
You must be logged in to post a comment.