Programmation sous Linux » Historique » Révision 35
Révision 34 (Patrice Nadeau, 2014-08-17 11:23) → Révision 35/37 (Patrice Nadeau, 2014-08-17 11:24)
%{font-size:18pt}Programmation sous Linux% > Mon BBB (révision C) roule sous Debian 7 (wheezy) ---- {{TOC}} h1. Introduction En Linux, tout est un fichier. Dans les exemple en C, la librairie _stdio.h_ seras utilisée avec les fonctions : * fopen() * fwrite() * fclose() > Aucune vérification d'erreur I/O n'est faite dans ces exemples ! 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 Code <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). Il y a 8 ports (AIN0 @ AIN7) mais AIN7 n'est pas disponible sur les connecteurs. h2. Ligne de commande Activer les ports ADC <pre><code class="bash"> # Activate ADC ports echo cape-bone-iio > /sys/devices/bone_capemgr.9/slots # Read the value in AIN1 cat /sys/devices/ocp.2/helper.15/ANI1 </code></pre> h1. Sortie analogique (PWM(Pulse Width Modulation)) > Voir issue #12