Projet

Général

Profil

Programmation sous Linux » Historique » Version 24

Patrice Nadeau, 2014-08-17 09:52

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