0

我正在修改 linux PCIe 驱动程序以使用 altera FPGA PCIe 内核。在我的驱动程序代码中,我执行 pci_set_master(dev) 以使 PCIe 读写工作。

我正在使用 altera SG-DMA 进行 PCIe 传输,而不是使用 ARM DMA。我需要将启用位写入 FPGA DMA 以启动传输。通过对启用位寄存器执行 pcie write(barx,offset,data) 可以完美地工作。

问题是,当 I/O 中断发生时,我需要我的系统启动 PCIe FPGA DMA,但是当中断发生时,我在 ISR 中放置了 pcie write(barx,offset,data),这导致整个 linux 挂在那里.

有人遇到过这种情况吗?请帮我。提前致谢。

4

1 回答 1

0

根据我的说法,您的问题不是 FPGA,而是您的中断处理方式。您可能希望隔离此问题并使用适当的标签进行询问。不要包括 PCIe 或 FPGA,因为它们很可能不是您当前问题的一部分。

您用于 SGDMA 的 PCIe 驱动程序对于不同的 FPGA 是不同的。由于您手动调用读取和写入 PCIe-FPGA 接口的函数,因此这部分(PCIe 驱动程序)似乎也没有问题。您使用的功能不会被其他人知道,因此在您的问题中也没有必要分享它。

我建议您阅读有关 IO 中断处理的更多信息。尝试轮询中断事件以外的其他方法。

于 2013-06-20T02:37:23.927 回答