我在100us 的循环中以10个字节读取 I2C 接收寄存器。 但每次我开始读取时、只要写入地址字节、前三个字节就会过快。 其余字节按预期相差100us。
我的 I2C 频率为300k。 这是逻辑分析仪输出。
顶部的一个是 SCL 线路、第二个是 SDA 线路。
数据字节用蓝色方块表示、其中包括地址字节、R 在蓝色方块顶部表示。
底部的平方线显示发送地址字节后每个读取周期的开始。
您可以看到、在读取循环开始之前、两个字节位于读取循环开始之前。
为什么会发生这种情况。
这是读取开始代码
if (I2caRegs.I2CMDR.bit.STP==0){
I2caRegs.I2CSAR =地址;
I2caRegs.I2CCNT =数据长度;
I2caRegs.I2CMDR.All=0x6C20;
}
这是数据读取循环代码
if (I2cRegs.I2CSTR.bit.RRDY=1){
GpioDataRegs.GPATOGGLE.bit.GPIO24=1;//这用于监视循环的运行。
recevearray[(*v).dataReceveIndex]=I2caRegs.I2CDRR;
(*v).dataReceveIndex++;
}