主题中讨论的其他器件:PCF8574
大家好、
我根据您的 EEPROM 示例编写了自己的库来处理 i2c、该示例使用中断和 API 来处理79D。 这是主循环中的代码:
while (1) { COUNTER++; uint16_t DATA[]={0x0F、0x1F、0x2F、0x3F、0x4F};
I2C_lib_MasterWriteRead (&I2cMaster、SLAVE_ADDRESS、DATA、5、0); while (I2cMaster.status!= I2CM_STATUS_READY); I2C_lib_MasterWriteRead (&I2cMaster、SLAVE_ADDRESS、DATA、0、5); while (I2cMaster.status!= I2CM_STATUS_READY); I2C_lib_MasterWriteRead (&I2cMaster、EEPROM_address、data、2、1); while (I2cMaster.status!= I2CM_STATUS_READY); }
当 I2C 以400kHz 的频率运行时、此代码工作正常。 但是、当我将 I2C 速度设置为100kHz 时、它在一个事务后会冻结 while 环路。 当我在 WriteRead 函数之间设置一些延迟时、它的工作频率为100kHz、例如:
对于(I = 0;I < 100000);I++) COUNTER++
但是、正如我说过的、它在400kHz 频率下工作。 我可以在示波器和逻辑分析仪上看到 SDA 线。 当以400kHz 的频率运行时、一切都正常、例如启动、ACK 和停止条件。
我不知道为什么它在100kHz 频率下不工作。 我正在使用 TI 提供的 API、并且我正在使用中断、因此单个位应该不会打扰我...
我感谢你的任何帮助。
BR、
Dawid。
PS: 我的代码位于附件中。