Other Parts Discussed in Thread: TCA9555
Hi,
I've an issue in my code for I2C transfer.
In my reference running code, the function used for I2C transfer is following:
I2C_Handle i2c; I2C_Params i2cParams; I2C_Transaction i2cTransaction; /* Create I2C for usage */ I2C_Params_init(&i2cParams); i2cParams.bitRate = I2C_400kHz; i2c = I2C_open(stI2cConfig->vui8I2cBus, &i2cParams); /*if (i2c == NULL) { IOC_DRIVER_ERR("Error Initializing I2C\n"); } else { IOC_DEBUG_DRIVER("I2C Initialized!\n"); }*/ i2cTransaction.slaveAddress = stI2cConfig->vui8slaveAddress; i2cTransaction.writeBuf = stI2cConfig->pui8txbuffer; i2cTransaction.writeCount = stI2cConfig->vui8writeCount; i2cTransaction.readBuf = stI2cConfig->pui8RxBuffer; i2cTransaction.readCount = stI2cConfig->vui8readCount; /* Print the Data send through the I2C */ if(I2C_transfer(i2c, &i2cTransaction)) { } else { IOC_DRIVER_ERR("I2C Bus fault\n"); } /* De-initialized I2C */ I2C_close(i2c); /*IOC_DEBUG_DRIVER("I2C closed!\n"); IOC_DEBUG_DRIVER_FLUSH();*/ stI2cConfig->pui8RxBuffer = i2cTransaction.readBuf;
I2C_Handle, I2C_Params,I2C_Transaction are all defined in I2C.h file(in tirtos..\products\tidrivers..\packages\ti\drivers\i2c.h)
But when I try to run it from my microcontroller to TCA9555,I get the I2C signals(SCK and SDA) but not the output.
Whereas if I use the following function for my I2C transfer:
void i2cTivaLibTransfer(I2cStructType *pI2cData) { uint32_t ui32Index, ui32Count; I2CMasterEnable(pI2cData->ui32I2cBus); /*if true - 400Khz, False - 100Khz */ I2CMasterInitExpClk(pI2cData->ui32I2cBus, 120000000, true); I2CMasterSlaveAddrSet(pI2cData->ui32I2cBus, pI2cData->i2cSlaveAddress, false); I2CMasterBurstLengthSet(pI2cData->ui32I2cBus, pI2cData->ui32TxCount); I2CMasterControl(pI2cData->ui32I2cBus, I2C_MASTER_CMD_FIFO_BURST_SEND_START); for(ui32Index = 0; ui32Index < pI2cData->ui32TxCount; ui32Index++) { I2CFIFODataPut(pI2cData->ui32I2cBus, *(pI2cData->pui8DataTx+ui32Index)); } while(I2CMasterBusy(pI2cData->ui32I2cBus)) { } ui32Count = I2CMasterErr(pI2cData->ui32I2cBus); if(ui32Count != I2C_MASTER_ERR_NONE) { } }
my output on TCA9555 is coming fine.
But the first code is working fine in the reference board.
Note that I'm running the above 2 code snippets in the debug mode, is it possible that the fist code snippet has anything to do with RTOS or it works only during free run/programming mode?
Best Regards,
Kiran