Projet

Général

Profil

Programmation sous Linux » Historique » Version 33

Patrice Nadeau, 2014-08-17 11:22

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
17
18 3 Patrice Nadeau
h1. GPIO(General Purpose Input/Output)
19 5 Patrice Nadeau
20
Un petit calcul doit-être fait pour déterminer la correspondance entre le nom BBB et celui sous Linux.
21
22
23
Télécharger le "System Reference Manual":http://elinux.org/Beagleboard:BeagleBoneBlack#Hardware_Files
24
25
La section *PRU-ICSS Pin Access* est celle qui nous intéresse.
26
27 20 Patrice Nadeau
Le calcul est le suivant :
28 5 Patrice Nadeau
Multiplier le numéro du chip par 32 et ajouter le numéro de la pin.
29 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).
30 7 Patrice Nadeau
31 12 Patrice Nadeau
L'utilisation d'une pin se fait en 4 étapes
32 11 Patrice Nadeau
# Exporter la pin
33
# Choisir la direction
34
# Choisir la valeur
35
# Enlever l'export de la pin
36
37 7 Patrice Nadeau
h2. Ligne de commande
38
39 12 Patrice Nadeau
Exporter la pin 
40 7 Patrice Nadeau
<pre><code class="bash">
41 9 Patrice Nadeau
echo 44 > /sys/class/gpio/export
42 7 Patrice Nadeau
</code></pre>
43
44
Un dossier _gpio44_ existe maintenant.
45
46
Le fichier *direction* sélectionne le mode d'utilisation de la pin :
47
* *in* : Entré
48
* *out* : Sortie
49 1 Patrice Nadeau
50 8 Patrice Nadeau
<pre><code class="bash">
51 17 Patrice Nadeau
echo out > /sys/class/gpio/gpio44/direction
52 8 Patrice Nadeau
</code></pre>
53
54
55
Le fichier *value* sélectionne la valeur de la pin :
56
* *0* : Low
57 1 Patrice Nadeau
* *1* : High
58
59
<pre><code class="bash">
60 21 Patrice Nadeau
echo 1 > /sys/class/gpio/gpio44/value
61 8 Patrice Nadeau
</code></pre>
62 10 Patrice Nadeau
63
Une fois terminé, on doit enlever le « export » de la pin
64 14 Patrice Nadeau
<pre><code class="bash">
65 15 Patrice Nadeau
echo 44 > /sys/class/gpio/unexport
66
</code></pre>
67
68
h2. C
69 16 Patrice Nadeau
70 18 Patrice Nadeau
Code
71
> Aucune vérification d'erreur I/O n'est faite dans cette exemple !
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 30 Patrice Nadeau
La lecture est faite à partir 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 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