TP MSP430 n°4

Transcription

TP MSP430 n°4
UNIVERSITE DE LA ROCHELLE – SCIENCES ET TECHNOLOGIE
Master IMA - UE Systèmes Industriels
Acquisition de données
TRAVAUX PRATIQUES
ACQUISITION DE DONNEES PAR UN MSP430
SEANCE 4
Objectif du TP
Mise en place de parties logicielles réutilisables (suite) et programmation du timer en
interruption.
1)
Interruptions du Timer
Le MSP430F449 possède plusieurs temporisateurs (Watchdog, Timer A, Timer B, Basic
Timer…). Nous allons utiliser ici le « Basic Timer » pour générer les délais nécessaires à
toute application, illustrée ici par le clignotement de la LED.
Le principe est le suivant :
- on initialise le timer pour qu’il génère des interruptions à des intervalles pré-déterminés, et
on laisse le processeur exécuter son programme principal (dans notre exercice, ce sera une
boucle infinie simplement).
- Lorsque le timer génère une interruption, le processeur est dérouté vers le programme
d’interruption correspondant. Dans ce programme d’interruption, on se contente d’inverser
l’état de la LED par une opération de type XOR.
- Fin d’interruption (par l’instruction RETI) : on revient au programme principal, dans
lequel on peut faire ce qu’on veut jusqu’à la prochaine interruption.
Fonctionnement du Basic Timer :
Ce temporisateur est un périphérique organisé autour de 2 compteurs 8 bits pouvant être
cascadés en 1 compteur 16 bits :
On voit en effet sur le schéma précédent que l’entrée d’horloge ACLK peut être divisée par
256 par le 1er compteur 8 bits et être connectée au second compteur.
Le timer se programme par l’intermédiaire de 3 registres :
Rôle du registre de contrôle BTCTL :
Les bits FRFQ1 et FRFQ0 sont utilisés pour les afficheurs de type LCD.
Les bits IP2-IP1-IP0 détermine la fréquence des interruptions en fonction de la fréquence du
signal de sortie du 2ème compteur (voir schéma) :
IP2-IP1-IP0 = 000 -> fréquence des interruptions = fréquence de sortie / 2
…
IP2-IP1-IP0 = 111 -> fréquence des interruptions = fréquence de sortie / 256
Les bits SSEL et DIV fonctionnent ensemble selon le tableau suivant :
Le bit Hold permet d’inhiber le fonctionnement du timer.
Interruptions du timer :
Elles sont sous le contrôle de 2 bits :
Basic Timer Interrupt Flag BTIFG (bit 7 du register SFR IFG2)
Basic Timer Interrupt Enable BTIE (bit 7 du register SFR IE2)
Les Registres de Fonctions Spéciales (SFR) concernés sont les suivants :
Registre IFG2 :
Registre IE2 :
Le bit BTIE doit être à 1 pour autoriser les interruptions en provenance du timer. Lorsqu’une
interruption a lieu, le bit BTIFG (flag) passe à 1 signalant l’origine de l’interruption.
On cherchera le vecteur du Basic Timer dans la table de vecteurs du MSP430.
Etudier le programme fourni tp4.s43 où l’on trouvera toute la partie initialisation du timer.
Charger dans la table des vecteurs l’adresse de la routine d’interruption. Ecrire un programme
principal interrompu au bout du délai programmé.
Dans la routine d’interruption, on se contentera d’inverser le niveau de la LED par une
instruction XOR.
2) Conversion binaire - décimal
Dans cet exercice, nous allons préparer la manipulation de la séance prochaine dans
laquelle nous ferons l’acquisition d’une valeur fournie par un CAN sur 12 bits (issue d’une
mesure de température) et l’afficherons sous forme d’un nombre décimal.
On considère un nombre entier 12 bits non signé, c'est-à-dire compris entre 0x0000 et
0x0FFF.
Ecrire le programme de conversion hexa -> décimal de la manière suivante :
- on mettra le nombre N à convertir, dans un registre.
- initialiser à 0, 4 octets en mémoire, qui contiendront à l’issue de la conversion, le nombre de
milliers, de centaines, de dizaines, et d’unités.
- tant que le résultat est positif, soustraire 1000 au nombre N, incrémenter le nombre de
milliers à chaque soustraction,
- soustraire au reste de l’étape précédente, le nombre 100. Tant que la soustraction donne un
résultat positif, incrémenter le compteur de centaines,
- idem pour les dizaines. Le reste positif de cette étape forme les chiffres des unités.
Pour vérification, les 4 octets du résultat seront envoyés sur les afficheurs 7 segments de la
matrice LCD par le programme écrit à la séance précédente.