Programmation du port I/O, par Philippe MAIRE (Philou)

 

Introduction

Pour utiliser le modem radio, il va falloir établir notre propre protocole. Pour ceci, il ne sera pas possible d'utiliser les fonctions du TIOS qui fonctionnent selon le protocole TI. Il va falloir lire et écrire directement sur les deux fils du port I/O.

Pour les tests et l'expérimentation, j'ai utilisé le schéma suivant :

 

 Ce schéma étant reproduit une fois par fil (rouge/blanc). Il permet de voir l'état du fil, tout en le modifiant grâce au switch.

Pour la programmation, que ceux qui ne connaissent pas les bases minimales de l'assembleur passent leur chemin, bien que j'envisage de faire un programme comme basiclib mais permettant l'utilisation du port IO.

Bon passons aux choses sérieuses. Ce document se composera de deux parties principales :

    Définition de l'état d'un fil

    Lecture de l'état d'un fil

Attention, la TI travaille en logique négative et pas en TTL :

0=0V

1=3.3V (à peu près)

Par défaut le port est à 1, pour le mettre à 0 il suffit de faire un court-circuit entre le fil voulu et la masse (sans danger pour la TI : 150 µA débités avec des piles presque neuves).

Cette logique a l'avantage de ne pas nécessiter de rentrer du courant dans la TI.

Pour mettre le fil à 1, la résistance entre le fil et la masse doit être supérieure à 6.5kW (à peu près)

Pour le mettre à 0, faire un court-circuit entre nos deux chers fils ou mettre une résistance inférieure à 6kW. Il ne faut donc jamais d'alimentation externe comme en logique positive.

Bon pour l'écriture je vais pomper une partie de la page écrite par HiddenFiles, disponible sur ti-fr

---------

* Activer le DirectAccess.
Pour pouvoir agir directement sur l'état du port, il faut autoriser le DirectAccess. On utilise la commande suivante :
bset.b #6,$60000C

* Passer les lignes à 1 (+3V).
Ainsi, pour passer les lignes à 1, il suffit de faire un reset. On utilise les commandes suivantes :
bclr.b #x,$60000E
On remplace x par 0 pour la ligne rouge et 1 pour la ligne blanche.
Ainsi pour passer le fil rouge à +3V on fera : bclr.b #0,$60000E

* Passer les ligne à 0 (0V).
Pour passer les lignes à 0, on utilise la commande suivante :
bset.b #x,$60000E
On remplace x par 0 pour la ligne rouge et 1 pour la ligne blanche.

[...]

* Bloquer le DirectAccess.
A la fin de chaque programme utilisant le port, il faut IMPERATIVEMENT bloquer le DirectAccess avec la commande suivante :
move.b #$8D,$60000C
Sinon on crée de problemes avec le port qui ne se verrons peut-être pas tout de suite mais qui risquent de gêner les transferts.

---------

Bon voilà pour l'écriture.

Passons à la lecture maintenant.

Pour lire l'état du port, il faut comme avant avoir activé le DirectAccess. Tapons donc :

bset.b #6,$60000C

Ensuite, pour lire le fil blanc, il faudra utiliser :

btst.b #3,$60000E

ou pour le fil rouge :

btst.b #2,$60000E

En utilisant ces deux instructions, seul le registre Z est modifié selon l'état du fil.

Sil le fil est à 0, Z vaut 1 et vice-versa

Par conséquent, pour faire un saut si le fil est à 0, il faut utiliser l'instruction bne, pour faire un branchement si le fil est à 1, utiliser beq.

Ensuite, il ne faut pas oublier de désactiver le DirectAccess, ni de remettre les fils à 1, au moyen, par exemple, de la procédure suivante :

disable_DA:
        bclr.b #0,$60000E                 ;Réinit le fil rouge
        bclr.b #1,$60000E                 ;Réinit le fil blanc
        move.b #$8D,$60000C         ;Interdit le DirectAccess
rts

 

Voilà, avec ça vous devriez être capable de vous débrouiller. Si toutefois vous avez un problème, n'hésitez pas à m'écrire un mail : philippe.maire@evc.net ou bien à me contacter par ICQ : 59264316.

 

Merci à HiddenFiles qui m'a laissé prendre quelques extraits de son article.