Hello group,
I would appreciate help in capturing the DMA done interrupt. If anybody could point me to a working example or a give any pointers on what I am doing wrong, I would be very gratefull.
So, what am I doing? I am using the Xilinx EDK 8.1 tool and have generated a system with a custom peripheral. The custom peripheral was created using the "Create or Import Peripheral" wizard and includes DMA, FIFOs, and user logic interrupt support. However, the interrupt service routine is not called when a DMA transfer completes. Currently I need to poll the interrupt status register (ISR) to see if a DMA transfer has finished.
The user logic stub generated by the wizard generates an interrupt approx. every 10s @ 100Mhz, and when this interrupt occurs the interrupt the service routine is called and I see a message on my UART. So I know the service routine is hooked up correctly, that the interrupt enable register (IER) and the global interrupt enable register (GIER) are set correctly.
I made sure that the INCLUDE_DEV_ISC is set to 1 in the VHDL code to make sure the device interrupts are included. And sure enough, when I try to transfer data from an empty FIFO, the service routine is also called because of a transaction error interrupt. So I know the interrupts from the device are enabled and working correctly.
After that I checked that the device interrupt enable register (DIER) is set to enable all interrupts from the device. (Not only the IPIR bit for the user logic interrupts and the TERR for the transaction error but all of them). Furthermore I enabled the interrupts in the DMA0 and DMA1 interrupt enable registers (DMA0_IER and DMA1_IER).
However, the only interrupts that cause a call to my service routine are the timer interrupt from the user logic and transaction error. I don't know why the service routine is not called when a transfer completes.
I tried finding some working examples, but all the examples I could find so far use polling on the ISR register to wait for the transfer to complete.
Any pointers to get me in the right direction would be appreciated.
Thanks,
Martijn