简单说下IO中断处理例程。
所有的IO共享一个中断,如果不同的IO使用的中断处理例程不同,可以增加多个event_callback,构成处理链。中断发生时会调用处理链上的所有中断服务例程。
但同一个event_callback是不能通过gpio_add_raw_irq_handler往处理链中添加多次,我做的一个不严格的测试,添加超过4次就会报错。根据测试,添加3次不会报错,但没意义。具体该怎么分析3次、4次,目前不太清楚。
用gpio_add_raw_irq_handler添加中断处理例程时,参数中有端口号,但是似乎没什么用。比如输入口1,2,3,输入口4,5,6,他们分别对应的event_callback是e_c_1和e_c_2,则以下写法是可以的:
gpio_add_raw_irq_handler(1,&e_c_1);
gpio_add_raw_irq_handler(1,&e_c_1);
重点是:在e_c_1和e_c_2中要判断中断是在哪个端口上触发的,e_c_1中只需要把输入口1,2,3上的中断过滤出来,e_c_2同理,否则全都混到一起了。
这个可以参考
Experiments with new gpio_add_raw_irq_handler - Raspberry Pi Forums