l'ACE 8250 et ses grands frères

Remonter

Programmation de l'ACE 8250 et ses grands frères :

8250A, 16450 , 16550, 16550A et 16650

Les 8250, 8250A, 16450 et 16550

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 généralement visible à partir de l'adresse d'Entrées/Sorties 0x3F8 d'un PC.

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

Les 8250,8250A, 16450 comportent 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;

Le 8250A et le 16450 sont des versions plus évoluées (débit, temps d'accès, consommation) mais totalement compatibles d'un point de vue logiciel (nombre et rôle des registres identiques) avec le 8250.

Adresse des registres, mode d'accès (8250, 16450, 16550) :

adresse Nom et désignation du registre état DLAB mode d'accès
Base+0 RBR Registre de réception de donnée

0

Lecture

Base+0 THR Registre d'émission de donnée

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 bit d'indirection (DLAB)
1: accès aux registres de division;
0 : accès aux registres RBR, THR, IER.

retour

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

retour

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))

vitesse (bauds) 300 1200 2400 4800 9600 19200 115200
BSRM              
BSRL              

retour

Le Registre d'Autorisation d'Interruption IER:

Lorsque le bit est à 0, il n'y aura pas de signal d'interruption émis par le boîtier 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 caractè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).

retour

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 une donnée est disponible dans le registre de réception ;
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
La réception d'un caractère dans RBR (bit 0 passe à 1) provoque une interruption si elle est autorisée (IER0 à 1).

Lorsque le registre d'émission est vide (bit 5 passe à 1), cela provoque une interruption si elle est autorisée (IER1 à 1).

L'arrivée d'une erreur (correspondant aux bits 1 à 4 à l'état 1) provoque une interruption si elle est autorisée (IER2 à 1).
retour

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.

Le passage à 1 des bits 0 à 3 provoquent une interruption si elle est autorisée (IER3=1).
retour

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 :

IIR2

IIR1

source d'interruption de plus haute priorité Arrêt de la source d'interruption

1

1

statut ligne (erreur de trame, de parité ou break) lecture LSR

1

0

donnée arrivée dans RBR et prête à lire ou seuil atteint dans FIFO RBR lecture RBR ou modification dans FIFO

0

1

registre THR vide lecture IIR ou écriture dans THR

0

0

statut modem (un des événements CTS, DSR, RI ou DCD arrivé) lecture MSR

retour


Le 16550A (retour)

Il est totalement compatible avec les modèles précédents. Il comporte, en plus, une FIFO de 16 (octets +3 bits de contrôle) en émission(THR) et réception(RBR).

Adresse des registres, mode d'accès (16550A):

adresse Nom et désignation du registre état DLAB mode d'accès
Base+0 RBR Registre de réception de donnée

0

Lecture

Base+0 THR Registre d'émission de donnée

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+2 FCR Registre de Contrôle de la FIFO

0

Ecriture

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 FCR est ajouté et les registres IIR et LSR sont étendus.

Le Registre de contrôle de la FIFO FCR :

Il sert à identifier la source interne d'interruption :

FCR0 activation de la FIFO :
0 FIFO hors service (mode compatible 8250)
1 FIFO en service en émission et réception.
FCR1 vidage de la FIFO de réception par une mise à 1. Le bit repasse à 0 de lui même après exécution de l'ordre de vidage.
FCR2 vidage de la FIFO d'émission par une mise à 1. Le bit repasse à 0 de lui même après exécution de l'ordre de vidage.
FCR3 gestion DMA du transfert des octets reçus
si FCR0=1 mode 0 (bit à 0) : transfert octet par octet mode 1 (bit à 1) : transfert paquet par paquet (lié à FCR6/FCR7)
si FCR0=0, ce bit est ignoré (mode 0 seul possible)
FCR4 et FCR5 inutilisés
FCR6 et FCR7 choix du seuil pour le déclanchement de l'interruption "tampon plein" en réception :
FCR7 FCR6 nombre de caractères dans la file de réception

0

0

01

0

1

04

1

0

08

1

1

14

retour

Le Registre d'Identification des Interruptions IIR:

Il sert à identifier la source interne d'interruption :

IIR0 interruption en attente :
0 une interruption du 8250 en attente
1 pas d'interruption en attente;
IIR3, IIR2 et IIR1 indiquent la source d'interruption de plus haute priorité en attente :

IIR3

IIR2

IIR1

source d'interruption de plus haute priorité Arrêt de la source d'interruption

0

1

1

statut ligne (erreur de trame, de parité ou break) lecture LSR

0

1

0

donnée arrivée dans RBR et prête à lire ou seuil atteint dans FIFO RBR lecture RBR ou modification dans FIFO

1

1

0

un caractère au moins est disponible dans RBR et aucun caractère n'a été lu depuis 4 fois le temps nécessaire à la transmission d'un caractère (dépassement de temps) lecture RBR

0

0

1

registre THR vide lecture IIR ou écriture dans THR

0

0

0

statut modem (un des événements CTS, DSR, RI ou DCD arrivé) lecture MSR
IIR4 et IIR5 sont toujours à 0.
IIR6 et IIR7 sont à 1 si FCR0=1, à 0 sinon.

retour

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 une donnée est disponible dans le registre de réception ;
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 à 1 si erreur dans la file (RBR).

retour


Le 16650 (retour)

Il comporte une FIFO de 32 (octets +3 bits de contrôle) en émission(THR) et réception(RBR).

Le décodage d'adresse correspondant à COM1 à COM4 est intégré.

Un générateur de vitesse de transmission est intégré (MCR + BSR)

Il offre la possibilité de mettre en œuvre automatiquement un contrôle de flot logiciel ou matériel.

Les registres EFR et Xon-1, Xon-2, Xoff-1 et X-off2 sont ajoutés.

Les registres MCR, IER, IIR et FCR sont modifiés.

Adresse des registres, mode d'accès (16650):

adresse Nom et désignation du registre état DLAB mode d'accès
Base+0 RBR Registre de réception de donnée

0

Lecture

Base+0 THR Registre d'émission de donnée

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+2 FCR Registre de Contrôle de la FIFO

0

Ecriture

Base+2 EFR Ehanced Feature Register

1

L/E

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

Base+4 Xon-1 Word

0

L/E

Base+5 Xon-2 Word

0

L/E

Base+6 Xoff-1 Word

0

L/E

Base+7 Xoff-2 Word

0

L/E

(DLAB désigne le bit 7 de LCR)

Le Registre de Fonctions Avancées (Ehanced Feature Register) EFR :

EFR0-EFR3 : permettent de sélectionner le mode de contrôle de flot logiciel ou matériel ou de ne pas l'autoriser.
EFR4 : interdit(0) ou autorise la génération d'interruptions du mode avancé (IER4-7)
EFR5 : demande(1) le contrôle en réception du caractère Xoff-2 avant le dépôt dans RBR. IIR4 est éventuellement affecté.
EFR6 :
si 1 , provoque la mise à l'état haut de RTS quand le seuil de réception dans la FIFO RBR est atteint. ;
si 0 mode 8250 standard.
EFR7 : si 1 , la transmission est reprise lorsque CTS est à l'état bas; si 0 mode 8250 standard.

retour

Le Registre d'Autorisation d'Interruption IER :

Lorsque le bit est à 0, il n'y aura pas de signal d'interruption émis par le boîtier 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 caractère)
IER2 interruption autorisée sur changement du statut de ligne
IER3 interruption autorisée sur changement du statut de modem
IER4 mode veille si à 0
IER5 si =1 : provoque une interruption à réception de Xoff
IER6 si =1 : provoque une interruption à la transition 0 1 de RTS.
IER7 si =1 : provoque une interruption à la transition 0 1 de CTS.

retour

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 : sortie d'interruption type three state si 0, collecteur ouvert si 1.
MCR6 : à 0 : entrées/sorties standard, à 1 : entrées/sorties de type infrarouge.
MCR7 : contrôle de la vitesse de transfert
à 0 : fonctionnement compatible 8250 (horloge à 1.8432 Mhz, débit de 50 à 115200 bits/s) ;
à 1 : l'horloge est pré divisée par 4. (utiliser une horloge à 7.372 MHz, débit de 200 à 460800 bits/s).

retour

Le Registre de contrôle de la FIFO FCR :

Il sert à identifier la source interne d'interruption :

FCR0 activation de la FIFO :
0 FIFO hors service (mode compatible 8250)
1 FIFO en service en émission et réception.
FCR1 vidage de la FIFO de réception par une mise à 1. Le bit repasse à 0 de lui même après exécution de l'ordre de vidage.
FCR2 vidage de la FIFO d'émission par une mise à 1. Le bit repasse à 0 de lui même après exécution de l'ordre de vidage.
FCR3 gestion DMA du transfert des octets reçus
si FCR0=1
mode 0 (bit à 0) : transfert octet par octet
mode 1 (bit à 1) : transfert paquet par paquet (lié à FCR6/FCR7)
si FCR0=0, ce bit est ignoré (mode 0 seul possible)
FCR4 et FCR5 choix du seuil pour le déclanchement de l'interruption "tampon vide" en émission :
FCR5 FCR4 nombre de caractères dans la file de réception

0

0

16

0

1

08

1

0

24

1

1

30

FCR6 et FCR7 choix du seuil pour le déclanchement de l'interruption "tampon plein" en réception :
FCR7 FCR6 nombre de caractères dans la file de réception

0

0

08

0

1

16

1

0

24

1

1

28

retour

Le Registre d'Identification des Interruptions IIR:

Il sert à identifier la source interne d'interruption :

IIR0 interruption en attente :
0 une interruption du 8250 en attente
1 pas d'interruption en attente;
IIR1 à IIR5 indiquent la source d'interruption de plus haute priorité en attente.
IIR6 et IIR7 sont inutilisés ; ils sont à l'état 0 en mode 16450 et à 1 en mode 16650.

Niveau de priorité

IIR5

IIR4

IIR3

IIR2

IIR1

source d'interruption de plus haute priorité Arrêt de la source d'interrruption

1

   

0

1

1

statut ligne (erreur de trame, de parité ou break) lecture LSR

2

   

0

1

0

donnée arrivée dans RBR et prête à lire ou seuil atteint dans FIFO RBR lecture RBR ou modification dans FIFO

3

   

1

1

0

un caractère au moins est disponible dans RBR et aucun caractère n'a été lu depuis 4 fois le temps nécessaire à la transmission d'un caractère (dépassement de temps) lecture RBR

4

   

0

0

1

registre THR vide lecture IIR ou écriture dans THR
     

0

0

0

statut modem (un des événements CTS, DSR, RI ou DCD arrivé) lecture MSR

retour

Christian Rellier rellier@cnam.fr      Association EVARISTE    dernière mise à jour : 28/11/99