Exercice : Fenêtre de données en RAM On a pré calculé un table de

Transcription

Exercice : Fenêtre de données en RAM On a pré calculé un table de
Exercice : Fenêtre de données en RAM
On a pré calculé un table de sinus de 64 valeurs reparties de 0 à
π
. On souhaite qu'elle soit accessible en
4
mémoire de données.
- Proposer un emplacement de cette table en mémoire programme.
- Indiquer la valeur du registre DRWR pour accéder à cette table.
π π
- Indiquer l'adresse en RAM des valeurs de 0 ; ;
4 6
Réponses :
On peut choisir la dernière page de l'espace utilisateur, 0f9fh soit l'adresse 3999 qui se trouve dans la
62ème page. La page choisie peut donc être la 61ème.
Il faut donc donner la valeur 61 au registre DRWR : DRWR = 03dh
π
0 se trouve à l'adresse 040h (première adresse de la fenêtre de donnée en RAM) à l'adresse 07fh
4
π
est la 43ème donnée soit l'adresse 01 101011 soit 06bh.
6
Exercice : Registres des ports d'E/S
Compléter ce tableau à partir du schéma précédent
DDRX
ORX
DRX
Description
Entrée avec polarisation, sans interruption (état à l'initialisation)
Entrée sans polarisation
Entrée avec polarisation et interruption
Entrée analogique
Sortie à drain ouvert
Sortie Push-pull
Exercice : Configuration des registres DDRX, DRX, ORX.
On souhaite configurer les ports d’entrées sorties du ST6260 de la façon suivante :
Port A : PA0 à PA3 Sorties Push Pull.
Port B : PB0 à PB2: entrées sans polarisation.
Port C : PC2 entrée analogique PC3 entrée avec polarisation et interruption.
- Donner la valeur des registres DRX ; ORX ; DDRX correspondant à cette configuration.
- Proposer un algorithme de programmation de ces registres.
DDRA = 0000 1111b = 0Fh ; ORA = 0000 1111b = 0Fh
DDRB = 0000 0000b = 00h ; ORB = 0000 0000b = 00h ; DRB = 0000 0111b = 07h
DDRC = 0000 0000b = 00h ; ORC = 0000 1100b = 0Ch ; DRC = 0000 0100b = 08h
Port A : DDRA puis ORA
Port B : DDRB puis ORB puis DRB
Port C : DDRC = 00h puis DRC = 08h puis ORC = 0Ch
ST62 : Exercices
pa
LPR VOILLAUME
Exercice : Temporisateur
On souhaite générer des interruptions périodiques (passage à zéro du temporisateur). Quelles sont les
fréquences possibles ?
f osc
÷ 1; 2 ; 4;8 ;16 ;32 ; 64 ;128 =
12 × 256
Le Timer 1 possède un prédiviseur par 1 ; 2 ; 4 ; 8 ; 16 ; 32 ; 64 ; 128. C’est un compteur 8 bits
Quelles est la longueur maximum de l’impulsion que l’on peut générer ?
T = 0,768 ms
Quelle est la résolution minimum de la mesure d’une impulsion ?
R = 1,5 µs
Exercice : Configuration du temporisateur à rechargement automatique.
On souhaite générer un signal PWM de fréquence 5 kHz avec un ST6260 cadencé à 8 MHz.
- Donner la valeur des registres et proposer un organigramme d'utilisation du temporisateur.
Réponse :
Il est nécessaire de choisir ARRC le plus petit possible afin d'avoir la
meilleure résolution sur le rapport cyclique.
Début/fin
Dans un premier temps on choisit ARRC = 0 ce qui nous donne la
fréquence du compteur ARTC.
diviseur =
8.10 6
=6,3
255.5.10 3
On doit donc choisir un ratio entier supérieur parmi les combinaisons du
prédiviseur. Soit 8.
Cela nous donne les valeurs de PS2 ; PS1 ; PS0 (0 0 1)
L'horloge choisie sera l'horloge de l'oscillateur soit CC1 = 0 ; CC0 = 0
Soit la valeur du registre ARSC1 = 01100000b
On choisit le mode Rechargement Automatique, toutes les interruptions
seront interdites et le temporisateur bloqué pour le début. La sortie PWM
sera activée.
Soit ARMC = 00100000b
Configurer PB7 en
sortie
ARMC <- 00100000b
ARSC1 <- 01100000b
ARRC <- 37h
Reste à choisir la valeur de ARRC.
ARTC est cadencé à 1 MHz une période dure donc 200 coups soit ARTC
= 255 –200 = 55 = 37h
La valeur du rapport cyclique sera placée dans ARCP avec ARCP ≥ 55 et
ARCP − ARLR
α=
255 − ARLR
Activer TCLD
ARCP <- ????
ST62 : Exercices
pa
LPR VOILLAUME
Activer TEN
La résolution de la MLI est de 0,5%
Une foi le temporisateur activé, il n'y a que le registre ARCP à modifier afin de donner une nouvelle
valeur de α.
Le Timer à rechargement automatique (ARTIMER) est capable de générer un signal carré de rapport
cyclique variable. α peut prendre 256 valeurs. Quelle est la fréquence maximale du signal ?
F = 31,25 kHz
Exercice : CAN
Donner l’algorithme de l’utilisation du CAN sans interruption.
Activer le CAN
(forcer à 1 le bit PDS de
ADCR)
Lancer la conversion
(forcer à 1 le bit STA de
ADCR)
non
Conversion
terminée ?
(eoc de ADCR = 1 ?)
Oui
Lire le résultat
(ADR)
ST62 : Exercices
pa
LPR VOILLAUME
Exercice : Chien de garde.
Combien de cycle mini et maxi peut-on régler avec le chien de garde ?
De 12×256 à 12×64×256
Exercice : Horloges
Quelle est la durée d’un cycle du CPU du ST62 (fosc = 8 MHz) ?
T = 1,625 µs
Une instruction du cpu dure en général 4 cycles
Quelle est la durée moyenne d’une instruction ?
Tinstruction = 6,5 µs
Combien le CPU effectue-t-il d’instructions par seconde ?
N = 0,15 MIPS
Exercice : Registre IOR.
A partir du schéma des interruptions :
Quelles sont les interruptions que l’on peut bloquer avec le bit GEN ?
- Toutes les interruptions sauf l’entrée NMI
A quoi correspond PBE ?
- Pour masquer les interruptions du port A, B ou C (registre ORX)
A quoi sert le bit LES ?
- LES = 0 Æ déclenchement sur front descendant
- LES = 1 Æ déclenchement sur le niveau logique 0
A quoi sert le bit ESB ?
- ESB = 0 Æ déclenchement sur front descendant
- ESB = 1 Æ déclenchement sur front montant
ST62 : Exercices
pa
LPR VOILLAUME
Exercice : Organigramme des interruptions.
Dans l’organigramme :
- repasser en bleu le fonctionnement normal du CPU,
- repasser en rouge la demande d’interruption,
- repasser en vert la sortie d’interruption.
- Que se passe-t-il si le CPU reçoit une instruction RETI alors qu’il est en mode normal ?
Le CPU continu son travail (exécution de l'instruction suivante).
- Que se passe-t-il si la pile est vide bien que le CPU soit en mode NMI (quand cela peut-il se
produire ?) ?
Le CPU sort du mode NMI et exécute l'instruction suivante. Cela se produit lors du RESET (Le CPU
bascule en mode NMI et vide la pile).
ST62 : Exercices
pa
LPR VOILLAUME
Exercice ALU du ST62 :
Faire l'inventaire des opérations effectuées par l'ALU du ST62.
ET ; Complément ; addition soustraction ; incrémenter ; décrémenter ;Rotation et décalage vers la gauche
; comparer.
Exercice : CAN sans interruption.
Reprendre l’algorithme de l’utilisation du CAN sans interruption et écrire le programme.
.VERS "ST6260"
.ROMSIZE 4
.INPUT "6260_REG.ASM"
;
;
;
;
le microcontrôleur est un ST6260
La mémoire programme fait 4 ko
insertion des déclarations de registre du
ST6260
; Initialisation des vecteurs d’interruption
.ORG
JP
0ffeh
debut
.ORG 880h
debut LD
DDRA, 00000000b
LD
DRA , 00000001b
LD
ORA, 00000001b
RETI
SET
NOP
PDS,
ADCR
conv SET
STA,
attend
JRR
LD
A,
:
:
JP conv
ADCR
EOC,
ADCR
; PA0 en entrée analogique
attend
;
;
;
;
;
;
activation du cna
au moins une instruction avant de lancer la
conversion
Lancer la conversion
Attendre la fin de la conversion
lire le résultat de la conversion
; Exploitation de la conversion
Exercice : Temporisation
Le langage machine est parfois trop rapide, on est alors obligé d'insérer une boucle de retard permettant
de ralentir le programme.
L'algorithme est le suivant :
ST62 : Exercices
pa
LPR VOILLAUME
V <- 255
V <- V-1
non
V=0?
Ecrire le programme correspondant à cette boucle
Boucle
LDI
DEC
JRNZ
V,
255
V
boucle
Exprimer le temps de cette boucle en fonction de la valeur initiale du registre V. En déduire les temps
mini et maxi de ce retard. Le ST6260 est cadencé à 8 MHz.
Mini : 10 cycles Æ 10 × 12 /8000000 secondes
Maxi : (4 + 6×256) Æ (10 + 6×256)×12/8000000
On peut avoir besoin de retards plus importants, dans ce cas, il faut imbriquer deux boucles.
Ecrire l'algorithme et le programme de ces deux boucles imbriquées.
ST62 : Exercices
pa
LPR VOILLAUME
W <- 255
V <- 255
V <- V-1
non
non
V=0?
oui
W <- W - 1
W=0?
oui
Bcl2
Bcl1
LDI
LDI
DEC
JRNZ
DEC
JRNZ
W,
V,
V
bcl1
W
Bcl2
255
255
ST62 : Exercices
pa
LPR VOILLAUME
Exercice : CAN avec interruption.
Ecrire le programme utilisant le CAN avec interruption
.VERS "ST6260"
.ROMSIZE 4
.INPUT "6260_REG.ASM"
.ORG
JP
.org
jp
; Initialisation des vecteurs d’interruption
0ffeh
debut
0ff0h
int_can
.ORG 880h
debut LD
DDRA, 00000000b
LD
DRA , 00000001b
LD
ORA, 00000001b
SET
PDS, ADCR
Set
eai, ADCR
Set
gen, ior
RETI
NOP
conversion
conv SET
WAIT
; le microcontrôleur est un ST6260
; La mémoire programme fait 4 ko
; insertion des déclarations de registre du ST6260
; PA0 en entrée analogique
;
;
;
;
activation du cna
autorisation des interruptions du can
autorisation de toutes les interruptions
fin du mode NMI après le RESET
; au moins une instruction avant de lancer la
STA,
A
DCR
:
Int_can res eai,
Ld
a,
reti
; Lancer la conversion
; Exploitation de la conversion
adcr
adcr
; masquer les interruptions CNA
; prendre le resultat
ST62 : Exercices
pa
LPR VOILLAUME