Hola
¿Puede asociarse una interrupcion a cualuier linea GPIO?
Estoy trasteando con un Huawey HG556a RevC , y despues de soldar los cables para los GPIO25 y GPIO29 (no usados) queria configurar uno de ellos como entrada capaz de detectar un pulso, pero no hay manera.
No me refiero a usar scripts para ello, sino a usar un módulo en C que lo haga.
De hecho, el módulo es el "famoso" de Derek Molloy para la BeagleBoneBlack:
http://derekmolloy.ie/beaglebone/beaglebone-gpio-programming-on-arm-embedded-linux/pero compilado para mi OpenWrt (CHAOS CALMER 15.05, r46767). Este modulo enciende un led cuando uno pulsa un botón, asi que usa un GPIO de entrada y otro de salida.
Al cargar el modulo en el router, mediante los comandos sobre el /sys/class/gpio/...etc puedo ver que efectivamente los GPIO se comportan como deben, con el GPIO497 (base=472 + gpio=25) de salida encendiendo el LED, y con el GPIO501 (472+29) de entrada detectando cuando tengo el cable conectado a masa o no (con una R=270Ohm)
El problema viene en que esta parte de codigo deberia asociar una interrupcion al GPIO de entrada,para evitar hacer polling detectando cuando cambia su valor:
irqNumber = 11; // gpio_to_irq(gpioButton); --> No funciona
printk(KERN_INFO "EBB Button: The button %d is mapped to IRQ: %d\n", gpioButton,irqNumber);
if(!isRising){
IRQflags = IRQF_TRIGGER_FALLING;
}
result = request_irq(irqNumber,
(irq_handler_t) ebbgpio_irq_handler, --> manejador de la interrupcion
IRQflags,
"ebb_button_handler",
NULL); aunque crea correctamente la interrupcion (se ve en /proc/interrupts) , no hace que se llame al manejador en ningun momento. Vamos, que es como si no existiera.
Por otra parte, la llamada a gpio_to_irq(gpioButton) no funciona, y devuelve siempre -1, asi que viendo que la IRQ=11 no estaba usada, le he puesto esa a cascoporro,y el modulo se carga pero cuando pongo el cablecito del gpioButton a masa, nada, la interrupcion no se genera, aunque el cat /sys/class/gpio/gpio501/value si devuelve 0o 1 como debe.
Esto me lleva a preguntarme ¿
Puede ser que para esta CPU bcm63XX resulte que no haya posibilidad de hacer que una linea GPIO produzca una interrupcion mas que para solo unos pocos GPIO ? ¿O siempre se puede asociar una interrupcion no usada a cualquier GPIO no usado?
Perdón por el tocho, pero sois mi unica esperanza...;-)