Programmation sous Linux » Historique » Version 36
Patrice Nadeau, 2014-08-23 17:51
| 1 | 4 | Patrice Nadeau | %{font-size:18pt}Programmation sous Linux% |
|---|---|---|---|
| 2 | 1 | Patrice Nadeau | |
| 3 | 26 | Patrice Nadeau | > Mon BBB (révision C) roule sous Debian 7 (wheezy) |
| 4 | 25 | Patrice Nadeau | |
| 5 | 24 | Patrice Nadeau | ---- |
| 6 | |||
| 7 | {{TOC}} |
||
| 8 | |||
| 9 | 33 | Patrice Nadeau | h1. Introduction |
| 10 | |||
| 11 | En Linux, tout est un fichier. |
||
| 12 | Dans les exemple en C, la librairie _stdio.h_ seras utilisée avec les fonctions : |
||
| 13 | * fopen() |
||
| 14 | * fwrite() |
||
| 15 | * fclose() |
||
| 16 | 35 | Patrice Nadeau | > Aucune vérification d'erreur I/O n'est faite dans ces exemples ! |
| 17 | 33 | Patrice Nadeau | |
| 18 | |||
| 19 | 3 | Patrice Nadeau | h1. GPIO(General Purpose Input/Output) |
| 20 | 5 | Patrice Nadeau | |
| 21 | Un petit calcul doit-être fait pour déterminer la correspondance entre le nom BBB et celui sous Linux. |
||
| 22 | |||
| 23 | |||
| 24 | Télécharger le "System Reference Manual":http://elinux.org/Beagleboard:BeagleBoneBlack#Hardware_Files |
||
| 25 | |||
| 26 | La section *PRU-ICSS Pin Access* est celle qui nous intéresse. |
||
| 27 | |||
| 28 | 20 | Patrice Nadeau | Le calcul est le suivant : |
| 29 | 5 | Patrice Nadeau | Multiplier le numéro du chip par 32 et ajouter le numéro de la pin. |
| 30 | 6 | Patrice Nadeau | >Exemple : Pour utiliser la pin 12 du connecteur P8 (GPIO1_12), le signal correspondant sous Linux est le *44* (1 x 32 + 12 = 44). |
| 31 | 7 | Patrice Nadeau | |
| 32 | 12 | Patrice Nadeau | L'utilisation d'une pin se fait en 4 étapes |
| 33 | 11 | Patrice Nadeau | # Exporter la pin |
| 34 | # Choisir la direction |
||
| 35 | # Choisir la valeur |
||
| 36 | # Enlever l'export de la pin |
||
| 37 | |||
| 38 | 7 | Patrice Nadeau | h2. Ligne de commande |
| 39 | |||
| 40 | 12 | Patrice Nadeau | Exporter la pin |
| 41 | 7 | Patrice Nadeau | <pre><code class="bash"> |
| 42 | 9 | Patrice Nadeau | echo 44 > /sys/class/gpio/export |
| 43 | 7 | Patrice Nadeau | </code></pre> |
| 44 | |||
| 45 | Un dossier _gpio44_ existe maintenant. |
||
| 46 | |||
| 47 | Le fichier *direction* sélectionne le mode d'utilisation de la pin : |
||
| 48 | * *in* : Entré |
||
| 49 | * *out* : Sortie |
||
| 50 | 1 | Patrice Nadeau | |
| 51 | 8 | Patrice Nadeau | <pre><code class="bash"> |
| 52 | 17 | Patrice Nadeau | echo out > /sys/class/gpio/gpio44/direction |
| 53 | 8 | Patrice Nadeau | </code></pre> |
| 54 | |||
| 55 | |||
| 56 | Le fichier *value* sélectionne la valeur de la pin : |
||
| 57 | * *0* : Low |
||
| 58 | 1 | Patrice Nadeau | * *1* : High |
| 59 | |||
| 60 | <pre><code class="bash"> |
||
| 61 | 21 | Patrice Nadeau | echo 1 > /sys/class/gpio/gpio44/value |
| 62 | 8 | Patrice Nadeau | </code></pre> |
| 63 | 10 | Patrice Nadeau | |
| 64 | Une fois terminé, on doit enlever le « export » de la pin |
||
| 65 | 14 | Patrice Nadeau | <pre><code class="bash"> |
| 66 | 15 | Patrice Nadeau | echo 44 > /sys/class/gpio/unexport |
| 67 | </code></pre> |
||
| 68 | |||
| 69 | h2. C |
||
| 70 | 16 | Patrice Nadeau | |
| 71 | 18 | Patrice Nadeau | Code |
| 72 | 16 | Patrice Nadeau | <pre><code class="c"> |
| 73 | #include <stdio.h> |
||
| 74 | |||
| 75 | 1 | Patrice Nadeau | int main(void) |
| 76 | 18 | Patrice Nadeau | { |
| 77 | 19 | Patrice Nadeau | FILE *fp; |
| 78 | 1 | Patrice Nadeau | |
| 79 | 19 | Patrice Nadeau | /* Export */ |
| 80 | fp = fopen("/sys/class/gpio/export","w"); |
||
| 81 | fwrite("44", sizeof(char), 2, fp); |
||
| 82 | fclose(fp); |
||
| 83 | 18 | Patrice Nadeau | |
| 84 | 19 | Patrice Nadeau | /* Direction */ |
| 85 | fp = fopen("/sys/class/gpio/gpio44/direction","w"); |
||
| 86 | fwrite("out", sizeof(char), 3, fp); |
||
| 87 | fclose(fp); |
||
| 88 | 18 | Patrice Nadeau | |
| 89 | 19 | Patrice Nadeau | /* Value */ |
| 90 | fp = fopen("/sys/class/gpio/gpio44/value","w"); |
||
| 91 | fwrite("1", sizeof(char), 1, fp); |
||
| 92 | fclose(fp); |
||
| 93 | 18 | Patrice Nadeau | } |
| 94 | 16 | Patrice Nadeau | </code></pre> |
| 95 | 23 | Patrice Nadeau | |
| 96 | h1. Entré analogique |
||
| 97 | 1 | Patrice Nadeau | |
| 98 | 26 | Patrice Nadeau | > Voir issue #11 |
| 99 | |||
| 100 | 36 | Patrice Nadeau | La lecture est faite à partir d'une référence de 1.8 Volts en incréments de ≈ 1 mV (de 0 @ 1798). |
| 101 | 29 | Patrice Nadeau | |
| 102 | 32 | Patrice Nadeau | Il y a 8 ports (AIN0 @ AIN7) mais AIN7 n'est pas disponible sur les connecteurs. |
| 103 | 1 | Patrice Nadeau | |
| 104 | 32 | Patrice Nadeau | h2. Ligne de commande |
| 105 | |||
| 106 | Activer les ports ADC |
||
| 107 | 1 | Patrice Nadeau | <pre><code class="bash"> |
| 108 | 32 | Patrice Nadeau | # Activate ADC ports |
| 109 | 1 | Patrice Nadeau | echo cape-bone-iio > /sys/devices/bone_capemgr.9/slots |
| 110 | 32 | Patrice Nadeau | # Read the value in AIN1 |
| 111 | cat /sys/devices/ocp.2/helper.15/ANI1 |
||
| 112 | 27 | Patrice Nadeau | </code></pre> |
| 113 | |||
| 114 | 1 | Patrice Nadeau | h1. Sortie analogique (PWM(Pulse Width Modulation)) |
| 115 | 26 | Patrice Nadeau | |
| 116 | > Voir issue #12 |