Corrigé (pdf 53 Ko)

publicité
IUP SI 1
Examen Architecture des calculateurs
26 Avril 2004
Durée 2h. Documents autorisés.
Correction
1
Génération d’un signal avec GPT1
Les registres de l’unité GPT1 du C167 sont initialisés ainsi:
T2CON=0x25;
T3CON=0x2C0;
T4CON=0x26;
T2=20000;
T3=10000;
T4=10000;
DP3=0x08;
1. Déduire de ces initialisations le mode de fonctionnement de chacun des temporisateurs.
T2 est utilisé en rechargement de T3 sur fronts montants de T3OTL
T3 est en timer, résolution 400ns, décompteur, sortie T3OUT activée.
T4 est utilisé en rechargement de T3 sur fronts descendants de T3OTL
2. Dessiner le chronogramme (évolution en fonction du temps) de la valeur du registre T3 et de
celle du bit T3OTL sur un horizon d’environ 30 millisecondes.
T3
T2=20000
T4=10000
0
12ms (400ns x 30000)
T3OTL
3. Donner la période T du signal présent sur la broche P3.3 ainsi que la valeur de son rapport
cyclique.
Période T=30000x400ns=12ms, Rapport cyclique:2/3
4. Déterminer une expression générale permettant de calculer T en fonction des valeurs contenues
dans T2 et T4 et de la résolution de l’horloge tr .
T = (T 2 + T 4)tr
5. Même question pour le rapport cyclique R.
T2
R=
T2 + T4
6. En déduire les valeurs d’initialisations de T2 et T4 en fonction de T, tr et R.
On déduit des deux expressions précédentes:
T 2 + T 4 = tTr
et T 2 + T 4 = TR2
d’ou: T 2 = R tTr
et T 4 = (1 − R) tTr
IUP SI 1
2
Examen Architecture des calculateurs
26 Avril 2004
Communication série
L’application proposée consiste à traiter des requêtes reçues par l’intermédiaire de la ligne série.
Une requête consiste en une demande d’acquisition d’un signal sur une entrée analogique. Elle
est simplement constituée d’un nombre indiquant le numéro du canal sur lequel doit se faire l’acquisition.
La réponse à la requête est la valeur exprimée en milli-volts (sous la forme d’un entier sur 16
bits) de la tension sur la broche correspondante. Elle est renvoyée par le micro-contrôleur sur la
ligne série.
La communication se fait en asynchrone sur 8 bits sans parité avec 2 bits de stop à 9600 bauds.
Les erreurs de transmission ne sont pas traitées.
On suppose que les fonctions suivantes sont fournies et accessibles en incluant dans le programme
la directive de compilation:
#include <com.h>
– Fonction d’initialisation de la liaison série (hors registres d’interruptions).
void init_ASC0();
– Fonction qui renvoie la valeur en mV sur l’entrée canal.
int mesure(int canal);
– Fonction qui envoie sur la ligne série l’entier valeur.
void emission(int valeur);
1. Ecrire un programme utilisant ces fonctions et permettant de répondre aux requêtes reçues
(Ces requêtes peuvent arriver n’importe quand).
#include<c167.h>
#include<gnutrap.h>
#include<com.h>
TRAP_noMD()x2B,reception);
void reception()
{
int V,canal;
canal=S0RBUF;
V=mesure(canal);
emission(V);
}
void main()
{
init_ASC0();
S0RIC=0x4C; // IT niveau 3
SET_SFRBIT(IEN);
while(1);
}
2. Ecrire la fonction d’initialisation de l’unité série ASC0: init ASC0.
void init_ASC0()
{
S0CON=0x8019; // S0R=1, S0BRS=0, S0REN=1, S0STP=1, S0M=1
S0BG=65;
SET_SFRBIT(DP3.10);
SET_SFRBIT(P3.10);
}
IUP SI 1
Examen Architecture des calculateurs
26 Avril 2004
3. Ecrire la fonction mesure.
int mesure(int canal)
{
int M;
ADCON=canal;
SET_SFRBIT(ADST);
WAIT_UNTIL_BIT_SET(ADCIR);
CLR_SFRBIT(ADCIR);
M=(ADDAT & 0x3F)*5./1024.; // conversion en mV
return M;
}
4. Ecrire la fonction emission sachant que l’on envoie d’abord les bits de poids faible de l’entier.
void emission()
{
S0TBUF=valeur & 0x00FF;
WAIT_UNTIL_BIT_SET(S0TBIR);
CLR_SFRBIT(S0TBIR);
S0TBUF=(valeur >> 8) & 0x00FF;
WAIT_UNTIL_BIT_SET(S0TBIR);
CLR_SFRBIT(S0TBIR);
}
3
Mesure de période
On utilise l’unité CAPCOM1 en mode capture pour mesurer la période d’un signal TTL. Le
signal est connecté à la broche CC4IO du C167 et le timer T1 est utilisé sans rechargement (T1REL=0).
La mesure de la période se fait entre deux fronts descendants du signal. Après la capture permettant
de déterminer la période, T1 est réinitialisé à 0 pour la capture suivante.
3.1
Initialisations
1. On choisit la résolution de T1 permettant d’obtenir la meilleure précision. Quelle est cette
résolution? et quelle est la période maximale que l’on peut mesurer sans débordement de T1?
Résolution min: 400ns
Période max: 26,2ms
2. Quelle est la période minimale (et donc la fréquence maximale) mesurable sachant que l’on
veut une précision meilleure que 1%?
Période min=100 x 400ns=40 µs
Fréquence max=1/Période min=25 kHz
3. Quels sont les registres à programmer pour réaliser la capture sachant que l’on veut générer
une interruption de niveau 5 (groupe 0) sur chaque front descendant du signal à mesurer?
Quelles sont les initialisations nécessaires de ces registres?
CCM1=0x0A
CC4IC=0x54
T01CON=0x4000 (T1R=1)
3.2
Mesure
On suppose que l’interruption provoquée par un front descendant du signal à mesurer correspond
à la fois à la fin d’une période (et donc à sa mesure) et au début d’une nouvelle période.
IUP SI 1
Examen Architecture des calculateurs
26 Avril 2004
Donner le code de la fonction d’interruption correspondante. Le résultat (fréquence du signal)
exprimé en Hertz sera stocké dans la variable globale float FREQ.
void mesure()
{
FREQ=2.5E6/CC4;
T1=0;
}
4
Signal PWM
On souhaite générer un signal périodique, dont une période est représentée sur la figure suivante,
en utilisant l’unité PWM du C167.
84ms
2ms
100ms
1. Quel est le mode de fonctionnement de PWM qui permet de générer un signal de ce type?
Sur quel bit de quel port peut-on récupérer le signal?
Il faut utiliser les canaux 0 et 1 en mode rafale. La sortie se fait sur POUT0
(P7.0). On choisit une résoultion de 3, 2µs
2. Donner la programmation des registres de contrôle PWMCON0 et PWMCON1 de l’unité
PWM permettant de générer ce signal.
PWCON0=0x0013 (PT0=1, PT1=0, PTR0=1, PTR1=1)
PWMCON1=0x1001 (PEN0=1, PM0=PM1=0, PB01=1)
3. Déterminer les valeurs à donner aux différents registres PPx et PWx utilisés. Justifier vos
réponses.
P P 0 = 100ms
3,2µs − 1 = 31249 (Période=100ms)
2ms
− 1 = 39999 (Période=2ms)
P P 1 = 3,2µs
84
P W 0 = 100 (P P 0 + 1) = 26250 (Rapport cyclique=0,16)
P W 1 = P P21+1 = 20000 (Rapport cyclique=0,5)
Téléchargement