So I've been trying so hard to get I2C working. The I2C will only transmit data to write configuration data to TLV320AIC23B codec.
This is my code:
void i2cCodecInit() {
// init
I2caRegs.I2CMDR.bit.IRS = 0;
I2caRegs.I2CPSC.all = 5; // clock pre-scaler I2caRegs.I2CCLKL = 10; I2caRegs.I2CCLKH = 5; I2caRegs.I2CIER.all = 0; //I2caRegs.I2CMDR.all = 0x0020; //I2caRegs.I2CFFTX.all = 0x6000; I2caRegs.I2CMDR.bit.IRS = 1; I2caRegs.I2CSAR = 0x34; // codec address I2caRegs.I2CCNT = 3; I2caRegs.I2CMDR.bit.TRX = 1; I2caRegs.I2CMDR.bit.MST = 1; I2caRegs.I2CMDR.bit.FREE = 1; I2caRegs.I2CMDR.bit.RM = 1; // These RM - STT - STP combination I2caRegs.I2CMDR.bit.STT = 1; // yields S - A - D - D - D - D I2caRegs.I2CMDR.bit.STP = 0; // (repeat mode transfer) I2caRegs.I2CDXR = 0x34; while(I2caRegs.I2CSTR.bit.XRDY == 0) {}; I2caRegs.I2CDXR = 0x01; while(I2caRegs.I2CSTR.bit.XRDY == 0) {}; I2caRegs.I2CDXR = 0x17; //FunctionPointer = &i2cCodecInit; }
I've looked at oscilloscope, logic analyzer, I couldn't find any activity on both clock signal data signal. When I halted the CPU, the program seems to be stuck on waiting for XRDY for the first time.
Port initialization is as follows:
// GPIO-32 - PIN FUNCTION = --Spare--
GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 1; // 0=GPIO, 1=I2CSDA-A, 2=SYNCI, 3=ADCSOCA GpioCtrlRegs.GPBDIR.bit.GPIO32 = 0; // 1=OUTput, 0=INput GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0; // Enable pull-up GpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 3; // Async input // GpioDataRegs.GPBCLEAR.bit.GPIO32 = 1; // uncomment if --> Set Low initially GpioDataRegs.GPBSET.bit.GPIO32 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-33 - PIN FUNCTION = --Spare-- GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 1; // 0=GPIO, 1=I2CSCL-A, 2=SYNCO, 3=ADCSOCB GpioCtrlRegs.GPBDIR.bit.GPIO33 = 0; // 1=OUTput, 0=INput GpioCtrlRegs.GPBPUD.bit.GPIO33 = 0; // Enable pull-up GpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 3; // Async input // GpioDataRegs.GPBCLEAR.bit.GPIO33 = 1; // uncomment if --> Set Low initially GpioDataRegs.GPBSET.bit.GPIO33 = 1; // uncomment if --> Set High initially
Any help would be appreciated.
Thanks