Projet

Général

Profil

Programmation sous Linux » Historique » Version 22

Patrice Nadeau, 2014-08-16 20:17

1 4 Patrice Nadeau
%{font-size:18pt}Programmation sous Linux%
2 1 Patrice Nadeau
3 3 Patrice Nadeau
h1. GPIO(General Purpose Input/Output)
4 5 Patrice Nadeau
5
Un petit calcul doit-être fait pour déterminer la correspondance entre le nom BBB et celui sous Linux.
6
7
8
Télécharger le "System Reference Manual":http://elinux.org/Beagleboard:BeagleBoneBlack#Hardware_Files
9
10
La section *PRU-ICSS Pin Access* est celle qui nous intéresse.
11
12 20 Patrice Nadeau
Le calcul est le suivant :
13 5 Patrice Nadeau
Multiplier le numéro du chip par 32 et ajouter le numéro de la pin.
14 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).
15 7 Patrice Nadeau
16 12 Patrice Nadeau
L'utilisation d'une pin se fait en 4 étapes
17 11 Patrice Nadeau
# Exporter la pin
18
# Choisir la direction
19
# Choisir la valeur
20
# Enlever l'export de la pin
21
22 7 Patrice Nadeau
h2. Ligne de commande
23
24 12 Patrice Nadeau
Exporter la pin 
25 7 Patrice Nadeau
<pre><code class="bash">
26 9 Patrice Nadeau
echo 44 > /sys/class/gpio/export
27 7 Patrice Nadeau
</code></pre>
28
29
Un dossier _gpio44_ existe maintenant.
30
31
Le fichier *direction* sélectionne le mode d'utilisation de la pin :
32
* *in* : Entré
33
* *out* : Sortie
34 1 Patrice Nadeau
35 8 Patrice Nadeau
<pre><code class="bash">
36 17 Patrice Nadeau
echo out > /sys/class/gpio/gpio44/direction
37 8 Patrice Nadeau
</code></pre>
38
39
40
Le fichier *value* sélectionne la valeur de la pin :
41
* *0* : Low
42 1 Patrice Nadeau
* *1* : High
43
44
<pre><code class="bash">
45 9 Patrice Nadeau
echo 1 > /sys/class/gpio/gpio44/value
46
</code></pre>
47
48 13 Patrice Nadeau
Une fois terminé, on doit enlever le « export » de la pin
49 9 Patrice Nadeau
<pre><code class="bash">
50 21 Patrice Nadeau
echo 44 > /sys/class/gpio/unexport
51 8 Patrice Nadeau
</code></pre>
52 10 Patrice Nadeau
53
h2. C
54 14 Patrice Nadeau
55 15 Patrice Nadeau
La librairie _stdio.h_ seras utilisée avec les fonctions :
56
* fopen()
57
* fwrite()
58
* fclose()
59 16 Patrice Nadeau
60 18 Patrice Nadeau
Code
61
> Aucune vérification d'erreur I/O n'est faite dans cette exemple !
62 16 Patrice Nadeau
<pre><code class="c">
63
#include <stdio.h>
64
65 1 Patrice Nadeau
int main(void)
66 18 Patrice Nadeau
{
67 19 Patrice Nadeau
    FILE *fp;
68 1 Patrice Nadeau
69 19 Patrice Nadeau
    /* Export */
70
    fp = fopen("/sys/class/gpio/export","w");
71
    fwrite("44", sizeof(char), 2, fp);
72
    fclose(fp);
73 18 Patrice Nadeau
74 19 Patrice Nadeau
    /* Direction */
75
    fp = fopen("/sys/class/gpio/gpio44/direction","w");
76
    fwrite("out", sizeof(char), 3, fp);
77
    fclose(fp);
78 18 Patrice Nadeau
79 19 Patrice Nadeau
    /* Value */
80
    fp = fopen("/sys/class/gpio/gpio44/value","w");
81
    fwrite("1", sizeof(char), 1, fp);
82
    fclose(fp);
83 18 Patrice Nadeau
}
84 16 Patrice Nadeau
</code></pre>