====== GPIO ====== ===== Pilotage par le système de fichier ===== ligne GPIOi_j correspond au numéro NUM = i * 32 + j ainsi GPIO1_6 correspond à 38 = 1 * 32 + 6. ''echo NUM > /sys/class/gpio/export'' -- contrôle de ligne NUM par le GPIO ''echo out > /sys/class/gpio/gpioNUM/direction'' -- activation de la ligne en sortie ''echo in > /sys/class/gpio/gpioNUM/direction'' -- activation de la ligne en entrée ''echo 1 > /sys/class/gpio/gpioNUM/value'' -- mise à 1 de la ligne NUM ''echo 0 > /sys/class/gpio/gpioNUM/value'' -- mise à 0 de la ligne NUM ''cat /sys/class/gpio/gpioNUM/value'' -- lecture de la valeur en entrée de ligne NUM ===== Pilotage en C par projection en mémoire ===== Si vous disposez des droits suffisants, vous pouvez projeter n'importe quelle partie de l'espace physique d'adressage dans votre adressage virtuel. Vous ne pourrez cependant pas choisir l'adresse virtuelle où sera projeté la mémoire physique. Pour ce faire, il faut utiliser: * ''/dev/mem'' -- le device correspondant à la mémoire physique, * ''mmap()'' -- la fonction Posix permettant l'opération. Il faut d'abord ouvrir le périphérique mémoire : int fd = open("/dev/mem", O_RDWR|O_SYNC); if (fd < 0){ // erreur! } Puis, sachant que les registres de notre périphérique sont à l'adresse GPIO_BASE, il faudra réaliser : gpio_base =(gpio_t *) mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_BASE); if(gpio == (void *) -1) { // erreur! } Désormais, vous pourrez trouver à l'adresse contenue dans ''gpio_base'' les registres matériels du GPIO visé. Bien sûr, il faudra déclarer vous-même la structure de donnée gpio_t et trouver dans la documentation l'adresse de base du GPIO qui vous intéresse. **ATTENTION** Les adresses de base données à ''mmap'' doivent êtres des multiples de taille de page sous Linux. En l'occurence, la taille de page est ici de 4Ko. ===== References ===== * [[http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/gpio.txt?id=HEAD|documentation in Linux kernel]] * [[http://stackoverflow.com/questions/17831367/beaglebone-am335x-accessing-gpio-by-mmap-set-and-clear-pin|Pilotage GPIO en C par projection en mémoire]]