Other Parts Discussed in Thread: SYSCONFIG
器件型号: IWRL6432AOPEVM
主题: SysConfig 中讨论的其他器件
这是我的 i2c 测试示例、如果 ReadCount 设置为 1 字节、transferCallback 将正确执行。 如果 ReadCount 设置的值大于 1 字节、则在多次重复测试后、它将卡住。
void gsd_I2C_transferCallback(I2C_Handle handle,
I2C_Transaction *msg,
int32_t transferStatus)
{
if (msg->readBuf != 0) {
SemaphoreP_post(&i2c_mutex);
}
}
static void i2c_CLI_task(void* args)
{
I2C_Handle i2cHandle;
I2C_Transaction i2cTransaction;
I2C_Transaction i2c_tx;
uint8_t txBuffer[4];
uint8_t rxBuffer[10];
uint8_t offset;
uint32_t dump_reg = 0xeeeeeeee;
uint32_t virtual_reg = 0;
uint8_t find_flag = 0;
i2cHandle = gI2cHandle[CONFIG_I2C0];
SemaphoreP_constructBinary(&i2c_mutex, 0);
I2C_Transaction_init(&i2c_tx);
i2c_tx.writeBuf = txBuffer;
i2c_tx.writeCount = 4;
i2c_tx.controllerMode = 0;
while(1) {
I2C_Transaction_init(&i2cTransaction);
i2cTransaction.readBuf = rxBuffer;
i2cTransaction.readCount = 1; // if i use readCount equal 6 and i2c master repeat send more than 10 times, transferCallback will not execute
i2cTransaction.writeBuf = &dump_reg;
i2cTransaction.writeCount = 1;
i2cTransaction.controllerMode = 0;
/* Blocking Mode: Halt program until message received from controller
Callback Mode: Trigger interrupt callback upon message received from controller */
CLI_write("recv\n");
I2C_transfer(i2cHandle, &i2cTransaction);
SemaphoreP_pend(&i2c_mutex, SystemP_WAIT_FOREVER);
}
}

