看手册的话,是单独使用的,
这里面显示超时模块的时钟源是PCLK但这个计数应该很快吧,我这里PCLK时钟为72MHz,I2C通信速率为100K,这个很容易就超时吧,之前我在检测到超时时添加了打印信息的输出,如下:
void I2C1_IRQHandler(void)
{
uint32_t u32Status;
u32Status = I2C_GET_STATUS(I2C_EEPROM);
if(I2C_GET_TIMEOUT_FLAG(I2C_EEPROM))
{
/* Clear I2C0 Timeout Flag */
printf("time out.\n");
I2C_ClearTimeoutFlag(I2C_EEPROM);
}
else
{
if(s_I2CHandlerFn != NULL)
s_I2CHandlerFn(u32Status);
}
}
会一直输出time out,但是去掉打印信息I2C的读写流程是不受影响的(虽然使能了超时计数器)。但是如果在检测到超时那里增加I2C_STOP()函数,读写就会失败(因为进入了I2C_STOP)。所以搞不清这个超时计数器到底起没起作用。。。
|