看了学习资料里的IIC的视频,然后自己去琢磨代码。硬件I2C中有一段代码就是不太理解,感觉与序列图上的也并不一致。下面附上问题。
void I2C_EE_PageWrite(u8* pBuffer, u8 WriteAddr, u8 NumByteToWrite)
{
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); // Added by Najoua 27/08/2008
/* Send START condition */
I2C_GenerateSTART(I2C1, ENABLE);
/* Test on EV5 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
/* Send EEPROM address for write */
I2C_Send7bitAddress(I2C1, EEPROM_ADDRESS, I2C_Direction_Transmitter);
/* Test on EV6 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
/* Send the EEPROM's internal address to write to */
I2C_SendData(I2C1, WriteAddr);
/* Test on EV8 and clear it */
while(! I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
/* While there is data to be written */
while(NumByteToWrite--)
{
/* Send the current byte */
I2C_SendData(I2C1, *pBuffer);
/* Point to the next byte to be written */
pBuffer++;
/* Test on EV8 and clear it */
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
}
/* Send STOP condition */
I2C_GenerateSTOP(I2C1, ENABLE);
}
这个是一个page write的函数,根据视频上的来说,这是根据序列图来的。但是这段代码好像并不能和序列图一 一对应?代码上是确认EV6事件后,发送数据。然后确认EV8事件。但是从我图片上来看,他EV6之后有个EV8_1,这里是一个问题。这个为什么代码里是没有?是不需要吗?第二个问题。EV8_1之后是EV8和数据1并排的一个组合,这是指什么意思呢?我看代码里的意思应该是发送完数据之后在确认EV8.。。。总的来说就是为什么和序列图不对应呢。可能问的比较LOW。但是希望大家能帮我解答一下,谢谢~ |