|
Programmation de l'ACE 8250 et ses grands frères :8250A, 16450 , 16550, 16550A et 16650Les 8250, 8250A, 16450 et 16550Le 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) :
(DLAB désigne le bit 7 de LCR) Le Registre de Contrôle de Ligne LCR:
Le Registre de Contrôle de Modem MCR :
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 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).
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.
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). Le Registre d'Etat du Modem MSR :Il rend compte de l'état des lignes de contrôle du modem :
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). Le Registre d'Identification des Interruptions IIR:Il sert à identifier la source interne d'interruption :
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):
(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 :
Le Registre d'Identification des Interruptions IIR:Il sert à identifier la source interne d'interruption :
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.
Le 16650 (retour)
|
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)
![]() | 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 : | ||||
![]() |
| ||||
![]() | EFR7 : si 1 , la transmission est reprise lorsque CTS est à l'état bas; si 0 mode 8250 standard. |
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. |
![]() | 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 | ||||
![]() |
|
Il sert à identifier la source interne d'interruption :
![]() | FCR0 activation de la FIFO : | ||||||||||
![]() |
| ||||||||||
![]() | 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 | ||||||||||
![]() |
| ||||||||||
![]() | 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 |
Il sert à identifier la source interne d'interruption :
![]() | IIR0 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 |
Christian Rellier rellier@cnam.fr Association EVARISTE dernière mise à jour : 28/11/99 |