中断是个老掉牙的概念了,无需在解释了。
中断到来时,CPU自动运行到某一个地址,那么中断很多,会形成很多个地址,那么多了就成了一个表格了,哎呀,中断向量表。。。。。
因为现在有amlogic的项目,所以就以amlogic的平台作为分析对象,讲解实际的使用方法以及注意事项。
amlogic_gpio_to_irq(pdata->key[i].pin, MOD_NAME,
AML_GPIO_IRQ(irq_keyup, FILTER_NUM7,GPIO_IRQ_RISING));
amlogic_gpio_to_irq(pdata->key[i].pin, MOD_NAME,
AML_GPIO_IRQ(irq_keydown, FILTER_NUM7,GPIO_IRQ_FALLING));
request_irq(irq_keyup + INT_GPIO_0, kp_isr, IRQF_DISABLED, "irq_keyup", kp)
这是一个普通GPIO的中断的申请。
static inline int __must_check
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
const char *name, void *dev)
{
return request_threaded_irq(irq, handler, NULL, flags, name, dev);
}
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev)
irq:是中断号,但是这个irq的话一般不会固定的去定义,一般会有一个函数叫做xxx_gpio_to_irq,通过实际的GPIO端口,返回gpio的实际在内核中的irq的中断号。
handler:中断服务函数,
flags:
/*
* These flags used only by the kernel as part of the
* irq handling routines.
*
* IRQF_DISABLED - keep irqs disabled when c