Hi,
I'm running the Sitara LCD interface under TiRTOS, in LIDD mode, to an ILI9341 based display, and everything is working fine except that I can't get the LCDC DMA unit to work at all.
The display gets initialized, and addresses written etc., using normal non-DMA writes. And up until now I have been downloading the display image byte-by-byte in a tight little loop. But for a faster transfer of the entire display image I wanted to switch to DMA mode, send the data, then switch back when the transfer has completed.
Below is a dump of the LCDC registers immediately prior to setting the lidd_dma_en bit to launch the transfer. I can't show a dump with this bit set, as -- and this is the first bit of weirdness -- reading the registers while in LIDD DMA mode causes a hard crash, with the CPU completely off in the weeds. The documentation does indicate that the reads and writes to the LIDD_CSx_DATA registers are not permitted in LIDD DMA mode, but a hard crash is an unusual response.
The other bit of weirdness that I see is that when I enable the DMA clock, along with the core and LIDD clocks, via the CLKC_ENABLE register during normal post power up initialization, the DMA clock enable doesn't stick. When I go to start the first DMA transfer it has been cleared. This is easily overcome by enabling the clock prior to the transfer, but it does seem odd.
I don't have any of the interrupts enabled, intending simply to poll the done bit in IRQSTATUS_RAW. But we never get there. In fact, looking at the LCD CSX output on the scope shows no activity whatsoever when DMA is launched.
If anyone can see the problem here I would be more than happy to be shown the error of my ways!
Thanks,
GerryL