使用I2C Callback模式,连续写两包数据,第二包发不出去。
下面是读,写,初始化函数。
static uint8_t I2C_read(void)
{
static I2C_Transaction transactionR;
memset(i2cSet.readBuf, 0, sizeof(i2cSet.readBuf));
transactionR.writeCount = 0;
transactionR.writeBuf = NULL;
transactionR.readCount = sizeof(i2cSet.readBuf);
transactionR.readBuf = i2cSet.readBuf;
transactionR.slaveAddress = HAL_I2C_SLAVE_ADDR_DEF;
I2C_transfer(i2cHandle, &transactionR);
return SUCCESS;
}
static uint8_t I2C_write(uint8_t *pData, uint8_t len)
{
static I2C_Transaction transactionW;
i2cSet.readWriteFlag = WRITE_OPERATE;
transactionW.writeCount = len;
transactionW.writeBuf = i2cSet.writeBuf;
transactionW.readCount = 0;
transactionW.readBuf = NULL;
transactionW.slaveAddress = HAL_I2C_SLAVE_ADDR_DEF;
uint8_t result = I2C_transfer(i2cHandle, &transactionW);
return SUCCESS;
}
uint8_t I2C_initialize(void)
{
I2C_Params params;
I2C_init();
I2C_Params_init(¶ms);
params.transferMode = I2C_MODE_CALLBACK;
params.transferCallbackFxn = I2C_callbackFxn;
params.bitRate = I2C_100kHz;
i2cHandle = I2C_open(CC2640R2_LOCK_I2C0, ¶ms);
if (!i2cHandle) {
return FAILURE;
}
i2cSet.readWriteFlag = READ_OPERATE;
keySet.count = 0;
keyFuncSet.step = 0;
return SUCCESS;
}