Par Superna

Généralités

Le port communication qu’utilise notre calculatrice est un port de type synchrone pouvant transférer de1200bps à 115200bps. Nous allons voir comment gérer cette entrée/sortie pour communiquer avec un Pc/Mac ou une autre calculatrice (Ti/Casio G25→65/G100(+)).

Les ports matériels

Ces ports matériels a ne pas confondre avec le port série correspondent avec les éléments d’entrée-sortie comme l’écran ou le port comm à travers le BIOS. Pour ne pas confondre je nommerais un port matériel avec PXXh avec XX, le numéro du port en hexadécimal.

Notation :

  • L = E indique que la valeur d’écriture = valeur de lecture
  • L = Seule la valeur de lecture est importante (L’Écriture ne fait rien)
  • E = Seule l’écriture est importante (La lecture ne sert à rien)
  • L/E = La lecture et écriture ne correspondent pas et servent

P0Ah : Contrôle du port série et du clavier

valeur par défaut

0Ah L/E

Rôle des bits

  • Bit 0 : Active ou désactive le contrôle du port comm. Il met à 1 le bit 0 du P0Eh si un octet a été bien envoyé ou a été reçu.
  • Bit 1 : Ne peut être enlevé
  • Bit 2,4,5,7 : Inconnu
  • Bit 3 : Contrôle l’état du clavier. S’il est à 1, le clavier peut être utilisé sinon le clavier devient inutilisable (désactivé)
  • Bit 6 : Ce bit met à sa valeur le bit 65 du P0Eh. ex :S’il est a 1, le bit 6 de P0Eh sera à 1 aussi

P0Eh : Témoin de Contrôle du port série

Rôle du port

permet de voir si un octet a été transmit

Valeur par défaut

00h L

Rôle des bits

  • Bit 0 : Indique si un octet a bien été reçu ou envoyé.
  • Bit 1,2,3,4,5,7 : Inconnu
  • Bit 6 : Ce bit se met à la valeur du bit 6 du P0Ah.

Note: L’utilisation de ces 2 ports dans la communication est superflue et peuvent être remplacés par l’unique P45h.

P11h : Met en route le port comm

Rôle du port

activation du port de communication serie

Valeur par défaut

03h L = E

Rôle des bits

  • Bit 5 : broche de réception a 5V
  • Bit 6 : broche d’envoi a 5V
  • Bit 0,1,2,3,4,7 : Inconnu

P44h : Gestion du port comm

Rôle du port

  • En écriture : mise en route de la communication a la vitesse souhaitée
  • En lecture : il donne le dernier octet reçu.

Valeur par défaut

00h L/E

Rôle des bits

En écriture

  • Bits de 0 à 3 : Vitesse, numero*4, ex : vitesse 4 = 4*4 = Ch
  • Bit 4 : Comunication correcte
  • Bit 5 : Réception (3)
  • Bit 6 : Envoi (5)

note sur l’écriture:

Bit de poids fort : Mode

Bits de poids faible : Vitesse

En lecture

  • Bit 7 : bit de poids fort de l’octet reçu
  • Bit 0 : bit de poids faible de l’octet reçu

Note: Si la valeur contient les bits 5 et 6 allumés, la calculatrice pourra alors envoyer et recevoir en même temps.

P45h : état du port comm et contrôle valeur a transférer

Rôle du port

  • En écriture : contrôle la donnée envoyé
  • En lecture : indique l’état du port comm

Rôle des bits

En lecture

  • Bit 0 : Indique qu’en octet a bien été envoyé
  • Bit 1 : Indique qu’un octet est reçu
  • Bit 2 : Indique qu’un octet a été oublié (Un octet est arrivé avant que le précédent ne soit lu)
  • Bit 3,4 : Erreur lors de la réception
  • Bits 5,6,7 : Inconnus

En écriture

Valeur normale 41h

La combinaison 00h rends la communication incoherente.

La combinaison 41h permet une reception et envoi correct.

P46h : Buffer d’envoi

Rôle du port

Le P46h stocke le prochain octet à envoyer

Valeur par défaut :

??h E

P47h : Met en route le port comm

Rôle du port

permet de spécifier le type de vitesse à utiliser.

Valeur par défaut

??h E

Rôle des bits

[image]

Pour initialiser la vitesse voulue, il faut mettre la valeur en Vert dans P47h. Ensuite mettre en bits de poids faible da la valeur a mettre dans P44h la valeur en Violet.

Ex : Pour communiquer à 14400bps on mettra au choix une des solutions suivantes :

  • 0Bh dans P47h, 70h dans P44h
  • 17h dans P47h, 74h dans P44h
  • 2Bh dans P47h, 78h dans P44h
  • 5Bh dans P47h, 7Ch dans P44h

Initialisation

L’initialisation primaire consiste à mettre du courant dans le port communication. Le P11h gère en effet le courant dans ce port. Donc avant toute communication, il faut activer les bits 5 et 6 du P11h pour que le port soit à 4.92V DC. Un problème mineur se pose : le P11h se remet à sa valeur pas défaut dès que la calculatrice s’éteint et se rallume, donc il faut surveiller le P11h soit désactiver l’interruption du clavier : L’Int 9. A la fin de communication, il faut donc éteindre les 2 bits 5 et 6 pour éteindre le port

Procédure d’envois de donnée

Etapes

Pour l’envoi, on configurera le port de telle sorte que la calculatrice envoie automatiquement le dernier octet mis dans le P46h.

Donc avant l’initialisation, il faudra mettre le premier octet à envoyer dans P46h pour éviter l’envoi d’un octet non voulu.

Donc, on va utiliser les spécifications des ports pour cette initialisation :

  • 1. Initialiser le port (Initialisation Primaire)
  • 2. Mettre 0 dans P44h (Pour initialiser toute communication)
  • 3. Mettre l’identifiant de la Vitesse dans P47h
  • 4. Mettre l’octet à envoyer dans P46h
  • 5. Mettre 41h dans P45h et la vitesse dans P44h (7 puis 0/4/8/C )
  • 6. Attendre que le bit 0 de P45h soit à 1 (Attendre que l’octet est bien envoyé)
  • 7. Soit continuer soit remettre un autre octet dans P46h et retourner à 6
  • 8. Mettre 0 dans P44h (Pour réinitialiser la communication)
  • 9. Désactiver les bits 5 et 6 du P11h

remarque :

La communication en elle-même se trouve entre 6 et 7.

Notez que cette routine fonctionne avec toutes les vitesses.

Si vous ne désirez pas que cet octet soit envoyé, il est possible d’exécuter la partie 1 après la partie 6 Lors de l’initialisation.

Exemple

;Assembleur 286
;Méthode d’envoi d’un octet 13h à 38400 bps
.partie1:
in al,11h         ;prends la valeur de P11h
or al,60h         ;active les bits 5 et 6
out 11h,al        ;remet en P11h
.partie2:
mov al,0h
out 44h,al        ;met 0 dans P44h
.partie3:
mov al,41h        ;comm correcte
out 45h,al
mov al,21h        ;vitesse principale
out 47h,al        ;met dans P47h
.partie4:
mov al,13h
out 46h,al
.partie5:
mov al,7C         ;communication a 38400bps
out 44h,al
.partie6:
in al,45h         ;prends P45h
and al,1          ;ne prends que le bit 0 (1= 00 000 001b)
cmp al,1          ;compare avec 1
jne .partie6      ;si pas 1, re verifie 
.partie7: 
;on continue
.partie8: 
mov al,0h
out 44h,al        ;met 0 dans P44h
.partie9 :
in al,11h         ;prends la valeur de P11h
and al,9Fh        ;désactive les bits 5 et 6
out 11h,al        ;remet en P11h
;End

Procédure de reception de donnée

Etapes

La réception est un peu plus compliquée car on a un buffer d’un octet donc les valeurs s’empilent et il faut aller vite.

En observant les ports matériels, on s’aperçoit que l’on peut gérer l’arrivée d’un octet par le P0Eh ou bien par le P45h.

Mais nous allons vérifier une arrivée avec P45h car il nous indique aussi s’il y a des erreurs et une double vérification prendrait plus de temps car il faudrait vérifier P0Eh, vérifier P45h et prendre l’octet. On peut faire plus simple en prenant la valeur de P45h, vérifier le bit 1, si à 1, vérifié sur la même valeur déjà stockée les bits d’erreurs et prendre l’octet, certes plus complexe mais plus rapide.

Donc je vais vous décrire la façon comment attendre l’arrivée d’un octet avec la gestion des erreurs :

  • 1. Initialiser le port (Initialisation Primaire)
  • 2. Mettre 0 dans P44h (Pour initialiser toute communication)
  • 3. Mettre l’identifiant de la Vitesse dans P47h
  • 4. Mettre 41h dans P45h et la vitesse dans P44h (7 puis 0/4/8/C )
  • 5. Prendre la valeur de P45h
  • 6. Si le bit 1 est activé et que les bits 3 et 4 sont désactivés, continuer sinon retourner a 5
  • 7. Prendre l’octet dans P44h (ceci va mettre le bit 1 de P45 à 0)
  • 8. Analyser l’octet et s’il vous en faut un autre retourner a 6
  • 9. Mettre 0 dans P44h (Pour réinitialiser la communication)
  • 10. Désactiver les bits 5 et 6 du P11h

Exemple

;Assembleur 286
;Méthode de réception d’un octet a 34800bps
.partie1:
in al,11h            ;prends la valeur de P11h
or al,60h            ;active les bits 5 et 6
out 11h,al           ;remet en P11h
.partie2:
mov al,0h
out 44h,al           ;met 0 dans P44h
.partie3: 
mov al,21h           ;vitesse principale
out 47h,al           ;met dans P47h 
.partie4:
mov al,41h           ;comm correcte
out 45h,al 
mov al,3C            ;réception à 38400bps
out 44h,al
.partie5:
in al,45h            ;prends P45h
.partie6:
mov ah,al            ;copie de sauvegarde
and al,2             ;prends le bit 1
cmp al,2             ;vérifie sa valeur
jne .partie6         ;si 0, re vérification
mov al,ah            ;reprise de la sauvegarde
and al,18h           ;prends les bits 4 et 5
cmp al,0             ;si aucun activé continuer
je noerror
in al,44h            ;vide le buffer
jmp .partie5         ;revérifie
noerror:
.partie7:
in al,44h            ;prends la valeur reçue
.partie8: 
   ;pas besoin d’analyse
.partie9:
mov al,0h
out 44h,al           ;met 0 dans P44h
.partie10:
in al,11h            ;prends la valeur de P11h
and al,9Fh           ;désactive les bits 5 et 6
out 11h,al           ;remet en P11h
;End

Et le reste de la calculatrice

Cette nouvelle méthode permet en outre de permettre encore l’utilisation de toutes les autres fonctions de la calculatrice notamment le clavier. Mais pour la réception, la vérification d’arrivée doit être rapide et constant donc il n’est pas conseillé de s’absenter pour écrire plusieurs pixels ou vérifier le clavier. Il est même préférable de placer la routine de vérification dans une interruption du Timer 1Ch qui est appelée sur Pc environ 18,2fois par secondes et sur la calculatrice environ 50 fois par secondes, ce qui permet de vérifier un vitesse jusqu’a 390000bps, ce qui est largement suffisant pour vérifier même la vitesse 115000bps. Il est surtout préférable de vérifier le clavier avec les méthodes de touches multiples pour ne pas attendre et d’afficher un pixel le plus rapidement possible et si possible pixel par pixel pour laisser l’interruption se lancer. Aussi, il semble que l’envoi soit trop rapide donc il est conseillé de mettre entre chaque octet envoyé une ou deux instructions assembleur HLT pour faire plus fluide.

Note sur la méthode

Les méthodes précédentes sont faciles d’accès car on peut envoyer ou recevoir quand on veut après l’initialisation, c’est à dire que si vous envoyer un octet, après la partie 7 de l’envoi, vous pourrez de suite continuer après la partie 5 de réception. Pour changer de mode de réception il n’est pas nécessaire de reconfigurer.

 
comm.txt · Dernière modification: 2007/11/22 12:00 par 193.249.189.107
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki