程序如下:
为一个I2C传输检测程序
I2C_Event=(INT16U)0x1701; /*!< EV5: SB=1 */
ErrorStatus I2C_CheckEvent(I2C_Event_TypeDef I2C_Event)
{
INT8U flag1 = 0x00;
INT8U flag2 = 0x00;
ErrorStatus status = ERROR;
flag1 = I2C_SR1;
flag2 = I2C_SR2;
if((I2C_Event & (INT16U)0x0F00) == 0x0700)
{
if(flag1 & (INT8U)I2C_Event)
{
status = SUCCESS;
}
else
{
status = ERROR;
}
}
else
{
if(flag2 & (INT8U)I2C_Event)
{
status = SUCCESS;
}
else
{
status = ERROR;
}
}
return status;
}
求教:
1. “if(flag2 & (INT8U)I2C_Event)”,根据上下环境,这一段是判断I2C_SR2的bit2:0。根据我的理解,如果这三位有任意一位置‘1’,应该是status=ERROR才是,还请高手讲解一下此处设为status=SUCCESS的原因;
2. 为什么会用这种判断方法?这种方法的编程思路是怎样的,可否指点一下?
谢谢 |