L'interface série le 8250/16550

I ) Introduction :

Malgré sa rapidité la liaison parallèle n'est pas adapter à quelque application  lors  de  la  communication  entre  le  microprocesseur  et  ses périphériques, en effet ce type de liaison a des faiblesses lorsqu'il s'agit de communiquer  avec  un  organe  pour  une  longue  distance,  à  cet  effet  on préfère  utiliser  la  liaison  série  malgré  son  faible  débit  contre  la  liaison parallèle.

La liaison entre l'émetteur et le récepteur en mode série peut être :

La figure suivante montre la différence entre les trois modes :

TX : ligne d'émission. RX : ligne de réception.

Remarque :

La vitesse de transmission est mesurée en bps (bits par seconde), mais aussi  BAUD (nombre des changements du signal par Seconde). Il   existe   2   types   de   Communications Série:  Synchrone   et Asynchrone :

I-1 ) Communications asynchrones

Ici  la  transmission  s'effectue  caractère  par  caractère.

 Un  caractère comprend :

- un bit de départ (START),

- des bits de donnée selon un format variable (5, 6, 7,8 bits),

- un bit de parité (optionnel),

- un ou plusieurs bits d'arrêt (Stop).

La cadence de transmission est fixée par une horloge dont la période donne le temps de transmission de 1 bit.

Au repos, la ligne de transmission est à l'état 1. Le début de transmission est signalé par l'apparition du bit de départ qui est dans  l'état logique 0 (START). Les bits de donnée sont ensuite transmis séquentiellement. Un bit de parité est ajouté éventuellement à la suite des bits de donnée pour vérifier la bonne transmission des données en effet il permet de détecter des erreurs de transmission. La fin de transmission du caractère est signalée par un ou plusieurs bits d'arrêt à  l'état 1 (bits STOP). Le bit de départ permet au récepteur de détecter  l'arrivée  d'un  caractère  et  de  recaler  la  phase  de  l'horloge  de réception afin d'échantillonner correctement les bits suivants (au milieu de chacun des bits). Ainsi, comme les fréquences d'émission et de réception ne sont  pas  strictement  identiques,  il  suffit  de  garantir  une  précision  de quelques pour-cent pour assurer une réception valide. Les vitesses normalisées sont : 50, 75, 110, 150, 300, 600, 1200, 2400,4800, 9600, 19200, 38400 bauds.

I-2 ) Communication synchrone :

Avec  la  communication  synchrone  les  données  sont  transmissent d'une    manière continue. Il est donc nécessaire    d'effectuer    la synchronisation des  caractères  au  début  du  bloc  de  données.  Cette synchronisation peut être interne ou externe :

Remarque 1 :

Dans tous les cas, une horloge cadence la transmission des bits qui ne sont donc émis qu'à des instants déterminés.

Remarque 2 :

Il  existe  deux  circuits  pour  les  Communications  Série:  UART  (Universal Asynchrenous  Receiver-Transmitter,  (les  Ports  COM  d'IBM  PC  utilisent l'UART8050/16550  de NS  )  et  USART (Universal   Synchroneous- Asynchroneous Receiver-Transmitter (Le 8251 de Intel).

II ) L'interface série le 8250/16550 :

II-1 ) Introduction :

Le composant électronique chargé de la gestion des transmissions séries asynchrones dans les PC est appelé UART (Universal Asynchronous Receiver Transmitter).le circuit qui gère cette communication est le 8250 de National Semiconductor ou son équivalent le 16550 dont le brochage est comme suit :

II-2 ) Description des pines :

III ) Les registres du 8250 :

III-1 /Les registres de contrôle de protocole

Ces   registres   permettent   de   construire   un   protocole   sommaire (réglages  des  bits  de  parités  et  de  stop,  sélection  de  la  vitesse  de transmission) :

III-1-1 ) LCR - Line Control Register (registre de contrôle de la ligne)

III- 1- 2 ) DLR - Divisor Latch Register (registre de sélection de la vitesse de transfert)

ce registre est codé sur 16 bits : Pour pouvoir utiliser ce registre on a deux  adresses,  qui  permetent  de  sélectionner  facilement  une  vitesse  de transfert de 50 à 9600 bauds (c'est à dire un maximum de 19200 bps), mais il ne faut pas oublier auparavant de forcer le bit DLAB du registre LCR à l'état 1.

Remarque :

La vitesse n'est pas programmée directement dans l'UART - c'est un circuit comparable à une horloge (baud rate generator) qui se charge de réguler celle-ci.

EXEMPLE : pour régler l'UART à une vitesse de 9600 bauds, il faudra copier 0x0C vers DLR.

III - 2 ) Les registres de contrôle de la ligne

Ils sont au nombre de trois, et permettent de connaître l'état de la ligne ou du modem, et de réinitialiser celui-ci :

III - 2 - 1 ) LSR - Line Status Register (registre d'état de la ligne)

III-2-2 ) MSR - Modem Status Register (registre d'état du modem)

Les valeurs de ce registre correspondent aux broches de l'interface. Les bits 0 à 3 indiquent les variations depuis la dernière lecture du processeur du registre - ils seront forcés à 1 si il y a eu changement. Toutes leurs valeurs sont réinitialisées, s'il y a lieu, à un 0 logique dès que le processeur a achevé une lecture du registre. Les bits 4 à 7 contiennent, quant à eux, l'état actuel de diverses données de la ligne.

III-2-3 ) MCR - Modem Control Register (registre de contrôle du modem)

Les bits OUT1, OUT2, RTS et DTR permettent, en forçant leur valeur, de contrôler  la  valeur  barre  des  signaux  correspondants  (DTR  et  RTS correspondent à des broches de l'interface, OUT1 et OUT2 sont des sorties auxiliaires).

III- 3 ) Les registres de contrôle d'interruptions

On  pourra  par  le  biais  de  ces  registres  déclarer  quels  événements déclencheront  une  interruption.  Une  fois  l'interruption  détectée  dans  le programme, on pourra définir sa cause, et y répondre.

III - 3 - 1 ) IER - Interrupt Enable Register (registre d'autorisations d'interruptions) :

Le bit DLAB du registre LCR (registre de contrôle de ligne) doit être forcé à 0 pour pouvoir accéder à ce registre. Les quatre bits de poids faible (bits 0 à 3) permettent, lorsqu'ils sont forcés à 1, de générer une interruptions lors de l'apparition de l'événement associé - on pourra retrouver la cause de cette interruption dans le registre IIR. La liste ci-dessous définit quels événements associés avec les bits de ce registre :

III-3-2 /  IIR - Interrupt Identification Register (registre de cause d'interruption)

Les  trois  bits  IID  (Interrupt  ID)  permettent  de  connaître  la  cause  de l'interruption, sa priorité, et le moyen de désactiver l'interruption. Le tableau suivant  fournit  la  liste  des  combinaisons  de  ces  trois  bits  et  leur signification :

III-4 ) Les registres de transfert

III-4-1 ) Les registres d'émission

Lorsqu'un caractère doit être transmis, il doit d'abord être transféré dans le registre THR (Transmission Holding Register = registre d'attente de l'émetteur). Il y restera tant que le caractère précédent ne sera pas acquitté par la machine distante. Une fois l'acquittement reçu, le caractère sera transféré dans un autre registre :

TSR  (Transmission  Shift  Register  =  Registre  de  décalage  de  l'émetteur). L'UART se chargera alors de transmettre le caractère bit à bit sur la ligne, et il pourra y insérer, selon les réglages effectués dans LCR (contrôle de ligne), un bit de parité et un nombre fixé de bits de stop. Il est important de noter ces quelques remarques :

·  Ce registre est à écriture seule (il possède la même adresse que RBR, le registre de réception : un ordre de lecture à l'adresse de THR renverra donc le contenu de RBR)

·  Le bit DLAB du registre LCR (contrôle de la ligne) doit être forcé à 0 pour pouvoir effectuer une écriture dans ce registre.

·  Ce registre est sur 8 bits. On pourra y envoyer de 5 à 8 bits, suivant les réglages du registre de contrôle de ligne LCR (bits WLS), sachant que ce sera le bit 0 (poids le plus faible) qui sera le premier transmis.

·  il sera judicieux d'effectuer une lecture de LSR (registre d'état de la ligne) - bits 5 et 6 - pour savoir quand le registre THR devient libre, et quand le caractère présent dans TDR a été transmi totalement sur la ligne .

III-4 - 2 ) Les registres de réception

L'octet reçu sera transféré (sans ses bits de parité et de stop) dans le registre RBR (Receiver Buffer Register = registre de réception). De la même manière qu'avec les registres d'émission, il existe un registre de transit - appelé  RDR  -  par  lequel  le  bit  reçu  passera  en  premier,  avant  d'être débarrassé de ses bits de contrôle.

Remarque :

·  Le registre RBR est à  lecture seule. les registres d'émission THR et de réception RBR possèdent une adresse commune. Ainsi une écriture sur l'adresse de RBR provoquera un remplissage du registre THR, et n'aura aucun effet sur le registre de réception.

·  Le bit DLAB du registre LCR (contrôle de la ligne) doit être forcé à 0 pour pouvoir effectuer une lecture dans ce registre.

·  Ce registre est sur 8 bits : y seront copiés les 5 à 8 bits de données, sans bits de contrôle. Le bit 0, de poids le plus faible, est le premier à avoir été reçu.

·  il sera judicieux d'effectuer une lecture de LSR (registre d'état de la ligne) - bits 0 à 4 - pour détecter les éventuelles erreurs de transmission, ou tout simplement pour savoir si un caractère a été reçu-se reporter à la partie traitant de ce registre.

IV Exemple de programmation du 8250/16550 :

IV-1 ) Programmation directe :

Exemple de programme qui permet de lire un caractère du port COM1 par polling :

LSR EQU 3FDH 
TXRX EQU 3F8H 
RDA EQU 01H 
TBE EQU 20H
DEBUT : IN AL, LSR   ; Lecture de LSR 
TEST AL, RDA ; tester RDA
JZ DEBUT                ; if not RDA
IN AL, TXRX             ; lecture de la donnée 


EXAMPLE 2: Ecriture d'un caractère sur le port  COM1 :

DEBUT :                    
IN AL, LSR   ; Lecture LSR
TEST AL, TBE          ; tester TBE
JZ DEBUT
MOV AL, 'a'        ; caractère à transmettre
OUT TXRX, AL        ; envoie caractère sur le port

IV-2 ) Programmation en utilisant les interruptions BIOS/ DOS :

L'interruption 21H  (DOS):

L'interruption BIOS 14H  :

Exemple de programme Ecriture d'un mot :

COM1 EQU  0
COM2 EQU  1
TBE  EQU  20H 
RDA  EQU  01H 
DEBUT :MOV DX, COM1
MOV AH, 03H 
INT 14H
TEST AH, TBE   ; test la valeur de TBE JZ DEBUT
MOV DX, COM1
MOV AH, 01H
MOV AL, 'a'   ; Ecriture du caractère
INT 14H

Exemple de programme de lecture d'un caractère :

COM1 EQU  0
COM2 EQU  1
TBE  EQU   20H 
RDA  EQU   01H
DEBUT: 
MOV DX, COM1
MOV AH, 03H 
INT 14H
TEST AH, RDA 
JZ DEBUT
MOV DX, COM1
MOV AH, 02H 
INT 14H

interface série microprocesseur 8250 16550 programmation formation cours architecture INTEL

Révisé le :11-11-2017 www.technologuepro.com Facebook Twitter RSS