我正在修改Linux PCIe驱动程序以与Altera FPGA PCIe内核一起使用。在我的驱动程序代码中
我执行pci_set_master(dev)使PCIe可以读写。
我正在使用Altera SG-DMA进行PCIe传输,而不是使用ARM DMA。
我需要将使能位写入FPGA DMA以启动传输。通过对使能位寄存器进行pcie写(barx,offset,data),它可以完美地工作。
问题是,当发生I / O中断时,我需要系统启动PCIe FPGA DMA,但是当中断发生时,我在ISR内放入pcie write(barx,offset,data),这会导致整个linux挂在那里。
有人面对过吗?请帮我。
提前致谢。
最佳答案
据我说,您的问题不是FPGA,而是您处理中断的方式。您可能想隔离此问题,并使用适当的标签询问。不要包括PCIe或FPGA,因为它们很可能不是您当前问题的一部分。
对于不同的FPGA,您用于SGDMA的PCIe驱动程序是不同的。由于您正在手动调用用于读取和写入PCIe-FPGA接口的函数,因此该部件(PCIe驱动程序)似乎也没有问题。您使用的功能不会为他人所知,因此在您的问题中共享这些功能也没有意义。
我建议您阅读有关IO中断处理的更多信息。除了轮询中断事件外,还可以尝试其他方法。
关于linux - ISR中的PCIe读写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16909120/