HRESULT CVIFUNC I2C_ReStart(unsigned char addrss)
{
HRESULT __result;
//入口:SDA=SCL=0
I2C_SetSDA();//首先拉高SDA, 这样才能保证在SCL=1时SDA下跳构成再次复位条件即复位
I2C_SetSCL();//然后拉高SCL, 保证SDA在SCL=1时跳变,拉高时钟(必须在SDA=1时)
I2C_ClrSDA();//首先拉低SDA.必须按次序!!!
I2C_ClrSCL();//然后拉低SCL,构成I2C从机内部中断并唤醒
I2C_ReadWriteByte (addrss | 1);//强行发送I2C读地址,SDA=SCL=0
__result =I2C_GetAck();//取从机ACK信号
if (__result == S_OK)
{
Hot_I2CErrorState = I2C_MT_SLA_ACK;//已发送SLA+W,且已接收ACK
}
else
{
Hot_I2CErrorState = I2C_MT_SLA_NACK;//已发送SLA+W,且未接收ACK
I2C_Stop ();
}
return __result;
} |