|
void I2C_EE_WaitEepromStandbyState(void)
{
__IO uint16_t SR1_Tmp = 0;
do
{
/* Send START condition */
I2C_GenerateSTART(I2C1, ENABLE);
/* Read I2C1 SR1 register */
SR1_Tmp = I2C_ReadRegister(I2C1, I2C_Register_SR1); //就是这里,这句话有什么用呢?
/* Send EEPROM address for write */
I2C_Send7bitAddress(I2C1, EEPROM_ADDRESS, I2C_Direction_Transmitter);
}while(!(I2C_ReadRegister(I2C1, I2C_Register_SR1) & 0x0002));
/* Clear AF flag */
I2C_ClearFlag(I2C1, I2C_FLAG_AF);
/* STOP condition */
I2C_GenerateSTOP(I2C1, ENABLE);
}
我查了参考手册其中有一句
ADDR :地址已被发送( 主模式)/ 地址匹配( 从模式) (Address sent (master mode)/matched
(slave mode))
位1
在软件读取SR1 寄存器后,对SR2 寄存器的读操作将清除该位,或当PE=0时,由硬件清除该
位。
地址匹配(从模式)
0:地址不匹配或没有收到地址;
1:收到的地址匹配。
– 当收到的从地址与OAR寄存器中的内容相匹配、或发生广播呼叫、或SMBus设备默认地址
或SMBus主机识别出SMBus提醒时,硬件就将该位置’1’( 当对应的设置被使能时)。
如果是想要清除SR1的地1位ADDR,那么在读取SR1后,不是应该按照要求再读取SR2么?
如果不是这个目的,那么要这句话有什么用呢? |