I tried sending the following to TI support directly but that was too painful so I'm posting it here in case its of use to anyone else.
During development I came across to problems that I would call chip anomalies but they aren’t currently documented in your errata.
- I configured Timer 1 A and B and Timer 2 A and B for Daisy chained One Shot PWM. All timers are configured for the same period and duty cycle. If I try to configure the timers with a period longer than 16 bits, the next timer in the chain isn’t trigger when the previous timer expires. Only timer 1A runs. If I configure the timers as repeating they work as expected or if I configure the timers with a period of 65536 or less, they work as expected. If I set the Prescale set or PRESCALE match set to nonzero the next timer in the chain isn’t started. The only workaround I found was to use the ALTCLK to drive the timers to get the longer periods that I want. The system is running at 120 MHz and I was trying to set each phase of the daisy chain to 6 ms.
- I’m using palette animation with the LCD controller. Due to a bug in the firmware, a burst of several hundred palette writes would occur every 30 seconds or so. Somewhere between 20 minutes and 8 hours after start up, the display would blank and the only way to recover it was to reset the Main LCD clock (bit MAIN in LCDCLKRESET). The TI LCD library that we’re using writes palette entry zero with the RAM structure every time the palette is modified even if palette entry zero is not being modified. I changed the library code to only update palette entry zero if entry 0 is being changed and the application never changed entry zero once the LCD controller was set up. The TI Library version being used is “This is part of revision 2.0.1.11577 of the Tiva Peripheral Driver Library”. The LCD initialization code is:
Ui32SysClkHz = 120000000
#define PIXEL_CLOCK_FREQ 6000000
.
.
.
SysCtlPeripheralEnable(SYSCTL_PERIPH_LCD0);
while(!(SysCtlPeripheralReady(SYSCTL_PERIPH_LCD0)));
LCDModeSet(LCD0_BASE, (LCD_MODE_RASTER |LCD_MODE_AUTO_UFLOW_RESTART),PIXEL_CLOCK_FREQ, ui32SysClkHz);
LCDRasterConfigSet(LCD0_BASE, RASTER_FMT_ACTIVE_PALETTIZED_12BIT, 0);
LCDRasterTimingSet(LCD0_BASE, &g_sRasterTimings);
LCDDMAConfigSet(LCD0_BASE, LCD_DMA_BURST_4 | LCD_DMA_BYTE_ORDER_0123);
LCDRasterFrameBufferSet(LCD0_BASE, 0, (uint32_t *)&lcdMemory, sizeof(lcdMemory) );
LCDRasterPaletteSet(LCD0_BASE, LCD_PALETTE_TYPE_8BPP, (uint32_t *)lcdMemory.palette, (uint32_t *)paletteData, 0, sizearray(paletteData) );
LCDRasterEnable(LCD0_BASE);