I’m trying to handle interrupts from a Vitis HLS IP in C by writing a UIO userspace driver. So far I’ve been successful in handling the interrupts in a Jupyter notebook. I’ve followed this tutorial: Read_the_docs/interrupts.rst at master · KastnerRG/Read_the_docs · GitHub. However, when I try to emulate the same behaviour in C the UIO driver gets stuck in the read() call. The C code I’m using is adapted from: Solved: Re: Axi-intc hangs on boot - testcase on zcu104 - Community Forums
It turns out I’ve been able to detect the interrupts with the C driver if I run the Jupyter notebook first. After some investigations I’ve discovered this has to do with calling
await ip.interrupt.wait() in Python. What’s special about this call? I’ve had a look at the source code and it seems to just have to do with the events in the asyncio library, so apparently it shouldn’t be messing with the kernel space UIO driver, right?
P.D: I’m using the PYNQ-Z2 with the pre-built PYNQ image v2.4. I can see how the interrupts are fired in /proc/interrupts (fabric) with the Jupyter notebook and also with the C UIO userspace driver once the Jupyter notebook has been run at least once.