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-