I am using CCS 5.3.0.00090 and ARM compiler 5.0.5. I have just moved working code from StellarisWare to TivaWare.
I am working two of code having very similar initialization code. One uses an external oscillator,
and another uses the internal oscillator.
I use the FLASH versions of these functions when driving the oscillator at 80MHz,
due to the SYSCTL_SYSDIV_2_5 not being supported in the ROM_version
SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_20MHZ);
sysCtlClock = SysCtlClockGet(); // Returns 80,000,000
For the second implementation I used,
SysCtlClockSet(SYSCTL_OSC_INT|SYSCTL_SYSDIV_10|SYSCTL_USE_PLL);
sysCtlClock = SysCtlClockGet(); // For StellarisWare, this returns 20,000,000, for TivaWare 37,500
I switched back to the ROM_ versions:
ROM_SysCtlClockSet(SYSCTL_OSC_INT|SYSCTL_SYSDIV_10|SYSCTL_USE_PLL);
sysCtlClock = ROM_SysCtlClockGet(); // returns 20,000,000 for both StellarisWare and TivaWare
I see many changes to this function in sysctl.c. Somebody dropped the ball here.
When feeding 37,500 into (ROM or FLASH versions)
ROM_SSIConfigSetExpClk(SSI0_BASE, sysCtlClock, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 10000000, 8);
This leads to a forever loop inside of SSIConfigSetExpClk. This is nasty.