主题中讨论的其他器件:TCA6424A
大家好、
我们已设置 MCU I2C 模块为主模式、400kbps、Rm=0、并连接到 TI TCA6424A I/O 扩展器器件。 总线信号很完美、我们的设置也很好、除了在多小时运行期间、状态寄存器中的 BB 位不希望在大约0.5%至0.6%的时间内从忙状态中释放。
在确认 BB=1是一个问题之前、有一个2ms 的超时、这是非常长的。 当 BB 不想自行释放时、我们执行 I2CMDR_BIT.NIR = 0;然后 I2CMDR_BIT.NIR = 1;我们很乐意再次访问、直至下一次出现为止、之后始终释放总线、这意味着 BB=1永远不会连续发生。
只是为了了解访问次数、每次启动新的写入或读取操作时、对 BB 位的校验都会执行3次、每50ms (20Hz)。
对器件进行读取或写入时都会发生这种情况。 下面是每个写入或读取操作之前被调用的函数:
void SetTxMode(u8 count) { I2CCNT = count; //method 1: working fine except bus busy problem I2CMDR_bit.MST = 1; // master mode I2CMDR_bit.TRX = 1; // transmit mode I2CMDR_bit.STT = 1; // send START condition + slave address + TRX state I2CMDR_bit.STP = 1; // send STOP condition once I2CCNT reaches 0 } void SetRxMode(u8 count) { I2CCNT = count; //method 1: working fine except bus busy problem I2CMDR_bit.MST = 1; // master mode I2CMDR_bit.TRX = 0; // receive mode I2CMDR_bit.STT = 1; // send START condition + slave address + TRX state I2CMDR_bit.STP = 1; // send STOP condition once I2CCNT reaches 0 }
我们现在已经有很多个月了。 有人可以帮帮我吗?