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