Projet

Général

Profil

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 &#8776; 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