Projet

Général

Profil

Programmation sous Linux » Historique » Version 37

Patrice Nadeau, 2014-10-24 12:20

1 37 Patrice Nadeau
h1. 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 37 Patrice Nadeau
h2. Introduction
10 33 Patrice Nadeau
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 37 Patrice Nadeau
h2. 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 37 Patrice Nadeau
h3. Ligne de commande
39 7 Patrice Nadeau
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 37 Patrice Nadeau
h3. 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 37 Patrice Nadeau
h2. 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 &#8776; 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 37 Patrice Nadeau
h3. Ligne de commande
105 32 Patrice Nadeau
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 37 Patrice Nadeau
h2. Sortie analogique (PWM(Pulse Width Modulation))
115 26 Patrice Nadeau
116
> Voir issue #12