Document fait avec Nvu Document made with Nvu




Pilote de l'entrée sortie analogique de l'émulateur

Instructions
Utilisation
Exemple

Principe

Si l'entrée sortie analogique de l'émulateur sont des registres adressables dans la zone des registres d'extension du coeur FORTH décrits comme suit:

274 (0x112) échantillonnage
275 (0x113) entrée/sortie analogique

si écriture échantillonnage = 0
-lecture et écriture analogique directe
-lecture échantillonnage = 1
sinon
-FIFO 2048 échantillons 10 us (1) à 8 échantillons 2,55 ms (255)
-lecture échantillonnage = nombre d'échantillons disponibles

Les valeurs analogiques doivent être comprises entre -128 e +127


Le pilote va permettre de faciliter l'utilisation de ces registres en se servant du noyau temps réel. Le principe consiste à permettre au développeur de concevoir un programme qui es automatiquement exécuté pendant le flux des échantillons.


Instructions

- CW_ECHANTILLONNAGE 274

Numéro du registre d'extension de contrôle de l'échantillonnage.

- CW_ANALOGIQUE 275

Numéro du registre d'extension de l'entrée sortie analogique.

adr_prg,periode SYNC_ANALOGIQUE -

Installation du pilote de l'entrée sortie analogique.
adr_prg est l'adresse du programme appelé avec l'échantillon d'entrée
et qui doit fournir l'échantillon de sortie correspondant.
periode est la valeur temporelle de l'échantillon en us (10 minimum à 2550 maximum).
Si adr_prg ou periode est nul, le pilote est retiré.


Utilisation

Le pilote n'étant pas intégré au noyau, il fau d'abord compiler le fichier source analogique.txt avant de pouvoir l'utiliser.

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 de l'échantillon d'entrée sur la pile des données, il devra fournit un échantillon de sortie.

Il faut ensuite installer le pilote avec la valeur de la période désirée:

FIND PROGRAMME PERIODE SYNC_ANALOGIQUE

La FIFO de réception des échantillons est lue toutes les 20 ms et le programme est appelé autant de fois qu'il y a d'échantillons. Avec une période de 100 us par exemple, jusqu'à 200 échantillons seron traités toutes les 20 ms. Chaque échantillon fourni par le programme es envoyé dans la FIFO de sortie. Ceci es réalisé avec la priorité 49152.

Exemple

Le programme suivant est une PLL logicielle multipliant par deux la fréquence d'entrée. Le fichier source ports_A_B.txt doit aussi être compilé afin que le port A affiche la fréquence de sortie en binaire et que le port B affiche la progression du vérouillage sous forme de chenillard:

DECIMAL

0 VARIABLE PERIODE
0 VARIABLE DIV
0 VARIABLE REF
0 VARIABLE FOSC

: PROG_ANALOGIQUE
 ( Detection du front montant de l'entree )

 0< REF DUP >R @ OVER R> ! >R NOT R> AND NEGATE
 ( Oscillateur 1 Hz a 5 KHz )
 PERIODE DUP >R @ FOSC @ - DUP 0<
 IF
   ( Detection du front montant de l'oscillateur divise par 2 )
  5000+ >R DIV DUP >R @ 1+ DUP R> ! 3 AND 2 = + R>
 THEN

 R> ! ?DUP
 IF
  ( Ajustage de la fréquence pour verouillage )
  FOSC DUP >R @ + DUP R> ! DUP >R SORT_PORT_A 1 R> 15 AND LSH SORT_PORT_B
 THEN
 ( Sortie de l'oscillateur )
 DIV @ 1 AND -200 * 100+
;

0 DUP SYNC_PORT_A 0 DUP SYNC_PORT_B FIND PROG_ANALOGIQUE 100 SYNC_ANALOGIQUE

Pour retirer ce programme, il suffit de faire:

65535 DUP SORT_PORT_A SORT_PORT_B 0 DUP SYNC_ANALOGIQUE

Voici une vidéo: