Architecture des Systèmes à Processeur

Transcription

Architecture des Systèmes à Processeur
Architecture des Systèmes à
Processeur
Prof. M.Starkier – Assistante E.Lolivier-Exler
Labo Périphériques Partie 2
1/10/2009 – V4.4
Travail par groupe de 2 / 12 périodes encadrées
Code + rapport à rendre le 16/10/09 / 17H
Objectif du laboratoire
Voir le document de la partie 1.
Fichiers et documents fournis
Chargez et décompressez dans le répertoire Etudiants le dossier compressé labo_ASP_perif2
.tar.gz mis à disposition sur le site du reds dans Formations/Bachelor/ASP/cours_labos ou
directement à http://www.reds.ch/Formations/ASP.
Ce dossier contient les fichiers suivants (voir informations ci-dessous) :
aitc.h
définitions du contrôleur d’interruption
timer.h
définitions du timer
crt0_arm.s
nouvelle version de ce fichier avec déclaration d’une deuxième pile pour les
interruptions
Travail à effectuer
AVANT DE COMMENCER
1- Créer un nouveau répertoire de projet « labo_perif2 ». Copiez vos fichiers du labo précédent.
2- Ajoutez les fichier aitc.h et timer.h, puis remplacez le fichier crt0_arm.s par la nouvelle version
fournie (qui initialise la pile d’interruption).
3- Ajouter au début du fichier main.c la déclaration de la pile d’interruption :
unsigned long AppStack_irq[APPSTACKSIZE/4];
-1
-
ASP – Architecture des systèmes à processeur - Laboratoire périphériques
Note importante – librairies standards :
Pour pouvoir accéder aux librairies standard du C stdio et stdlib (fonctions d’affichage texte, de
conversion, de génération de nombres aléatoires, ...), vous devez modifier le makefile de la façon
suivante :
Ajoutez la ligne suivante :
LIBGCC = `$(CC) --print-libgcc-file-name`
et ajoutez $(LIBGCC) à la fin de la ligne d’arguments du linker (ligne commençant par $(LD))
Etape 3 : Interruption par GPIOs
Le programme à réaliser a pour fonction de détecter l'appui sur le bouton SW2 et de basculer la
led LED1 en utilisant le mécanisme d’interruption (allumage avec un appui, extinction avec un
second appui).
Ecrire les fonctions ou inits dans le fichier interface_toolbox.c, ainsi que la routine d’interruption
et l’initialisation des interruptions dans le fichier init.c.
Informations :
Les registres GPIO doivent être configurés (dans une fonction GPIO_init par exemple) pour
générer une interruption sur appui du bouton.
Vous devez créer une routine d’interruption sous forme d’une fonction :
void isr_lenomdevotrechoix(void) que vous placez dans le fichier init.c. Cette fonction doit
contenir au début la ligne de code asm("stmfd sp!,{r0,r1,r2,r3,r4,r5,r6,r7}"); (sauvegarde des
registres) et à la fin la ligne asm("ldmfd sp!,{r0,r1,r2,r3,r4,r5,r6,r7}"); (restauration des
registres). Cette fonction doit aussi contenir une instruction qui acquitte (« nettoie ») l’interruption
à la source.
Vous devez ensuite créer une fonction int_init dans init.c. Cette fonction doit contenir :
- L’initialisation du vecteur d’interruption : déclarez un pointeur int, donner lui l’adresse 0xffffff00
(avec un cast en int*) et initialisez le avec l’adresse de la routine d’interruption (le nom de la
routine – sans void – casté en int).
- Les initialisations de l’AITC
- Le code suivant (à la fin) – qui active les interruptions en modifiant le bit I du registre CPSR :
asm("mrs r6,cpsr");
asm("bic r6,r6,#0xff");
asm("orr r6,r6,#0x53");
asm("msr cpsr_c,r6");
qui doit être suivi par l’instruction de retour asm("subs pc,lr,#4");
Note :
Utilisez les defines des divers points h pour accéder aux registres.
-2-
ASP – Architecture des systèmes à processeur - Laboratoire périphériques
1- Lire le chapitre 5 (AITC) du manuel de l'iMX21.
2- Ecrire les fonctions.
3- Testez le programme sous Eclipse.
Etape 4 : Mise en œuvre d’un timer
Le programme à réaliser a pour fonction de mesurer le temps écoulé entre l’allumage d’une led et
l’appui sur un bouton à l’aide d’un timer.
Ecrire les fonctions d’initialisation et d’accès aux timers dans le fichier interface_toolbox.c
1. Lire le chapitre 15 (GPT) du manuel de l'iMX21
2. Ecrire la fonction d’initialisation timer_init, et des fonctions d’accès au timer si nécessaire.
3. Le programme doit déclencher un timer à l’allumage de la led. A l'arrivée de l'interruption, la
valeur du timer sera stockée dans une variable. Testez le programme sous Eclipse et
visualisez la valeur de la variable.
Etape 5 : Application : Jeu mesure temps de réaction
Vous devez réaliser le programme d’un jeu « mesure du temps de réaction » :
Le joueur presse un bouton start, une led s’allume après un temps aléatoire, le joueur appuie le
plus vite possible sur un bouton dès que la led s’allume et le temps de réaction en ms s’affiche
sur l’écran LCD.
Ecrire le programme dans le fichier applications.c ((avec les déclarations dans applications.h). Ce
programme sera appelé à partir du main.
1.
Concevoir une interface utilisateur simple. Ecrire les fonctions.
2. Testez le programme sous Eclipse.
Si vous avez du temps, quelques possibilités de développements supplémentaires (qui vous
apporteront un bonus de points).
-
Plusieurs tailles de caractères sur l’écran
Gestion de fenêtres sur l’écran
Amélioration du jeu => utilisation des deux boutons en demandant par exemple de
rentrer une séquence aléatoire fournie le plus rapidement possible.
Si vous avez une autre idée, proposez-la au professeur.
N’oubliez pas de sauvegarder votre répertoire workspace qui vous sera nécessaire pour le
prochain labo. Le répertoire étudiant est effacé à chaque extinction de machine.
-3-