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 ≈ 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 |