LES LIAISONS "SERIE"
DU MICROCONTROLEUR MC9S12C128

 

Hugues ANGELIS

page  09

 

Emission d'un octet

        On lit le registre SCISR1 et on vérifie que le bit TDRE est à '1'.

       On écrit alors la donnée à transmettre dans le registre SCIDRL (comme on envoie un octet de données, il n'est pas indispensable d'écrire dans le registre SCIDRH).

      Si le registre à décalage est vide (donc si le bit TC est à '1'), le contenu du registre de données est immédiatement transmis au registre à décalage. Le bit TC passe alors immédiatement à '0' et le bit TDRE passe alors à '1'. Si le registre à décalage est en cours d'utilisation, les données restent stockées dans le registre de données (SCIDRL) jusqu'à ce que le registre à décalage ait transmis la trame de données, c'est à dire lorsque le module de transmission a atteint 9/16 du bit de STOP. Alors, le contenu du registre de données est copié au registre à décalage et le bit TDRE est mis à '1'.

L'envoi d'un autre octet se fait alors en répétant les étapes précédentes.

Interruption en émission

L’utilisation des interruptions de transmission est valable uniquement lorsqu’il y a plusieurs octets à envoyer à la suite. L’émission se fera en envoyant les octets uns à uns. Pour automatiser l’envoi des octets les uns après les autres, on peut activer l’interruption TIE. L’interruption TCIE présente peu d’intérêt puisqu’elle indique que la transmission est terminée. Ces interruptions ne doivent jamais être activées dès le début car en l’absence de transmission, elles se déclenchent et restent actives tant que le buffer d’émission reste vide.
Une fois que le dernier caractère a été placé dans le buffer de transmission, on doit désactiver l’interruption d’envoi.

Remarques concernant l'émission

Si le contrôle de parité est activé (PE = '1'), alors le bit de poids fort est systématiquement substitué par un bit de parité, cela veut dire que mode 8 bits (M = '0') seul les 7 bits de poids faible sont des bits de données et le bit de poids fort (le 8ème) est remplacé par un bit de parité. En mode 9 bits (M = '1') le bit T8 du registre SCIDRH n'est pas pris en compte et le module va automatiquement lui substituer un bit de parité.

Lorsque le module de transmission n'a plus de données à émettre (TC = '1'), la sortie TXD est maintenue à l'état '1' (Idle). Par contre si le module de transmission est désactivé (TE = '0'), la sortie TXD n'est plus contrôlée par le bloc SCI.

Si au cours d'une transmission, le bit TE passe à '0' (désactivation du module de transmission), le passage en mode désactivé sera réalisé après la transmission du bit de STOP du message en cours dans le registre à décalage. Si des données étaient présentes dans les registres de données au moment où le module de transmission est passé en mode désactivé, elles sont définitivement perdues.

Pour transmettre un code Idle entre deux trames, il convient d'utiliser la méthode suivante :

      attendre que le bit TDRE passe à '1' (le registre de données en transmission est vide)
      Mettre TE à '0' (désactiver le module de transmission)
     Immédiatement après, mettre TE à '1' (activer le module de transmission), ce qui déclenche l'envoie du code Idle, c'est à dire 10 ou 11 bits à '1' (selon la valeur du bit M).
     recommencer la procédure de transmission.