Other Parts Discussed in Thread: EK-TM4C123GXL
Tool/software: TI C/C++ Compiler
Hello,
The code below compiled well until I added the "I2CMInit" function:
//////////////////////////////////////////////////////////////////////////////////////////////////// #include <stdbool.h> #include <stdint.h> #include "driverlib/debug.h" #include "driverlib/gpio.h" #include "driverlib/pin_map.h" #include "driverlib/pwm.h" #include "driverlib/rom.h" #include "driverlib/sysctl.h" #include "inc/hw_gpio.h" #include "inc/hw_memmap.h" #include "inc/hw_types.h" #define PWM_FREQUENCY 55 //////////////////////////////////////////////////////////////////////////////////////////////////// // My I2C defines & includes #include "driverlib/i2c.h" #include "driverlib/interrupt.h" #include "inc/hw_i2c.h" #include "inc/hw_ints.h" #include "sensorlib/i2cm_drv.h" #include "sensorlib/mpu6050.h" #define DEBUG #define I2C_ADDRESS 0x68 tI2CMInstance g_sI2CInst; // I2C master driver structure //////////////////////////////////////////////////////////////////////////////////////////////////// // My UART defines & includes #include "driverlib/uart.h" //////////////////////////////////////////////////////////////////////////////////////////////////// int main(void) { //////////////////////////////////////////////////////////////////////////////////////////////////// // My I2C initialization code // Enable GPIO peripheral that contains I2C 2 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); // Enable I2C module 2 SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C2); // Configure the pin muxing for I2C2 functions on port E4 and E5. GPIOPinConfigure(GPIO_PE4_I2C2SCL); GPIOPinConfigure(GPIO_PE5_I2C2SDA); // Select the I2C function for these pins. GPIOPinTypeI2CSCL(GPIO_PORTE_BASE, GPIO_PIN_4); GPIOPinTypeI2C(GPIO_PORTE_BASE, GPIO_PIN_5); IntMasterEnable(); I2CMInit(&g_sI2CInst, I2C2_BASE, INT_I2C2, 0xFF, 0xFF, SysCtlClockGet()); SysCtlDelay(SysCtlClockGet() / 3); //////////////////////////////////////////////////////////////////////////////////////////////////// // My UART initialization code SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinConfigure(GPIO_PA0_U0RX); GPIOPinConfigure(GPIO_PA1_U0TX); GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 115200,(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); UARTCharPut(UART0_BASE, 'U'); UARTCharPut(UART0_BASE, 'A'); UARTCharPut(UART0_BASE, 'R'); UARTCharPut(UART0_BASE, 'T'); UARTCharPut(UART0_BASE, ' '); UARTCharPut(UART0_BASE, 'W'); UARTCharPut(UART0_BASE, 'o'); UARTCharPut(UART0_BASE, 'r'); UARTCharPut(UART0_BASE, 'k'); UARTCharPut(UART0_BASE, 's'); //////////////////////////////////////////////////////////////////////////////////////////////////// volatile uint32_t ui32Load; volatile uint32_t ui32PWMClock; volatile uint8_t ui8Adjust; ui8Adjust = 83; // This command is already used for setting the UART and is therefore omitted. // SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ); SysCtlPWMClockSet(SYSCTL_PWMDIV_64); SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM1); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); GPIOPinTypePWM(GPIO_PORTD_BASE, GPIO_PIN_0); GPIOPinConfigure(GPIO_PD0_M1PWM0); HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0x01; HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0; GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_4|GPIO_PIN_0, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4|GPIO_PIN_0, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); ui32PWMClock = SysCtlClockGet() / 64; ui32Load = (ui32PWMClock / PWM_FREQUENCY) - 1; PWMGenConfigure(PWM1_BASE, PWM_GEN_0, PWM_GEN_MODE_DOWN); PWMGenPeriodSet(PWM1_BASE, PWM_GEN_0, ui32Load); PWMPulseWidthSet(PWM1_BASE, PWM_OUT_0, ui8Adjust * ui32Load / 1000); PWMOutputState(PWM1_BASE, PWM_OUT_0_BIT, true); PWMGenEnable(PWM1_BASE, PWM_GEN_0); while(1) { // A bunch of lies... } }
Now, it fails with the following error:
unresolved symbol I2CMInit, first referenced in ./main.obj PID C/C++ Problem
I searched the forum for the error and found this post - suggesting to install an older version of the compiler:
Before I do that - is there something I can change in the code to make it work with my current version ?
I'm using CCS Version: 7.1.0.00016 and TivaWare 2.1.4.178