21ic问答首页 - 国民技术系列的MCU硬件I2C例程逻辑
国民技术系列的MCU硬件I2C例程逻辑
ccccccczq2022-08-11
不是很理解这里的逻辑,在还有三个数的时候就DISABLE了ACK的应答,之后接收数据也不影响,硬件部分的逻辑是怎么算的呢 if (len == 3)
{
I2CTimeout = I2CT_LONG_TIMEOUT;
while (!I2C_GetFlag(I2C1, I2C_FLAG_BYTEF))
{
if ((I2CTimeout--) == 0)
{
CommTimeOut_CallBack(MASTER_BYTEF);
}
}
I2C_ConfigAck(I2C1, DISABLE);
*recvBufferPtr++ = I2C_RecvData(I2C1);
len--;
I2CTimeout = I2CT_LONG_TIMEOUT;
while (!I2C_GetFlag(I2C1, I2C_FLAG_BYTEF))
{
if ((I2CTimeout--) == 0)
{
CommTimeOut_CallBack(MASTER_BYTEF);
}
}
if (Comm_Flag == C_READY)
{
Comm_Flag = C_STOP_BIT;
I2C_GenerateStop(I2C1, ENABLE);
}
*recvBufferPtr++ = I2C_RecvData(I2C1);
len--;
*recvBufferPtr++ = I2C_RecvData(I2C1);
len--;
break;
}
{
I2CTimeout = I2CT_LONG_TIMEOUT;
while (!I2C_GetFlag(I2C1, I2C_FLAG_BYTEF))
{
if ((I2CTimeout--) == 0)
{
CommTimeOut_CallBack(MASTER_BYTEF);
}
}
I2C_ConfigAck(I2C1, DISABLE);
*recvBufferPtr++ = I2C_RecvData(I2C1);
len--;
I2CTimeout = I2CT_LONG_TIMEOUT;
while (!I2C_GetFlag(I2C1, I2C_FLAG_BYTEF))
{
if ((I2CTimeout--) == 0)
{
CommTimeOut_CallBack(MASTER_BYTEF);
}
}
if (Comm_Flag == C_READY)
{
Comm_Flag = C_STOP_BIT;
I2C_GenerateStop(I2C1, ENABLE);
}
*recvBufferPtr++ = I2C_RecvData(I2C1);
len--;
*recvBufferPtr++ = I2C_RecvData(I2C1);
len--;
break;
}
您需要登录后才可以回复 登录 | 注册