Greetings, everyone! I'm acquiring A-to-D conversion data from an FPGA which uses the GPMC driven by the EDMA to retrieve a constant flow of data. 4 times a second I get 65536 samples of A-to-D and each sample is 64 bits wide, and the EDMA transfers are being requested using 3 linked PaRAM blocks with PaRAM[52] kicking things off (since the GPMC Peripheral is channel 52.)
That actually works just fine, I get all my samples continually, and I write the data in to two Ping-Pong buffers without losing data and without duplicates.
My problem is that while the GPMC is retrieving the constant data, I can't use any other channel, such as channel 42 which is a UART Transmit channel. While the GPMC is receiving data, when I attempt to use EDMA on channel 42 to transfer a frame of data, that stalls, it takes 45 seconds to transmit 4 bytes.
I had hoped that the solution would be to use a different Transfer Controller so that my Transfer Request issued for the UART would go to Transfer Controller 1 while my GPMC's Transfer Requests would go to Transfer Controller 0. I did that inasmuch as I assign a different queue whether I'm setting up to use channel 52 or not:
mpst_edmaccChannel->queueNum = (men_channelID == 52 ? EDMA_QUEUE : EDMA_QUEUE + 1);
(void)EDMAChConfig(mpst_edma3cc->base, mpst_edma3cc->channelType, mpst_edma3cc->channelNum, mpst_edmaccChannel);
That did not make a bit of difference, the UART EDMA transfer of data is stalled badly because the GPMC data is flooding in through the EDMA controller. If I disable the GPMC data flow, my EDMA transfers to the UART work without a problem, they are now stalled or slowed down at all.
So what's the solution? Second 11.3.11.1 DMA Channel To Event Queue Mapping for SPRUH73P revised March 2017 should have solved it for me however simply picking a different TC(n) and Queue(n) did not.
That made me look at section 11.4.1.8, the Queue Priority Register inasmuch as I have all Queue(n)s set to the same priority (their default power-up values.) But that should not matter, am I correct? The TC getting the TR should be timely since GPMC is using TC0 and everything TC1, so there should not be a bottleneck stopping my UART's TRs from getting to its TC, right?
So I'm unable to explain or fix why my UART transmits are stalled and I have some hopes that someone may point me to a section of the SPRUH73P or other manual which gives a clue or a reason (or a solution) to configuring the EDMA engine so that my UART Channel 42 transfer request is processed in a timely way without adversely impacting the GPMC data flow using Channel 52.
Would someone who might have a solution or a clue as to where my code could use a fix let me know, please?
Thanks!