According to errata LCD#01:
"Whenever a LIDD-mode DMA transaction is requested by setting the DMAEN bit of the LCD LIDD Control (LCDLIDDCTL) register, after setting the LCD DMA frame buffer n base and ceiling addresses in the LCDDMABAFB and LCDDMACAFB registers,respectively, the next attempt to access any LCD controller register causes the microcontroller and the JTAG connection to become unresponsive. A power-on reset recovers the device."
The recommended work-around is to insert code that resets the DMA engine prior to each DMA transaction and also to reconfigure the CS line as GPIO temporarily during this reset.
I am using LIDD-mode DMA transactions using API from lcd.c from TivaWare peripheral library 2.1.4 as shown below. It seems that errata LCD#01 applies. However, I have never observed any problems with the controller becoming unresponsive when writing to the LCD. I am currently not using the recommended work-around. I have 2 questions:
1. If the errata applied to my code would I be seeing the error each time? Or can this be a dormant issue that rears its ugly head once in a blue moon?
2. Should I apply the work-around? I'm a bit suspicious of this work-around.. why didn't it get implemented inside of lcd.c LCDIDDDMAWrite() if it is necessary?
My code example follow:
// Send dirty rectangle row by row
for( int y = top; y <= bottom; y++)
{
// Point to the nex display row;
// Set up start and length of DMA
...
// Start DMA transfer
uint32_t mask = (LCD_INT_EOF0 | LCD_INT_DMA_DONE);
LCDIntClear(LCD0_BASE, mask );
LCDIDDDMAWrite(LCD0_BASE, 0, dmaStart, dmaLength );
// Wait for DMA to complete
while ( ( LCDIntStatus(LCD0_BASE, false) & mask ) != mask ) {}
LCDIDDDMADisable(LCD0_BASE);
}