我用GPIO模拟iic在发送完一个字节后延时5毫秒可以发送成功,但是根据iic协议规定可以通过检测总线忙来判断是否可以继续写入。但是当我取消延时,检测总线是否忙时发送就会出错。
void ROMByteWrite(uint8_t address,uint8_t dat)
{
I2CBusy(); //判忙
I2CStart();
I2CWriteByte(0xae);
if(I2CWaitACK()==0)
printf("1");
I2CWriteByte(address);
if(I2CWaitACK()==0)
printf("2");
I2CWriteByte(dat);
if(I2CWaitACK()==0)
printf("3");
I2CStop();
// ST_Delay_ms(5); //发送延时
}
void I2CBusy(void)
{
SCLIN();
SDAIN();
while(!(READ_SDA&&READ_SCL));
SCLOUT();
SDAOUT();
}
|