linux 内核中控制器中断号和中断号之间的关系

relationship between controller interrupt no and interrupt no in linux kernel

我正在 i.mx6 处理器中开发我们自己的 CAN 内核模块。现在我们要为 CAN TX 和 RX 编写 ISR。我们可以编写 ISR,但我的问题是使用 request_irq 函数注册我的 ISR,我必须提供的 irq 是什么。 controller datasheet中指定的interrupt no和上面函数中的irq no有什么关系

提前致谢, 诺森

我们是在谈论片上 FlexCAN 还是像 MCP2515 这样的外部连接 CAN 控制器?内核中已经有可用的 FlexCAN 驱动程序。对于片上外围设备,IRQ 已在技术参考手册中定义。对于 iMX6D/Q,请查看第 3 章中断和 DMA 事件。中断在设备树中指定并使用 request_irq 检索。对于 CAN 控制器,假设通过 SPI 连接,GPIO 可以用作中断,中断将在设备树中使用 "interrupt-parents" 和 "interrupts" 属性.

指定

对于确切的关系,让我们考虑一个例子。 CAN1 节点是 here,"interrupts" 属性 的编号为 110。如果您查看 TRM 的第 3 节,FlexCAN1 的 IRQ 编号应该是 142。由于 ARM Cortex A9 域编号从 32 开始,只需从 142 中减去它即可得到 110 的编号。

编辑:看来我不是很清楚,是从设备树的角度讲的。 request_irq 的 IRQ 号应该来自对 platform_get_irq 的调用,其中 returns Linux IRQ 号。另见 this.