12-28-2020 02:28 AM
When implement PCIe XMDA module using Interrupt function, usr_irq_req is the signal to inform PCIe XMDA module to generate interrupt. usr_irq_ack is the signal from PCIe XMDA module to indicates that the interrupt has been sent on PCIe.
I run user_event.exe (included in XDAM driver) on Host side to receive interrupt. If I deassert usr_irq_req right after usr_irq_ack is asserted. user_event receive nothing. I need to remain usr_irq_req asserted for a while, then user_event will then possible to show event_0 received!
My question is, is there any way to determine the right moment to deassert usr_irq_req ? or just simply keep it asserted a certain time after usr_irq_ack is deasserted ?
12-28-2020 02:57 PM
I am also interested in this question. From what it says in the XDMA product guide (PG195 on page 17/18):
"After a usr_irq_req bit is asserted, it must remain asserted until the corresponding usr_irq_ack bit is asserted and the interrupt has been serviced and cleared by the Host."
The same paragraph says, "You must implement a mechanism in the user application to know when the interrupt routine has been serviced."
Sounds like just looking at the usr_irq_ack bit isn't enough. I would recommend reading through that section and see if it's helpful. They also provide suggestions on how to accomplish this.
Hope that's helpful!
01-13-2021 06:03 PM
I agree that only looking at usr_irq_ack is not enough. What we do now is after receiving interrupt event host will notice FPGA IRQ is served through AXI_Lite on a register defined by our own. This action can be done in application or driver. It works so far. Hope this is helpful for anyone who interested in this as well. If any better idea, welcome to share.
Thanks in advance.