Closed PickaxeHit closed 11 months ago
RGB LCD is a "stream-style" application, so the DMA link list there is a circular link list. In normal cases, it just keeps running, copying data from memory to the LCD FIFO. There isn't a scenario that requires us to reset or restart the DMA unless "working around some hardware issue".
Thank you, now I understand. But I still have the following questions:
There is another question: "suc_eof" written in TRM will cause GDMA to trigger the EOF interrupt, so will GDMA stop at this time? Does its stopping depend on suc_eof or is the pointer of the next item in the linked list NULL? How should I configure GDMA to start sending data after I manually restart it?
@suda-morris could you please help me? thanks!
Answers checklist.
General issue report
I'm designing a driver that works very similar to an LCD. The only difference is that I need to manually switch the chip select level between the two row sends. I saw that the rgb lcd has a bounce buffer only mode of operation and I thought it would suit me well. But after looking at the TRM and related code, I don't understand how to restart the transmission after the dma generates an interrupt.
You can see that
on_trans_eof
points tolcd_rgb_panel_eof_handler
But I didn't see any code about restarting dma in these two functions. On the contrary, in the rmt driver, there is a function named
gdma_append
, which seems to be able to restart dma from the last one in the dma descriptor list.I searched the entire esp-idf repository and found that only rmt seems to use this function. Is there a special purpose? Thanks!