读大量数据代码/* 批量读取数据 */
void I2C_Buffer_Read(uint8_t ADDR , uint8_t *Data,uint16_t size)
{
I2C_GenerateSTART(I2C, ENABLE);//产生一个起始信号
while(I2C_CheckEvent(I2C, I2C_EVENT_MASTER_MODE_SELECT) != SUCCESS);//等待EV5事件产生
I2C_Send7bitAddress(I2C, EEPROM_I2C_ADDR, I2C_Direction_Transmitter);//发送地址,为写方向
while(I2C_CheckEvent(I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) != SUCCESS);//等待EV6事件产生
I2C_SendData(I2C, ADDR);//发送存放数据的地址
/*(EV8事件是用来检测数据是否正在发送,发送完成会产生一个EV8_2事件,因此我们检测该事件)*/
while(I2C_CheckEvent(I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED) != SUCCESS);//等待EV8_2事件产生
/* 产生第二个信号,用于读取数据 */
I2C_GenerateSTART(I2C, ENABLE);//产生一个起始信号
while(I2C_CheckEvent(I2C, I2C_EVENT_MASTER_MODE_SELECT) != SUCCESS);//等待EV5事件产生
I2C_Send7bitAddress(I2C, EEPROM_I2C_ADDR, I2C_Direction_Receiver);//发送地址,为写方向
while(I2C_CheckEvent(I2C, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED) != SUCCESS);//等待EV6事件产生
while(size--)
{
if(size == 0)
I2C_AcknowledgeConfig(I2C, DISABLE);//非应答信号
else
I2C_AcknowledgeConfig(I2C, ENABLE);//应答信号
/* 读取数据 */
while(I2C_CheckEvent(I2C, I2C_EVENT_MASTER_BYTE_RECEIVED) != SUCCESS);//等待EV7事件产生
*Data++ = I2C_ReceiveData(I2C);
}
I2C_GenerateSTOP(I2C, ENABLE);
}
|