Я разрабатываю модуль ядра для встроенного устройства. Ядром устройства является Toradex iMX6DL.
Итак, у меня есть IO-Expander серии mcp23xxx на этом устройстве, и я могу работать с его GPIO. Я могу установить их как ввод/вывод и получить/установить их значения.
Мне нужно использовать один из них как прерывание, это часть моего кода для установки прерывания:
static irqreturn_t r_irq_handler(unsigned int irq, void *dev_id, struct pt_regs *regs)
{
printk(KERN_DEBUG "interrupt received (irq: %d)\n", irq);
//do some stuff here
return IRQ_HANDLED;
}
...
if(gpio_request(497, 0)==0)
{
int result;
gpio_direction_input(497);
gpio_set_debounce(497, 100);
gpio_export(497,false);
irqNumber =gpio_to_irq(497); // map your GPIO to an IRQ
printk("irq number : %d\r\n",irqNumber);
result = request_irq(irqNumber, // requested interrupt
(irq_handler_t) r_irq_handler, // pointer to handler function
IRQF_TRIGGER_RISING, // interrupt mode flag
"irqHandler", // used in /proc/interrupts
NULL); // the *dev_id shared interrupt lines, NULL is okay
printk("irq request for pin %d result:%d \r\n",497,result);
if(result == SUCCESS)
printk("irq request for pin %d succeeds\r\n",497);
}
Результатом gpio_to_irq() является «-6», а результатом request_irq() является «-22». Что мне делать, чтобы получить прерывание этого GPIO?
497
? - person Marco Bonelli   schedule 11.05.2020gpio_export()
? - person 0andriy   schedule 11.05.2020