Présentation :
L'UART est l'abréviation de Universal Asynchronous Receiver and Transmitter , en francais on peut traduire et simplifier par Liaison Série Asynchrone.
Ce périphérique est plutot bien fournie sur l'ensemble de la famille Atmel 90S, pour preuve le résumé des caractéristiques :
- Générateur interne de fréquence de cadencement
- Echanges de données sur 8 ou 9 bits
- Communication en Full-duplex (peut émettre et recevoir en meme temps)
- Protection des débordements
- Détection de faux départs de transmission
- Filtrage de l'entrée
- Plusieurs interruptions programmables sur le mode émission et réception
L'application principale de ce périphérique réside en la communication entre le microcontroleur et un ordinateur via le port série RS232.
Schématique de l'UART pour la partie transmission :

Schématique de l'UART pour la partie émission :
Les registres :
Ils sont aux nombres de quatre :
UDR : Registre de données de l'interface UART.
En fait ce registre est assez particulier, la gestion est transparente pour l'utilisateur, mais sachez que lors d'une opération d'écriture de données, ce qui lance le processus d'émission, on peut lire aussitot ce registre qui contiendra le tampon de réception.
USR : Registre d'état de l'interface UART.
- RXC : Passe à 1 lorsque le tampon de réception contient une donnée. Ce bit est automatiquement remis à 0 lors de la lecture du tampon correspondant, soit UDR.
- TXC : Passe à 1 lorsque la donnée contenue dans UDR à été transmise. Ce bit est automatiquement remis à 0 lors du traitement de l'interruption correspondante, ou alors il faut écrire un 1 par programme.
- UDRE : Passe à un lorsque la donnée écrite dans UDR est passée en phase d'émission. ce drapeau signale donc le déplacement du contenu de UDR vers le tampon d'émission. Repasse à 0 lors d'une nouvelle écriture de données dans UDR.
- FE : La levée de ce drapeau à lieu lors d'un defaut de reception, en particulier quand le bit de stop n'a pas été réalisé correctement. la remise à 0 de ce bit se fait automatiquement lors de la prochaine reception correcte.
- OR : Ce bit passe à un 1 lors du phénomène suivant : une donnée prècedement recue est disponible dans le registre UDR, cependant une autre donnée arrive dans le tampon de reception alors que UDR n'a toujours pas été lu. On peut donc dire qu'il s'agit d'un drapeau d'avertissement avant la future perte de donnée si rien est fait. La remise à 0 de ce bit est effectué automatiquement lors de la lecture du registre UDR.
UCR : Registre de Controle de l'interface UART.
- RXCE : Valide l'interruption UART_RXC lorsque le bit RXC du registre USR passe à 1.
- TXCIE : Valide l'interruption UART_TXC lorsque le bit TXC du registre USR passe à 1.
- UDRIE : Valide l'interruption UART_DRE lorsque le bit UDRE du registre USR passe à 1.
- RXEN : La mise à 1 de ce bit valide la partie reception de l'UART. La broche PD0 (RXD) est alors basculé en entrée.
- TXEN : La mise à 1 de ce bit valide la partie émission de l'UART. La broche PD1 (TXD) est alors basculé en sortie.
- CHR9 : Séléction du format de réception/émission des données : 1 = 9 bits et 0 = 8 bits.
- RXB8 : Valeur recue du 9 ème bits, uniquement en cas de mode de transmission sur 9 bits.
- RXB8 : Valeur du 9 ème bits à émettre, uniquement en cas de mode de transmission sur 9 bits.
UBRR : Registre de selection de la vitesse de cadencement de l'UART.
- UBRR7...UBRR0 : Valeur permettant de sélectionner la fréquence de cadencement de l'UART.
Il est à signaler avant tout que la fréquence de cadencement ne doit pas forcément correspondre exactement aux normes en vigueur, tout système à une tolérance concernant les fréquences d'émissions et réceptions.
D'ailleurs le microcontroleurs lui meme effectue un triple échantillonage du signal a un instant de demi flanc, ce qui confirme que le système est insensible aux fréquences qui dérivent autours de la normes, et permet de limiter les erreurs dues aux parasites.

La valeur du registre UBRR peut etre calculée suivant la formule suivante :

Tableau contenant les valeurs de UBRR en fonctions de la valeur du Quartz :
On remarquera que les valeurs en Gras indique la compatibilité de la combinaison. Les valeurs sont bien sur données en décimal.
Vitesse (Bauds) |
1 |
MHz |
%Error |
1,8432 |
MHz |
%Error |
2 |
MHz |
%Error |
2,4576 |
MHz |
%Error |
2400 |
UBRR= |
25 |
0,2 |
UBRR= |
47 |
0,0 |
UBRR= |
51 |
0,2 |
UBRR= |
63 |
0,0 |
4800 |
UBRR= |
12 |
0,2 |
UBRR= |
23 |
0,0 |
UBRR= |
25 |
0,2 |
UBRR= |
31 |
0,0 |
9600 |
UBRR= |
6 |
7,5 |
UBRR= |
11 |
0,0 |
UBRR= |
12 |
0,2 |
UBRR= |
15 |
0,0 |
14400 |
UBRR= |
3 |
7,8 |
UBRR= |
7 |
0,0 |
UBRR= |
8 |
3,7 |
UBRR= |
10 |
3,1 |
19200 |
UBRR= |
2 |
7,8 |
UBRR= |
5 |
0,0 |
UBRR= |
6 |
7,5 |
UBRR= |
7 |
0,0 |
28800 |
UBRR= |
1 |
7,8 |
UBRR= |
3 |
0,0 |
UBRR= |
3 |
7,8 |
UBRR= |
4 |
6,3 |
38400 |
UBRR= |
1 |
22,9 |
UBRR= |
2 |
0,0 |
UBRR= |
2 |
7,8 |
UBRR= |
3 |
0,0 |
57600 |
UBRR= |
0 |
7,8 |
UBRR= |
1 |
0,0 |
UBRR= |
1 |
7,8 |
UBRR= |
2 |
12,5 |
76800 |
UBRR= |
0 |
22,9 |
UBRR= |
1 |
33,3 |
UBRR= |
1 |
22,9 |
UBRR= |
1 |
0,0 |
115200 |
UBRR= |
0 |
84,3 |
UBRR= |
0 |
0,0 |
UBRR= |
0 |
7,8 |
UBRR= |
d |
25 |
|
Vitesse (Bauds) |
3,2768 |
MHz |
%Error |
3,6864 |
MHz |
%Error |
4 |
MHz |
%Error |
4,608 |
MHz |
%Error |
2400 |
UBRR= |
84 |
0,4 |
UBRR= |
95 |
0,0 |
UBRR= |
103 |
0,2 |
UBRR= |
119 |
0,0 |
4800 |
UBRR= |
42 |
0,8 |
UBRR= |
47 |
0,0 |
UBRR= |
51 |
0,2 |
UBRR= |
59 |
0,0 |
9600 |
UBRR= |
20 |
1,6 |
UBRR= |
23 |
0,0 |
UBRR= |
25 |
0,2 |
UBRR= |
29 |
0,0 |
14400 |
UBRR= |
13 |
1,6 |
UBRR= |
15 |
0,0 |
UBRR= |
16 |
2,1 |
UBRR= |
19 |
0,0 |
19200 |
UBRR= |
14 |
3,1 |
UBRR= |
11 |
0,0 |
UBRR= |
12 |
0,2 |
UBRR= |
14 |
0,0 |
28800 |
UBRR= |
6 |
1,6 |
UBRR= |
7 |
0,0 |
UBRR= |
8 |
3,7 |
UBRR= |
9 |
0,0 |
38400 |
UBRR= |
4 |
6,3 |
UBRR= |
5 |
0,0 |
UBRR= |
6 |
7,5 |
UBRR= |
7 |
6,7 |
57600 |
UBRR= |
3 |
12,5 |
UBRR= |
3 |
0,0 |
UBRR= |
3 |
7,8 |
UBRR= |
4 |
0,0 |
76800 |
UBRR= |
2 |
12,5 |
UBRR= |
2 |
0,0 |
UBRR= |
2 |
7,8 |
UBRR= |
3 |
6,7 |
115200, |
UBRR= |
1 |
12,5 |
UBRR= |
1 |
0,0 |
UBRR= |
1 |
7,8 |
UBRR= |
2 |
20,0 |
|
Vitesse (Bauds) |
7,3728 |
MHz |
%Error |
8 |
MHz |
%Error |
9,216 |
MHz |
%Error |
11,059 |
MHz |
%Error |
2400 |
UBRR= |
191 |
0,0 |
UBRR= |
207 |
0,2 |
UBRR= |
239 |
0,0 |
UBRR= |
287 |
- |
4800 |
UBRR= |
95 |
0,0 |
UBRR= |
103 |
0,2 |
UBRR= |
119 |
0,0 |
UBRR= |
143 |
0,0 |
9600 |
UBRR= |
47 |
0,0 |
UBRR= |
51 |
0,2 |
UBRR= |
59 |
0,0 |
UBRR= |
71 |
0,0 |
14400 |
UBRR= |
31 |
0,0 |
UBRR= |
34 |
0,8 |
UBRR= |
39 |
0,0 |
UBRR= |
47 |
0,0 |
19200 |
UBRR= |
23 |
0,0 |
UBRR= |
25 |
0,2 |
UBRR= |
29 |
0,0 |
UBRR= |
35 |
0,0 |
28800 |
UBRR= |
15 |
0,0 |
UBRR= |
16 |
2,1 |
UBRR= |
19 |
0,0 |
UBRR= |
23 |
0,0 |
38400 |
UBRR= |
11 |
0,0 |
UBRR= |
12 |
0,2 |
UBRR= |
14 |
0,0 |
UBRR= |
17 |
0,0 |
57600 |
UBRR= |
7 |
0,0 |
UBRR= |
8 |
3,7 |
UBRR= |
9 |
0,0 |
UBRR= |
11 |
0,0 |
76800 |
UBRR= |
5 |
0,0 |
UBRR= |
6 |
7,5 |
UBRR= |
7 |
6,7 |
UBRR= |
8 |
0,0 |
115200 |
UBRR= |
3 |
0,0 |
UBRR= |
3 |
7,8 |
UBRR= |
4 |
0,0 |
UBRR= |
5 |
0,0 |
Application :
Paramétrage de l'UART :
Voici les principaux mode de fonctionnement :
Initialisation |
Emission |
Reception |
Mise en marche et validation de L'Uart avec UCR
Configuration de la vitesse de L'Uart avec UBRR |
RAZ de TXC dans USR
Emission de la donnée contenue dans UDR
Attente de TXC = 1 pour fin d'emission |
Attente de RXC = 1 pour fin de réception
lecture de la donnée contenue dans UDR
|
Exemple :
Nous allons tout simplement envoyé le mot "Ok" sur le PC.
Le driver de bus utilisé sera un MAX232
Le programme ' Hyperterminal ' fourni avec windows fera très bien l'affaire pour ce test ; Quelques reglages seront necessaires :

Une fois connecter la fenetre d'hyperterminal se remplira de "Ok" à n'en plus finir
Le programme en assembleur ne demande pas d'explications particulières.
Listing :
|