读大量数据代码- /* 批量读取数据 */
- 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);
- }
|