请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:AM3354 工具/软件:TI-RTOS
大家好:
我将 am3354与 I2C 总线一起使用,当我将数据写入设备时,就像这样:
0xFE、0x00、0x09、0x10、0x00、 0xF0、0x00、0x00 0x08、0xC9、0x99
(0xFE00是 regAddr,另一个是数据)
但是、当我用示波器对总线执行波形处理时、数据的发送方式如下:
0xF0、0x00、0x00 0x08、0xC9、0x99、 0xFE、0x00、0x09、0x10、0x00
似乎有些数据是由 FIFO 或其他数据进行缓冲的。
首先发送6 ~ 11个字节、然后发送1 ~ 5个字节;
PS:我在 ISR 中打印写入 I2C_DATA 的数据、顺序正常;
为什么会发生这种情况? 我的 I2C_BUF 寄存器是默认设置、这意味着 FIFO 被禁用。
这是我的代码。 有人帮助我吗?
ERROR_code I2CDevReg16AddrMultWrite (uint32_t index、uint8_t devAddr、uint16_t regAddr、uint8_t * buf、uint32_t length) { I2CMasterSlaveAddrSet (i2cContext[index].baseAddr、devAddr); i2cContext[index].slaveTData[0]=(regAddr >> 8)& 0xFF; i2cContext[index].slaveTData[1]= regAddr & 0xFF; for (i = 0;i < length;i++) { i2cContext[index].slaveTData[i + 2]= buf[i]; } i2cContext[index].txCompFlag = 0; i2cContext[index].rxCompFlag = 1; i2cContext[index].dataIdx = 0; i2cContext[index].dataMaxT =长度+ 2; I2CSetDataCount (i2cContext[index].baseAddr、length + 2); I2CMasterControl (i2cContext[index].baseAddr、I2C_CFG_MST_TX | I2C_CFG_STOP); I2CMasterIntEnableEx (i2cContext[index].baseAddr、I2C_INT_Transmit 就绪| I2C_INT_NO_ACK); I2CMasterStart (i2cContext[index].baseAddr); } void I2C2Isr (void) { uint32_t status; status = I2CMasterIntStatus (i2cContext[2].baseAddr); I2CMasterIntClearEx (i2cContext[2].baseAddr、(status &~(I2C_INT_RECV_READY | I2C_INT_Transmit 就绪()); IF (STATUS 和 I2C_INT_Transmit 就绪) { I2CMasterDataPut (i2cContext[2].baseAddr、i2cContext[2].slaveTData[i2cContext[2].dataIdx]); I2CMasterIntClearEx (i2cContext[2].baseAddr、I2C_INT_Transmit 就绪); i2cContext[2].dataIdx++; if (i2cContext[2].dataMaxT =i2cContext[2].dataIdx) { I2CMasterIntDisableEx (i2cContext[2].baseAddr、I2C_INT_Transmit 就绪); i2cContext[2].txCompFlag = 1; } }