★ HARDWARE ★ MONTAGES ★ INTERFACE SÉRIE RS232 (MEGAHERTZ) ★ |
INTERFACE SERIE RS232 - Pour AMSTRAD CPC | Carte RS 232 : deux programmes d'application |
L'article qui suit décrit la réalisation, le fonctionnement et la programmation d'une interface série répondant aux normes V24 ou RS232 et connectable sur le bus d'extension des 464-664-6128. Les principales caractéristiques techniques de cette carte sont :
LA LIAISON SERIE Pour transmettre des données à des distances importantes, on adopte le mode de liaison sérielle. Dans ce cas, les différents bits constituant un octet sont transmis les uns à la suite des autres. Pour normaliser ce mode de transmission, un standard à été implanté: la RS232 également appelé V24. La figure 1 schématise un signal sériel. Le mot commence par un bit de départ, se poursuit par huit bits de données au maximum, puis le bit de parité (optionnel) pour la détection des erreurs en cours de transmission et enfin, le ou les bits d'arrêt indiquant la fin du caractère. Il est indispensable de bien définir la chronologie des bits contenus dans l'information. Cette liaison RS232 interconnecte un appareil de type DTE (Data Terminal Equipement = terminal) à un autre de type DCE (Data Communication Equipement = un ordinateur). La communication entre les deux systèmes se fait selon un protocole réglant la manière de traiter le flux de données et garantissant ainsi une transmission synchronisée. Cette norme exige donc la présence de signaux de contrôle et de commande (DTR-DCD-CTS-RTS). PRINCIPE DE FONCTIONNEMENT La figure 2 représente le schéma de principe de la carte. Les circuits ICI à IC4 sont des amplificateurs de signaux "buf-fers" qui augmentent la sortance du microprocesseur. Ils ont tous été choisi de type bidirectionnel pour des raisons de simplification en vue de l'étude du circuit imprimé ; seul IC4 use pleinement de cette propriété par l'intermédiaire du signal d'écriture "WR". Lorsque WR est au niveau bas, le bus de données transite de l'unité centrale vers l'interface et inversement quand WR est haut. La sélection de ce circuit est active pour une adresse d'entrée-sortie égale ou supérieure à FC40, c'est-à-dire pour Y3 de IC6 au niveau bas. Les circuits IC5 à IC7 assurent le rôle de décodage mémoire. Ils doivent activer les circuits IC8 et IC10 pour des adresses précises. Ainsi IC8 sera sélectionné pour les adresses entrée-sortie (E/S) comprises entre FC5C et FC5F, ce qui se traduit par un niveau bas sur la broche 9 de IC7. T1 inverse ce signal puisque l'entrée "CLK" de IC8 est active haut. Le circuit IC10 quant à lui sera actif pour les adresses validées entre FC7C et FC7F, broche 7 de IC7. Rappel : grâce à des signaux de commande spécifiques, le Z80 peut différencier un accès mémoire d'une adresse d'E/S. Toutes les opérations ayant pour référence la mémoire seront validées par le signal MREQ du microprocesseur, alors qu'une adresse d'E/S sera accompagnée de IORQ. Cette différenciation se retrouve au niveau des instructions. IORQ sera actif (niveau bas) pour des instructions du type "OUT" et "IN”, il fait partie intégrale du décodage d'adresse (broche 5 de IC7). IC8 est un registre, son rôle étant de recopier sur ses sorties (Q1 à Q8) les niveaux logiques présents sur les entrées (D0 à D7) à chaque front montant du signal CLK (broche 11). Grâce à ce composant, le réglage des vitesses de transfert appliquées au circuit SI0 sera effectué par programme. Ce circuit remplace une série d'interrupteurs que l'utilisateur devrait positionner à chaque modification des vitesses. L'ensemble R1-C2-T2 permet la remise à zéro du registre à l'initialisation de l'unité centrale "RESET" (broche 16 de IC3). IC9 est un double générateur de signaux d'horloge à fréquence variable. Ils sont présents sur les sorties FR et FT, chacun d'eux déterm ine la fréquence élémentaire du fonctionnement des voies A et B. Le tableau A indique les fréquences disponibles en fonction de l'état des entrées R et T.
Circuit périphérique de la famille Z80, IC10 est spécialisé dans les transmissions séries "USART" (Unit Synchro-nous Asynchronous Receive Transmit). Deux voies distinctes et indépendantes sont disponibles, permettant ainsi la connection de deux appareils répondant aux normes de la RS232 et fonctionnant éventuellement à des vitesses différentes. La complexité de ce circuit demanderait un cours complet de plusieurs pages avant d'être en mesure d'en comprendre son fonctionnement. Les quelques lignes qui suivent permettront néanmoins d'en connaître le minimum pour sa programmation. Chaque canal est adressé par l'intermédiaire de l'entrée B/A :
Le niveau logique du signal C/D détermine si l'octet présent sur le bus de données doit être interprété comme un mot de commande ou de donnée (valeur).
Ainsi, les adresses pour le canal A sont:
Pour le canal B :
La programmation du facteur de division (1-16-32-64) de l'horloge élémentaire présente sur les entrées TXCA-RXCA pour le canal A et TXCB-RXCB pour le canal B règle la vitesse réelle du transfert des données. Exemple : pour TXCA-RXCA égale à 153600 Hz, il faudra programmer un facteur de 16 pour obtenir une vitesse de 9600 bauds. Les différents signaux d'E/S de chaque voie du SIO possèdent des niveaux logiques "TTL" (5V et 0V). Or, afin d'être compatible au standard RS232, l'amplitude de ces signaux doit varier entre +12 et -12V, afin d'assurer une plus grande immunité aux parasites. Le décalage de niveaux est réalisé par les circuits ICI1 et ICI2. Le MAX232 est un double émetteur-récepteur qui satisfait, comme l'indique son nom, aux normes RS232, bien qu'il se contente d'une simple alimentation de 5V pour "driver" les lignes de transmission. Ce circuit comporte trois éléments :
L'intérêt que l'on peut porter au MAX232 se situe bien sûr au niveau de ses convertisseurs de tension. Grâce à ce composant, les alimentations traditionnelles de +12 et -12V ne sont plus nécessaires. En effet, ce circuit intègre deux pompes de charges afin de créer des tensions de sortie compatibles aux normes spécifiées. C3-C4-C5-C6 contribuent au décalage de niveaux ; C7 et C8 filtrent la fréquence parasite (16 Khz) présente sur la broche "V-". T3 convertit en niveaux TTL, l'état du signal d'entrée DCD. Au connecteur A (câblage de type DTE) sont reliés tous les signaux utiles au dialogue propre à une RS232. Le connecteur B (câblage de type DCE) est limité à sa plus simple expression, permettant cependant la connection d'un appareil dialoguant uniquement par les trois signaux : Tx-Rx-DCD ; (imprimante, terminal, télétype...). Le cordon reliant l'interface à l'Amstrad sera de type câble plat au bout duquel, à chaque extrémité, sera serti un connecteur encartable 2x25 points.
DESCRIPTION DES REGISTRES INTERNES DU SIO Z80 Le circuit SIO contient huit registres d'écriture (WRO-WR7) pour le canal B et sept pour le canal A (WRO-WR1 et WR3-WR7). Le registre WR2 comporte le vecteur d'interruption pour les canaux A et B. les registres sont programmés séparément pour positionner chaque canal dans sa configuration spécifique. A l'exception de WR0, la programmation des registres d'écriture nécessite deux octets. Les trois bits du premier octet de WRO (D0-D2) pointent le registre choisi, le second octet est le mot de commande effectif écrit dans le registre pour configurer le SIO. Après pointage d'un registre, le programme est libre soit de le lire pour tester le registre de lecture, soit d'écrire pour initialiser le registre d'écriture, (voir tableau B). Exemple d'initialisation du canal A : (scrutation des E/S par polling) LES REGISTRES DE LECTURE Le SIO contient trois registres de lecture (RRO-RR2) qui peuvent être lus pour obtenir l'information d'état de chaque canal (excepté RR2 du canal B). L'information d'état comporte les conditions d'erreur, le vecteur d'interruption et les signaux standards de communication. Le principe de lecture des registres est analogue à une opération d'écriture (2 octets). Par exécution d'une instruction d'entrée, le contenu du registre de lecture adressée peut être lu par le microprocesseur. (Voir tableau C). PRINCIPE DE PROGRAMMATION ET DE GESTION DE LA CARTE La gestion de la carte réside en trois parties :
L'INITIALISATION DU CIRCUIT SIO. (Voir listing 1)
Un certain nombre d'opérations de programmation doivent être effectuées systématiquement afin d'initialiser et de paramétrer le SIO Z80 avant tout fonctionnement. La séquence d'initialisation minimale est la suivante : Le registre WR0 contiendra :
Le registre WR4 contiendra :
Le registre WR3 contiendra :
Le registre WR5 contiendra :
Le registre WR2 contiendra :
Le registre WR 1 contiendra :
Les registres WR6 et WR7 ne sont pas programmés pour un fonctionnement en mode asynchrone. Remarque : La programmation du SIO pour tous les exemples et programmes suivants sera définie en mode asynchrone et les paramètres de communication seront :
LECTURE D'UN CARACTERE REÇU PAR LE SIO. (Voir listing 2) Remarque : le SIO dispose d'une pile interne (réservoir) incorporée de type FIFO (First In-First Out) de trois octets, ce qui permet la réception de trois caractères avant que ne se pose un problème de surcharge. L'affichage ou le traitement d'un caractère réceptionné pouvant demander un certain temps, il faut bloquer les signaux DTR et RTS à la suite de chaque lecture.
ECRITURE D'UN CARACTERE A EMETTRE PAR LE SIO. Les trois parties principales de gestion du SIO sont maintenant fixées, reste à les implanter dans un programme en vue d'une application spécifique. Nous vous proposerons dans un prochain numéro un programme d'émulation de terminal.
Megahertz (1987-9) |
|
|