I have been using CCS for EK-TM4C123GXL Tiva LaunchPad for more than a month. I decided to try Keil uVision and I had a few surprises.
1. The EK-TM4C123GXL-KEIL from http://www.ti.com/tool/sw-ek-tm4c123gxl did not support TM4C123GH6PM, which is the device used on the Tiva LaunchPad.
2. I had to update Keil uVision to V4.72, the first version that supports TM4C123GH6PM.
3. The startup.s was replaced by startup_TM4C123.s and these lines
MOVW R0, #0xED88
MOVT R0, #0xE000
LDR R1, [R0]
ORR R1, #0x00F00000
STR R1, [R0]
were replaced by
LDR R0, =SystemInit
BLX R0
I added this function in my C file to handle it:
void SystemInit(void)
{
// Grant coprocessor access
// This is required since TM4C123G has a floating point coprocessor
SCB->CPACR |= 0x00F00000;
}
4. If you noticed my last statement of SystemInit( ), the header file C:\Keil\ARM\INC\TI\TM4C123\TM4C123GH6PM.h was completely rewritten. It uses C struct for register definitions instead of #define. The programming interface is different. For example, the data register for port F was changed from GPIO_PORTF_DATA_R to GPIOF->DATA. I downloaded the latest TivaWare 1.1 SW-TM4C from http://www.ti.com/tool/sw-tm4c and the C:\ti\TivaWare_C_Series-1.1\inc\tm4c123gh6pm.h is still using the old style #define. Now I have two different versions of header files.
This will pose a major problem for portability. Does anybody know what is the official position of TI on this?