我正在i.mx6处理器中开发自己的CAN内核模块。现在我们要为CAN TX和RX编写ISR。我们可以编写ISR,但我的问题是使用 request_irq 函数注册我的ISR,不需要输入什么irq。控制器数据表中指定的中断号与上述功能中的irq号之间的关系是什么。
预先感谢, NSN
答案 0 :(得分:0)
我们是在谈论片上FlexCAN还是像MCP2515这样的外部连接CAN控制器?内核中已经有一个FlexCAN驱动程序。对于片上外设,IRQ已在《技术参考手册》中定义。对于iMX6D / Q,请参阅第3章中断和DMA事件。中断在设备树中指定,并使用request_irq检索。对于一个通过SPI连接的CAN控制器,可以将GPIO用作中断,并使用“ interrupt-parents”和“ interrupts”属性在设备树中指定该中断。
对于确切的关系,让我们考虑一个示例。 CAN1节点为here,其“ interrupts”属性的数量为110。如果您查看TRM的第3部分,则假设FlexCAN1的IRQ值为142。由于ARM Cortex A9域号从32,只需将其从142中减去即可得到110。
编辑:似乎我还不太清楚,并且从设备树POV进行了交谈。 request_irq的IRQ号码应该来自对platform_get_irq的调用,该调用返回Linux IRQ号码。另请参见this。