/* * This programmer uses AT91' GPIO lines * * 2006 by Carlos Camargo * 2007.May.10 Andres Calderon * 2009.Aug.26 Jose Francisco Quenta */ #include #include #include #include #include #include #include #include #include "./Librerias/AT91gpio_Funciones.h" void pio_out(AT91S_PIO * pio, int mask, unsigned long val, int opcion) { if (opcion == 1) pio->PIO_SODR = mask & val; else pio->PIO_CODR = mask & val; } int pio_in(AT91S_PIO * pio, int mask) { return (pio->PIO_PDSR & mask); } AT91S_PIO *pio_map(unsigned int piobase) { int fd; void *base; AT91S_PIO *pio; off_t addr = piobase; if ((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) { fprintf(stderr, "Cannot open /dev/mem.\n"); exit(EXIT_FAILURE); } fprintf(stderr, "/dev/mem opened.\n"); base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, addr & ~MAP_MASK); if (base == (void *) -1) { fprintf(stderr, "Cannot open /dev/mem.\n"); exit(EXIT_FAILURE); } fprintf(stderr, "Memory mapped at address %p.\n", base); pio = base + (addr & MAP_MASK); return pio; } void pio_enable(AT91S_PIO * pio, int mask) { pio->PIO_PER = mask; /* Enable PIO */ } void pio_output_enable(AT91S_PIO * pio, int mask) { pio->PIO_OER = mask; /* Set TDI, TMS and TCK as outputs */ } void pio_input_enable(AT91S_PIO * pio, int mask) { pio->PIO_ODR = mask; /* Set TDO as input */ pio->PIO_IFER = mask; /* Enable Input Filter */ } void pio_disable_irq(AT91S_PIO * pio, int mask) { pio->PIO_IDR = mask; /* Disable pin interrupts */ } void pio_disable_multiple_driver(AT91S_PIO * pio, int mask) { pio->PIO_MDDR = mask; /* Disable Multiple Diver */ } void pio_disable_pull_ups(AT91S_PIO * pio, int mask) { pio->PIO_PUDR = mask; /* Disable Pull-Ups */ } void pio_synchronous_data_output(AT91S_PIO * pio, int mask) { pio->PIO_OWDR = mask; /* Synchronous Data Output Write in PIO_ */ }