Grazie per le risposte....si come hai detto tu il codice corrisponde a un programmino che gestisce dei led in una scheda fox:
http://www.areasx.com/index.php?D=1&id=8124
codice:
#include "stdio.h"
#include "unistd.h"
#include "sys/ioctl.h"
#include "fcntl.h"
#include "time.h"
#include "asm/etraxgpio.h"
#define LED_1 1<<25
#define LED_2 1<<24
#define LED_3 1<<0
#define IO_SETGET_OUTPUT 0x13
int main(void) {
int fda;
int fdg;
int iomask_a;
int iomask_b;
int iomask_g;
int i;
if ((fda = open("/dev/gpioa", O_RDWR))<0) {
printf("ERRORE nell'apertura di /dev/gpioa\n");
return 1;
}
if ((fdg = open("/dev/gpiog", O_RDWR))<0) {
printf("ERRORE nell'apertura di /dev/gpiog\n");
return 1;
}
iomask_a = LED_3;
ioctl(fda, _IO(ETRAXGPIO_IOCTYPE, IO_SETGET_OUTPUT),&iomask_a);
iomask_g = LED_1 | LED_2;
ioctl(fdg, _IO(ETRAXGPIO_IOCTYPE, IO_SETGET_OUTPUT),&iomask_g);
while (1) {
printf("Test LED\n");
ioctl(fdg, _IO(ETRAXGPIO_IOCTYPE, IO_SETBITS),LED_1); //LED 1 ON
sleep(1);
ioctl(fdg, _IO(ETRAXGPIO_IOCTYPE, IO_CLRBITS),LED_1); //LED 1 OFF
sleep(1);
ioctl(fdg, _IO(ETRAXGPIO_IOCTYPE, IO_SETBITS),LED_2);
sleep(1);
ioctl(fdg, _IO(ETRAXGPIO_IOCTYPE, IO_CLRBITS),LED_2);
sleep(1);
ioctl(fda, _IO(ETRAXGPIO_IOCTYPE, IO_SETBITS),LED_3);
sleep(1);
ioctl(fda, _IO(ETRAXGPIO_IOCTYPE, IO_CLRBITS),LED_3);
sleep(1);
}
close(fda);
close(fdg);
return 0;
}
quindi se ho capito bene nel mio caso dopo iomask_a=LED_3 avrò in iomask_a una seguenza di 0 tranne il primo bit a 1....e dopo iomask_g = LED_1 | LED_2; in iomask_g avrò il risultato dell'or tra una seguenza di bit a 0 tranne il 25° bit che è posto a 1(macro LED_1) e un'altra seguenza di bit posti a 0 tranne il 24° bit che è posto a 1 (macro LED_2).....giusto?