主题中讨论的其他器件:TCA9555
您好!
我的 I2C 传输代码中有一个问题。
在我的参考运行代码中、用于 I2C 传输的函数如下:
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 均在 I2C.h 文件(在 tirtos..\products\tidrivers..\packages\ti\drivers\i2c.h 中)中定义
但是、当我尝试从微控制器运行它到 TCA9555时、我得到的是 I2C 信号(SCK 和 SDA)、但没有输出。
相反、如果我使用以下函数进行 I2C 传输:
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) { } }
我在 TCA9555上的输出正在正常实现。
但第一个代码在参考板中工作正常。
请注意、我将在调试模式下运行上述2个代码片段、第一个代码片段可能与 RTOS 有关、还是仅在自由运行/编程模式下工作?
此致、
Kiran