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





