我在看<<ARM应用系统开发详解-基于S3C4510B的系统设计>>第二版的P177页时看见对IIC进行操作有个函数是这样写的
标红色的部分是不是多余的语句?我看那上面不是有个IICCON=START | ACK;而且写了两次同样的。请高手有空的话给详细解释一下~~~;)
多谢多谢^V^
//读取IIC存储器的内容放到数组中
int DrvIicRead(int addr,int size,int *pdata)
{
//写入读取地址
while (!(IICON & BUSY)); //等待总线不忙
IICCON = START | ACK; //开始,并且ACK使能
IICBUF = IIC_DEV_0 |S_WRITE ;
while (!(IICON & BF)); //等待缓冲为空
IICBUF = (int) (addr & 0xFF); //send lsb address
while (!(IICON & BF)); //等待缓冲为空
IICCON = RESTART ; //重复开始
IICCON = START | ACK ; //开始,并且ACK使能
IICBUF = IIC_DEV_0 |S_READ ;
while (!(IICON & BF)); //等待缓冲为空
IICON = ACK; //为多次读取设置ACK
while (!(IICON & BF)); //等待缓冲为空
for(i=0;i<size;i++) //读取数据
{
*padta++ = IICBUF;
while (!(IICON & BF)); //等待缓冲为空
}
IICON = NOACK; //清除ACK标记
while (!(IICON & BF)); //等待缓冲为空
IICON = STOP; //IIC总线停止
}