Programmation du 8250

Remonter
l'ACE 8250 et ses grands frères
ORPHY GTS ] Orphy Portable ] Orphy Portable2 ] Un peu d'histoire ] [ Programmation du 8250 ]

Le 8250 (Asynchronous Communication Element) est un émetteur/récepteur asynchrone universel (UART, Universal Asynchronous Receiver/Transmitter). C'est ce circuit qui a la charge d'assurer la transmission série de données à partir de ou à destination de l 'ordinateur. Depuis l'Unité Centrale d'un IBM-PC, L'ACE est vu comme un ensemble de portes d'Entrées/Sorties associées à des registres internes.

Le 8250 qui gère COM1 est visible à partir de l'adresse d'Entrées/Sorties 0x3F8.

(Pour COM2, l'adresse de base vaut: 0x2F8).

 

Le 8250 comporte 10 registres classés en 3 catégories :

· registres de contrôle : BSRL et BSRM, IER, LCR et MCR;

· registres d'état : LSR, MSR et IIR;

· registres de données : RBR et THR;

 

Adresse des registres, mode d'accès :

adresse Nom et désignation du registre état DLAB
mode d'accés               
Base +0 RBR Registre de réception de données 0 Lecture
Base + 0 THR Registre d'émission de données 0 Ecriture
Base +0 BSRL Registre de division d'horloge (poids faible) 1 L/E
Base +1 BSRM Registre de division d'horloge (poids fort) 1 L/E
Base + 1 IER Registre d'autorisation d'interruption 0 L/E
Base + 2 IIR Registre d'identification d'interruption 0 Lecture
Base + 3 LCR Registre de contrôle de ligne 0 L/E
Base + 4 MCR Registre de contrôle de modem 0 L/E
Base + 5 LSR Registre d'état de la ligne 0 L/E
Base + 6 MSR Registre d'état du modem 0 L/E
Base + 7 SCR "Scratch Register" (inutilisé) 0 L/E
(DLAB désigne le bit 7 de LCR)

 

Le Registre de Contrôle de Ligne LCR:

LCR1 et LCR0 précisent la longueur du caractère :

0 0 : 5 bits
0 1 : 6 bits
1 0 : 7 bits
1 1 : 8 bits

LCR2 indique le nombre de STOP :

0 : 1 bit de STOP
1 : 1,5 bits de STOP si 5 bits de caractères; 2 bits sinon ( 6, 7, 8 caractères)

LCR3 précise si un bit de contrôle de parité sera émis et si le contrôle doit être effectué en réception: 0 pas de contrôle;

LCR4 complète la description du contrôle de parité:

0 : parité impaire (odd )
1 : parité paire (even)

LCR5 blocage de parité: 0 à hors service;
            1 : si LCR3= 1, le bit de parité est forcé à l'état inverse de LCR4

LCR6 contrôle de BREAK: 0 hors service, 1: mise à 0 de la sortie Tx jusqu'à la mise à zéro de LCR6

LCR7 1: accès aux registres de division;
            0: accès aux registres RBR, THR, IER.

 

Le Registre de Contrôle de Modem MCR :

MCR0 Force la ligne DTR dans l'état indiqué

MCR1 Force la ligne RTS " " "

MCR2 Valide (1) ou invalide (0) la sortie OUT1 (à laisser dans l'état antérieur)

MCR3 " " " " " " " OUT2 ( idem )

MCR4 Autotest: les sorties sont rebouclées (en interne) sur les entrées si MCR4=1

MCR5 : 0

MCR6 : 0

MCR7 : 0

 

Les Registres de Division BSRL et BSRM :

Ils permettent de diviser la fréquence d'entrée (déjà prédivisée par 16) par le nombre inscrit dans ces registres. Sur les PC, la fréquence d'horloge est de 1.8432 Mhz.

vitesse de transmission= Fr. Horloge/(16*(BSRM*256+BSRL))

 

Le Registre d'Autorisation d'Interruption IER:

Lorsque le bit est à 0, il n'y aura pas de signal d'interruption émis par le boitier pour l'événement désigné. Lorsque tous les bits sont à 0, cela signifie qu'il n'y aura en aucun cas d'interruption produite par le circuit vers le gestionnaire d'interruption du PC (8259).

IER0 interruption produite à l'arrivée d'un caractère

IER1 interruption produite lorsque THR est vide (fin d'émission d'un carctère)

IER2 interruption autorisée sur changement du statut de ligne

IER3 interruption autorisée sur changement du statut de modem

IER4 à IER7 inutilisés (toujours à zéro).

 

Le Registre d'Etat de Ligne LSR:

Il rend compte de l'état de la transmission;

la lecture de ce registre remet à zéro les bits 0 à 4.

LSR0 à 1 si donnée prète;

LSR1 à 1 si débordement (un caractère nouveau vient d'arriver alors que le précédent n'a pas encore été lu)

LSR2 à 1 si erreur de parité

LSR3 à 1 si erreur de trame (bit de STOP absent)

LSR4 à 1 si erreur de break

LSR5 à 1 si THR est vide; remis à 0 par le chargement de THR;

LSR6 à 1 si THR et TSR(registre interne de décalage) sont vides; remis à 0 par le chargement de THR)

LSR7 toujours à 0

Le bit 0 provoque une interruption si elle est autorisée (IER0 à 1).

Le bit 5 provoque une interruption si elle est autorisée (IER1 à 1).

Les bits 1 à 4 provoquent une interruption si elle est autorisée (IER2 à 1).

 

Le Registre d'Etat du Modem MSR:

Il rend compte de l'état des lignes de contrôle du modem:

MSR0 à 1 si (DeltaCTS) CTS a changé d'état depuis la dernière lecture;

MSR1 à 1 si (DeltaDSR) DSR a changé d'état depuis la dernière lecture;

MSR2 à 1 si la ligne RI est passée de l'état haut à l'état bas depuis la dernière lecture;

MSR3 à 1 si (DeltaDCD) DCD a changé d'état depuis la dernière lecture;

MSR4 contient l'état de CTS;

MSR5 contient l'état de DSR;

MSR6 contient l'état de RI;

MSR7 contient l'état de DCD;

La lecture de MSR remet à zéro les bit 0 à 3.

Les bits 0 à 3 provoquent une interruption si elle est autorisée (IER3 à 1).

 

Le Registre d'Identification des Interruptions IIR:

Il sert à identifier la source interne d'interruption:

IIR0 interruption en attente :

0 interruption du 8250 en attente
1 pas d'interruption en attente;

IIR2 et IIR1 indique la source d'interruption de plus haute priorité en attente:

1 1 statut ligne   
1 0 donnée reçue et prète à lire
0 1 registre THR vide
0 0 statut modem.

 

Christian Rellier rellier@cnam.fr      Association EVARISTE    dernière mise à jour : 20/02/00