Pilote
des ports de l'émulateur
Mini système FORTH
Micro système FORTH
Instructions
Utilisation
Exemple
Principe
Si les
ports A et B de l'émulateur sont des ports
d'entrées/sorties adressables dans la zone des registres
d'extension du coeur FORTH décrits comme suit:
272 (0x110) PORT_A
273 (0x111) PORT_B
écriture:
valeur[15..0]
lecture:
(valeur&entrée)[15..0]
voyant allumé si valeur&entrée=1
Le pilote va permettre de faciliter l'utilisation de ces ports en se
servant du noyau temps réel. Le principe consiste
à
permettre au développeur de concevoir un programme qui es
automatiquement exécuté lorsqu'une des
entrées
choisies change d'état.
Pour
l'émulateur du mini système FORTH, le port A est câblé sur les
composants PCF8574 du port I2C numéros 0 et 1 et le port B sur les
composants PCF8574A du port I2C numéros 0 et 1. Les poids forts sont sur le numéro 0 et les poids faibles sur le numéro 1. Le schéma électrique est le suivant:
L'émulateur du micro système FORTH simule 7 ports A,B,C,D,E,F et G
correspondant à une configuration maximale possible pouvant être
intégrée dans un processeur 16 bits de MICROCHIP.
Instructions
- CW_PORT_A 272
- CW_PORT_B 273
Numéros des
registres d'extension des ports A et B.
Ces instructions n'existent pas dans le mini système FORTH,
l'accès direct au ports se fait par l'intermédiaire des instructions I2C_PCF8574_C@, I2C_PCF8574A_C@, I2C_PCF8574_C! et I2C_PCF8574A_C! numéros 0 et 1.
Ces instructions n'existent pas dans le micro système FORTH,
les registres ne sont pas déclarés pour gagner de la place mémoire.
- TABLE_PORTS adr
Cette
instruction est uniquement disponible dans le micro système FORTH et
fournit l'adresse du tableau de variables utilisées par les pilotes des
différents ports.
adr_prg,msq SYNC_PORT_A -
adr_prg,msq SYNC_PORT_B -
Installation des
pilotes des ports A et B.
adr_prg est l'adresse du programme appelé avec la valeur lue
sur le port
lors de la détection de la modification d'un des bits
choisis.
msq est le masque des bits testés par le pilote (1 pour
chaque bit testé, 0 pour les autres).
Si adr_prg ou msq est nul, le pilote est retiré.
Dans le cas du micro sytème FORTH, chaque bit testé est configuré en drain ouvert, les autres sont configurés en sorties,
de plus adr_prg est constitué de 2 mots de 16 bits, adrh et adrl,
adrh,adrl,msq SYNC_PORT_C -
adrh,adrl,msq SYNC_PORT_D -
adrh,adrl,msq SYNC_PORT_E -
adrh,adrl,msq SYNC_PORT_F -
adrh,adrl,msq SYNC_PORT_G -
Installation
des pilotes des port C,D,E,F et G uniquement dans le cas du micro système FORTH.
adrh,adrl est l'adresse du programme
appelé avec la valeur lue sur le port
lors de la détection de la modification d'un des bits
choisis.
msq est le masque des bits
testés par le pilote (1 pour chaque bit testé en drain ouvert, 0
pour les autres en sorties).
Si adrh et adrl ou msq est nul, le pilote est retiré.
n SORT_PORT_A -
n SORT_PORT_B
-
Ecriture d'une
valeur sur les ports A et B.
n est combiné avec le complément du masque du pilote
(0 si non installé) et envoyé sur le port.
n SORT_PORT_C
-
n SORT_PORT_D
-
n SORT_PORT_E
-
n SORT_PORT_F
-
n SORT_PORT_G
-
Ecriture d'une
valeur sur les ports C,D,E,F et G uniquement dans le cas du micro système FORTH.
n est combiné avec le complément du masque du pilote
(0 si non installé) et envoyé sur le port.
Utilisation
Le
pilote n'étant pas intégré au noyau,
il faut
d'abord compiler le fichier source ports_A_B.txt avant de pouvoir l'utiliser.
Pour
l'émulateur du mini système FORTH, il faut d'abord compiler les pilotes I2C décrits dans les fichiers sources pcf8574.txt et pcf8574a.txt puis compiler ports_A_B.txt.
Pour
l'émulateur du micro système FORTH, il faut d'abord compiler le fichier source ports_ABCDEFG.txt ou ports_ABCDEFG_ep.txt en
fonction du processeur utilisé. Pour optimiser la taille mémoire,
retirer les instructions des ports inutilisés avant la compilation.
Il faut créer le programme appelé automatiquemen
par le pilote en utilisant la syntaxe suivante:
: PROGRAMME
INSTRUCTION1
INSTRUCTION2 ... INSTRUCTIONn
;
ATTENTION: le programme aura la valeur du port sur la pile des
données, il ne faut pas oublier de dépiler cette
valeur.
Il faut ensuite installer le pilote avec la valeur du masque
désiré:
FIND PROGRAMME
MASQUE SYNC_PORT_x
Le port x est lu toutes les 20 ms et dès qu'au moins un des
bits
correspondant au masque a changé de valeur depuis la
dernière lecture, le programme es
éxécuté
avec la valeur lue sur le port x. Ceci es
réalisé avec
la priorité 49152.
Exemple
Le
programme suivant permet de recopier la valeur du port B sur le port A
en ayant pris soin de mettre tous les interrupteurs du port A vers le
haut:
DECIMAL
: PROG_PORT_B
( Le contenu du port B est copie sur le port A avec emission d'un son )
SORT_PORT_A
10 500 BIP ( remplacer "10 100 BIP" par "7 EMIT" pour le micro système FORTH )
;
0 DUP ( ajouter "DUP" pour le micro système FORTH ) SYNC_PORT_A FIND PROG_PORT_B
65535 SYNC_PORT_B
Pour
retirer ce programme, il suffit de faire:
0 DUP ( ajouter "DUP" pour le micro système FORTH ) SYNC_PORT_B 65535 SORT_PORT_A
Voici une vidéo:
