我正在 i.mx6 处理器中开发我们自己的 CAN 内核模块。现在我们要为 CAN TX 和 RX 编写 ISR。我们可以编写 ISR,但我的问题是使用 request_irq 函数注册我的 ISR,我必须提供的 irq 是什么。 controller datasheet中指定的interrupt no与上述函数中的irq no有什么关系。
提前致谢, 诺信
最佳答案
我们是在谈论片上 FlexCAN 还是像 MCP2515 这样的外部连接 CAN Controller ?内核中已经有可用的 FlexCAN 驱动程序。对于片上外围设备,IRQ 已在技术引用手册中定义。对于 iMX6D/Q,请查看第 3 章中断和 DMA 事件。中断在设备树中指定并使用 request_irq 检索。对于 CAN Controller ,假设通过 SPI 连接,GPIO 可用作中断,中断将在设备树中使用“interrupt-parents”和“interrupts”属性指定。
对于确切的关系,让我们考虑一个例子。 CAN1 节点是 here “中断”属性的编号为 110。如果您查看 TRM 的第 3 节,FlexCAN1 的 IRQ 编号假定为 142。由于 ARM Cortex A9 域编号从 32 开始,只需从 142 中减去它即可得到110的数量。
编辑:看来我不是很清楚,是从设备树 POV 谈起的。 request_irq 的 IRQ 号应该来自对返回 Linux IRQ 号的 platform_get_irq 的调用。另见 this .
关于linux - linux内核中controller interrupt no和interrupt no的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55020673/