我正在修改linux PCIe驱动程序以使用altera FPGA PCIe内核。在我的驱动程序代码中 我是pci_set_master(dev)使PCIe读写工作。
我正在使用altera SG-DMA进行PCIe传输而不是使用ARM DMA。 我需要将启用位写入FPGA DMA以启动传输。通过将pcie写入(barx,偏移,数据)写入使能位寄存器,它可以完美地工作。
问题是,当I / O中断发生时我需要我的系统启动PCIe FPGA DMA,但是当发生中断时,在ISR内部我把pcie写入(barx,offset,data)这导致整个linux挂在那里。
以前有人面对这个吗?请帮我。 提前谢谢。
答案 0 :(得分:0)
据我所知,你的问题不是FPGA,而是你的中断处理方式。您可能想要隔离此问题并询问适当的标签。不要包括PCIe或FPGA,因为它们很可能不属于您当前的问题。
您用于SGDMA的PCIe驱动程序因不同的FPGA而异。由于您手动调用用于读取和写入PCIe-FPGA接口的函数,因此该部件(PCIe驱动程序)也可能没有问题。您使用的功能将不为其他人所知,因此在您的问题中也无需分享。
我建议您阅读有关IO中断处理的更多信息。尝试除轮询中断事件以外的其他操作。