|
shuiyan大侠麻烦帮我再看一下我对IIC_READ的理解
是否正确:
流程(单指IIC读的过程):
1、先设置从机地址,状态: I2cCurSla = I2cSla ? 0x01;
I2cStatus = I2C_STATUS_SETADDR;
2、使能IIC
StartI2C(I2cCurSla); 这时CPU设置需要等待从机的应答
3、挂起中断 WaitForSingleObject,等待从机应答(主机设置开IIC后,从机做的回应),ACK或者NAK
2秒钟没有应答则说明开IIC失败
4、应答产生,开中断,使能事件SetEvent(gI2CEvent);
5、进入FOR循环体,先设置接收数据是否需要应答ACK或者不需要应答NAK
即: if (count == (dwNumBytes - 1))
IIC_StartRecByteNA();
else
IIC_StartRecByteA();
6、接收数据前中断挂起 WaitForSingleObject,等待数据传送过来,
7、硬件接收到数据,触发中断,在中断中使能事件SetEvent(gI2CEvent);
程序开始接受数据,并将数据存在pReadBuffer中
这次理解应该对了吧
再问一下:
程序没有对ACK应答位进行判断,是硬件自己判断的吗?
shuiyan大侠再次感谢啦!
|
|