150 | | cp -rp /users/enseig/franck/peri/lab1 . |
151 | | }}} |
152 | | * Éditez le fichier lab1.c et ajoutez le code que vous pensez nécessaire à la réalisation de cet exercice.\\ |
153 | | ATTENTION: ne changez pas les valeurs de GPIO_LED0, car vous risqueriez d'endommager la carte !RaspberryPi. |
154 | | * Ensuite, compilez-le grâce au Makefile (**Vous devez l'adapter**) qui vous est fourni. |
155 | | Qu'observez-vous ? Essayez de changer la fréquence de clignotement. |
156 | | |
157 | | {{{#!protected |
158 | | Il faut juste mettre leur nom dans leur Makefile |
159 | | }}} |
160 | | |
161 | | == 2.3. Contrôle de plusieurs GPIO en mode "sortie" == |
162 | | |
163 | | Refaites le même exercice que précédemment, mais cette fois-ci configurez plusieurs GPIO en sorties. |
164 | | * La LED0 est connectée sur le GPIO 4, **la LED1 est connectée sur le GPIO 17**. Faites clignoter les deux LEDs. |
165 | | * Avant d'exécuter votre programme, vérifiez parce que le matériel est fragile, pour pouvez faire valider votre code avec le chargé de TP. |
166 | | |
167 | | Vous devez faire clignoter les deux LEDs a des fréquences différentes et, si possible, parametrable par des arguments en ligne de commandes. |
168 | | Je vous conseille de créer une thread par LED |
169 | | |
170 | | == 2.4. Lecture de la valeur d'une entrée GPIO == |
| 149 | cp -rp /users/enseig/franck/IOC/lab1 . |
| 150 | }}} |
| 151 | * Éditez le fichier blink0.c\ |
| 152 | ATTENTION: ne changez pas les valeurs de GPIO_LED0, GPIO_LED1 et GPIO_BP, car vous risqueriez d'endommager la carte !RaspberryPi. |
| 153 | * Ensuite, compilez-le grâce au Makefile (**Vous devez l'adapter à votre carte et vos noms**) qui vous est fourni. |
| 154 | Qu'observez-vous ? Changer la fréquence de clignotement. |
| 155 | |
| 156 | **Questions sur le code de blink0.c **:: |
| 157 | 1. A quoi correspond l'adresse `BCM2835_GPIO_BASE` ? |
| 158 | 1. Que représente la structure `struct gpio_s` ? |
| 159 | 1. Dans quel espace d'adressage est l'adresse `gpio_regs` ? |
| 160 | 1. Dans la fonction `gpio_fsel()`, que contient la variable reg ? |
| 161 | 1. Dans la fonction `gpio_write()`, pourquoi écrire à deux adresses différentes en fonction de la valeur val ? |
| 162 | 1. Dans la fonction `gpio_mmap()`, à quoi correspondent les flags de open ? |
| 163 | 1. Dans la fonction `gpio_mmap()`, commentez les arguments de mmap. |
| 164 | 1. Que fait la fonction `delay()` ? |
| 165 | |
| 166 | == 2.4. Contrôle de plusieurs GPIO en mode "sortie" == |
| 167 | |
| 168 | Vous allez maintenant faire clignoter deux leds à des fréquences différentes et paramétrables sur la ligne de commande. Pour tous les exercices ci-après, vous devez changer votre Makefile en ajoutant les programmes à compiler. |
| 169 | |
| 170 | * Commencez par faire une copie du fichier `Blink0.c` en `blink0_pt.c`. Vous allez créer un thread Posix dans `blink0_pt.c` pour faire clignoter une led, c'est donc le même comportement que blink0 avec un pthread pour la partie `// Blink led ...` (à la fin de `main()`). |
| 171 | * Faites ensuite une une copie du fichier `Blink0_pt.c` en `blink01_pt.c`et faites clignoter les deux LEDs en utilisant deux pthreads. |
| 172 | |
| 173 | |
| 174 | == 2.5. Lecture de la valeur d'une entrée GPIO == |
173 | | Écrivez un programme qui configure la GPIO 18 en entrée. Vous devez afficher la valeur de ce GPIO dans une boucle infinie. |
174 | | |
175 | | * Une fois réalisé, compilez votre programme comme précédemment à l'aide du Makefile fourni. |
176 | | * Ensuite, copiez votre programme sur la carte comme indiqué dans l'exercice précédent. |
177 | | |
178 | | On veut détecter l'appui sur le bouton poussoir. Pour cela, vous allez lire sa valeur périodiquement toutes les 20ms. L'appui ou le relâchement correspond est présent quand deux valeurs lues successivement sont différentes. Quand le bouton n'est pas enfoncé, la valeur de la broche est à 1. La structure du programme suggéré. |
| 177 | |
| 178 | * Écrivez un programme `read_bp.c` qui configure la GPIO 18 en entrée (là où est connecté le bouton poussoir) et qui affiche la valeur de ce GPIO dans une boucle infinie. |
| 179 | * On veut maintenant détecter l'appui sur le bouton poussoir. Pour cela reprenez le programme `blink01_pt.c` et faite une copie en `blink01_bp_pt.c`. Dans un pthread, vous allez lire la valeur du bouton périodiquement toutes les 20ms. L'appui ou le relâchement est présent quand deux valeurs lues successivement sont différentes. Quand le bouton n'est pas enfoncé, la valeur de la pin est à 1. La structure du programme suggéré. |