linux - linux内核中controller interrupt no和interrupt no的关系

标签 linux linux-kernel kernel linux-device-driver interrupt-handling

我正在 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/

相关文章:

c - 在工作队列中使用 spin_lock() 与 down_interruptible()

linux - Linux 上用户或进程之间的目录重新映射?

c - 如何使用宏container_of获取指针元素的容器结构体?

linux - Linux内核编程中如何判断一个文件是否是 ".."文件?

linux - 如何让git检查主服务器上的更新?

python - Python2.7获取pip包

linux - 刷新缓存和TLB不起作用: flush_cache_mm(mm)/flush_tlb_mm(mm)

linux - 卸载高分辨率定时器模块

c++ - 如何以编程方式使系统崩溃

linux - ip_hdr 和 ipip_hdr 有什么区别?