|
发表于 2012-4-8 21:20:20
|
显示全部楼层
能请大侠帮我解答下为什么写函数没有应答呢?劳烦您看下我下面的问号?
疑虑一 I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; //设置是否开启ACK响应
/*允许1字节1应答模式*/
I2C_AcknowledgeConfig(I2C1, ENABLE); //使能I2C接口响应
以上这两句话C语言是不是软件来开启I2C1的应答功能?第二句话注释:允许一字节一应答模式,那为什么在下面的写页函数没有见到应答呢????
**函数名:I2C_PageWrite_24C
**功能:写入一页(以内)
**注意事项:此函数供群写入调用
*************************************************/
void I2C_PageWrite_24C(u8 addr,u8* pBuffer, u8 no)
{
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); //等待总线空闲
/*起始位*/
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
#ifdef AT24C01A
/*器件地址(写)*/
I2C_Send7bitAddress(I2C1, EEPROM_ADDR, I2C_Direction_Transmitter); ??本来这句话后面不是应该有应答的吗?
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
/*写地址值*/
I2C_SendData(I2C1, addr); ??这句话后面不是也应该有应答的吗?
while(! I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
#else
I2C_Send7bitAddress(I2C1, addr<<1, I2C_Direction_Transmitter);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
#endif
while(no--)
{
I2C_SendData(I2C1, *pBuffer); ??发送一个字节的数据不是也应该有一个应答吗?
pBuffer++;
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
}
/*停止位*/
I2C_GenerateSTOP(I2C1, ENABLE);
}
|
|