Part Number: TM4C1231H6PM
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