IIC协议接口在ARM系统下的操作

在做IIC协议测试的时候对于写入的数据通过demo自带的测试函数都能够正确的读取出来,但是通过自己按照IIC协议的流程图写出来的函数也能够把所有的数据读取出来,但是是偶数读一遍,奇数读一遍。交叉着读取出来的。这是不正确的。。调试了好几天都没修正过来。今天我又重新把他的函数重新写了一遍。。关键的部分在while(rIICCON&0x10)这个条件上。。为什么呢?请看这个截图

 
这个是判断是否写中断或者读取中断的标志。。我将把我的代码附上,请大家学习。。
//先传输地址
rIICDS=slavaddr;
rIICSTAT=0xf0;
_iicDataCount=1;
while(_iicDataCount!=-1)
{
if(rIICCON&0x10)
{
 rIICDS = addr;
   for(i=0;i<10;i++);          //for setup time until rising edge of IICSCL
   rIICCON = 0xaf;
   _iicDataCount--;
}
}
这些都是写操作,将slavaddr addr 传输到rIICDS寄存器里面去。。。
/
下面是配置为master Rx 模式。。按照流程操作。
rIICDS=slavaddr;
rIICSTAT=0xb0;
_iicDataCount=1;
_iicPt=0;
while(_iicDataCount!=-1)
{
if(rIICCON&0x10)
{
  if((_iicDataCount--)==0)
   {
    _iicData[_iicPt++] = rIICDS;
           
    rIICSTAT = 0x90;                //Stop MasRx condition
    rIICCON  = 0xaf;                //Resumes IIC operation.
    Delay(1);                       //Wait until stop condtion is in effect.
 
   }     
   _iicData[_iicPt++] = rIICDS;
       //The last data has to be read with no ack.
   if((_iicDataCount)==0)
    rIICCON = 0x2f;                 //Resumes IIC operation with NOACK. 
  else
   rIICCON = 0xaf;                 //Resumes IIC operation with ACK
}
}
*data=_iicData[1];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值