您好!
下面的代码段出现问题。 在我们的器件中、一条 I2C 总线上只有一个 EEPROM 器件、没有其他器件。
while (length > 0u)//读取数据字节
{
while ((i2c->STR &(UINT32) I2C_RXRDY)== 0u)
{
}/*等待*/
*data =((uint8)i2c->DRR );
Data++;
长度--;
}
我们将 从 EEPROM 中读取少量数据字节。 将发送读取命令、这是有效的。 我们看到的问题是、代码执行有时会在 以红色突出显示的 while 环路处冻结、并且读取永远不会完成。
作为测试、我们将计数器放入环路以强制退出。 该时间段足够长、因此数据应该可用。 我们还会打印一条消息、指明计数已过期、并且我们将强制退出循环。
执行此操作时、系统始终会正确读取数据。 即使 打印错误消息也是如此。 这意味着、即使 i2c->STR 似乎没有设置位8 (I2C_RXRDY)、数据也必须可用。 我们可以看到 IDE 中的该位为0。
有人能提供一些帮助/想法、说明为什么 I2C_RXRDY 位 可能 无法设置、即使数据似乎 可用。
谢谢
Malcolm