|
下载帖子中中断方式的代码,发现错误中断处理中只对两种情况进行处理,查阅I2C_SR1的寄存器说明增加了超时错误处理,但调试没发现进入该中断。
还请论坛里的高手指教!
void i2c1_err_isr()
{
if (I2C_GetFlagStatus(I2C1, I2C_FLAG_AF))
{
if (check_begin)
I2C_GenerateSTART(I2C1, ENABLE);
else if (I2C1->SR2 & 0x01)
{
I2C_GenerateSTOP(I2C1, ENABLE);
i2c_comm_state = COMM_EXIT;
PV_flag_1 = 0;
}
I2C_ClearFlag(I2C1, I2C_FLAG_AF);
}
if (I2C_GetFlagStatus(I2C1, I2C_FLAG_BERR))
{
if (I2C1->SR2 & 0x01)
{
I2C_GenerateSTOP(I2C1, ENABLE);
i2c_comm_state = COMM_EXIT;
PV_flag_1 = 0;
}
I2C_ClearFlag(I2C1, I2C_FLAG_BERR);
}
/*以下超时错误处理代码为自行添加*/
if (I2C_GetFlagStatus(I2C1, I2C_FLAG_TIMEOUT))
{
//主模式下设置该位,硬件发出停止条件
I2C1->SR1 |= 0x4000;
I2C_ClearFlag(I2C1, I2C_FLAG_TIMEOUT);
}
} |
|