Programmation sous Linux » Historique » Révision 30
Révision 29 (Patrice Nadeau, 2014-08-17 10:44) → Révision 30/37 (Patrice Nadeau, 2014-08-17 10:49)
%{font-size:18pt}Programmation sous Linux%
> Mon BBB (révision C) roule sous Debian 7 (wheezy)
----
{{TOC}}
h1. GPIO(General Purpose Input/Output)
Un petit calcul doit-être fait pour déterminer la correspondance entre le nom BBB et celui sous Linux.
Télécharger le "System Reference Manual":http://elinux.org/Beagleboard:BeagleBoneBlack#Hardware_Files
La section *PRU-ICSS Pin Access* est celle qui nous intéresse.
Le calcul est le suivant :
Multiplier le numéro du chip par 32 et ajouter le numéro de la pin.
>Exemple : Pour utiliser la pin 12 du connecteur P8 (GPIO1_12), le signal correspondant sous Linux est le *44* (1 x 32 + 12 = 44).
L'utilisation d'une pin se fait en 4 étapes
# Exporter la pin
# Choisir la direction
# Choisir la valeur
# Enlever l'export de la pin
h2. Ligne de commande
Exporter la pin
<pre><code class="bash">
echo 44 > /sys/class/gpio/export
</code></pre>
Un dossier _gpio44_ existe maintenant.
Le fichier *direction* sélectionne le mode d'utilisation de la pin :
* *in* : Entré
* *out* : Sortie
<pre><code class="bash">
echo out > /sys/class/gpio/gpio44/direction
</code></pre>
Le fichier *value* sélectionne la valeur de la pin :
* *0* : Low
* *1* : High
<pre><code class="bash">
echo 1 > /sys/class/gpio/gpio44/value
</code></pre>
Une fois terminé, on doit enlever le « export » de la pin
<pre><code class="bash">
echo 44 > /sys/class/gpio/unexport
</code></pre>
h2. C
La librairie _stdio.h_ seras utilisée avec les fonctions :
* fopen()
* fwrite()
* fclose()
Code
> Aucune vérification d'erreur I/O n'est faite dans cette exemple !
<pre><code class="c">
#include <stdio.h>
int main(void)
{
FILE *fp;
/* Export */
fp = fopen("/sys/class/gpio/export","w");
fwrite("44", sizeof(char), 2, fp);
fclose(fp);
/* Direction */
fp = fopen("/sys/class/gpio/gpio44/direction","w");
fwrite("out", sizeof(char), 3, fp);
fclose(fp);
/* Value */
fp = fopen("/sys/class/gpio/gpio44/value","w");
fwrite("1", sizeof(char), 1, fp);
fclose(fp);
}
</code></pre>
h1. Entré analogique
> Voir issue #11
La lecture est faite à partir de 1.8 Volts en incréments de ≈ 1 mV (de 0 @ 1798).
Activer les ports ADC
<pre><code class="bash">
echo cape-bone-iio > /sys/devices/bone_capemgr.9/slots
</code></pre>
Les différents ports (8) sont maintenant disponibles à _/sys/devices/ocp.2/helper.15_
La lecture peut être faite directement avec la commande _cat_
h1. Sortie analogique (PWM(Pulse Width Modulation))
> Voir issue #12