It is not clear to me why you wouldn’t get DMA interrupts in the merged application.
I’m afraid I can not help you with device specific settings such as
Note that DMA and memory caching aren’t friends. Before passing memory to the DMA controller, you have to flush the memory, and after reading to cached memory, you’ll have to refresh it.
In the FreeRTOS+TCP driver for Zynq, it was decided to reserve 1 MB of SDRAM as uncached memory (see
). Depending on the size that you need, you might want to call:
uint8_t *pucGetUncachedMemory( uint32_t ulSize );
and get a chunk of aligned / uncached memory.
+TCP is also using DMA. What happens if you don’t initialise the stack, i.e. never call
? Do you get your DMA interrupt?
In the DMA Handler I simply write to the UDP server that the interrupt was processed
If this DMA Handler is called as an interrupt, it is likely to get into trouble.
FreeRTOS+TCP API’s may only be called from within a normal task code, not from an interrupt context (with the exception of a few fromISR() functions).
When using FreeRTOS (+TCP), I would let the DMA handler send a message, or give to a semaphore, or notify a task:
Immediately after the interrupt is finished, the DMA-handling task will wake-up on either:
Please define “configASSERT_DEFINED = 1” while testing. See the comments in
for an explanation why.