|
/*
*********************************************************************************************************
* 函 数 名: SI4730_WaitStatus80
* 功能说明: 读取Si4730的状态,等于0x80时返回。
* 形 参: _uiTimeOut : 轮询次数
* _ucStopEn : 状态0x80检测成功后,是否发送STOP
* 返 回 值: 0 失败(器件无应答), > 1 成功, 数字表示实际轮询次数
*********************************************************************************************************
*/
uint32_t SI4730_WaitStatus80(uint32_t _uiTimeOut, uint8_t _ucStopEn)
{
uint8_t ack;
uint8_t status;
uint32_t i;
/* 等待器件状态为 0x80 */
for (i = 0; i < _uiTimeOut; i++)
{
i2c_Start();
i2c_SendByte(I2C_ADDR_SI4730_R); /* 读 */
ack = i2c_WaitAck();
if (ack == 1)
{
i2c_NAck();
i2c_Stop();
return 0; /* 器件无应答,失败 */
}
status = i2c_ReadByte(); // 这个地方 始终都没有读出 0x80, 0x81 ,不知道是什么情况 ???????????????????????????????????????????????????????
if ((status == 0x80) || (status == 0x81)) /* 0x81 是为了执行0x23指令 读取信号质量 */
{
break;
}
}
if (i == _uiTimeOut)
{
i2c_NAck();
i2c_Stop();
return 0; /* 超时了,失败 */
}
/* 成功了, 处理一下第1次就成功的情况 */
if (i == 0)
{
i = 1;
}
/* 因为有些命令还需要读取返回值,因此此处根据形参决定是否发送STOP */
if (_ucStopEn == 1)
{
i2c_NAck();
i2c_Stop();
}
return i;
} |
|