Xilinx IPIF DMA done interrupt ?



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

.



Relevant Pages

  • Re: Handling high UDP throughput
    ... The product that uses this sustains 540MbS with a 38kHz interrupt running using more than half the processor's power, so a lot goes on in the system but a lot of time is available for TCP/IP. ... The Ethernet driver was optimized, the memory movement was optimized (just using an inline memcpy that does a DMA transfer adds 30% to the effective speed), the IP checksum was in assembly, and a zero-copy TCP/IP stack was required. ... How much TX buffers did you have? ...
    (comp.arch.embedded)
  • Re: TL16C550CIFN
    ... verify this UART's DMA function,but the /RXRDY goes true when there is ... IIRC most cacheing UARTs will allow you to adjust the trigger point ... Thus once an interrupt occurs the service can ... or more characters in the FIFO and more than three character ...
    (comp.arch.embedded)
  • RE: Problems related to DMA or DDR memory on Intel 845 chipset?
    ... >> adding my own debug to the kernel) that the 8259 Programmable Interrupt ... side affect from something that has gone wrong during a DMA transfer. ... that DMA is not supported with an ICH4 controller (which is what this system ...
    (Linux-Kernel)
  • Re: TL16C550CIFN
    ... want to know why and can u give me a example of DMA mode configuration. ... IIRC most cacheing UARTs will allow you to adjust the trigger point ... Thus once an interrupt occurs the service can ... not when the rxbuffer reach the trigger. ...
    (comp.arch.embedded)
  • Re: TL16C550CIFN
    ... verify this UART's DMA function,but the /RXRDY goes true when there is ... IIRC most cacheing UARTs will allow you to adjust the trigger point ... Thus once an interrupt occurs the service can ... or more characters in the FIFO and more than three character ...
    (comp.arch.embedded)