主题 : 为什么iic通信发两次地址啊? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 90802
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
贡献值: 0 点
综合积分: 14 分
注册时间: 2013-04-25
最后登录: 2013-07-10
楼主  发表于: 2013-05-11 11:08

 为什么iic通信发两次地址啊?

  _iicMode      = WRDATA;//写数据模式
    _iicPt        = 0;
    _iicData[0]   = (U8)addr;
    _iicData[1]   = (U8)data;
    _iicDataCount = 2;//中断里写两个数据(地址)
    
    rIICDS   = (U8)slvAddr;                 //slvAddr=0xa0
    rIICSTAT = 0xf0;                    //11MasTx,1Start,1enable rx/tx(使能中断)首先发送从设备地址,在中断函数里发送数据
      //Clearing the pending bit isn't needed because the pending bit has been cleared.
    
    while(_iicDataCount!=-1);//等待主发送模式停止,在中断函数里进行的



到这里 iic发的数据应该就已经发出去了,下面的代码是干嘛用的啊,(看着就是吧slave地址再发一遍,不知道目的何在?)

    _iicMode = POLLACK;//MasTx condition  has Stoped,等待ACK应答模式,有应答表示从设备已经收到

while(1)
    {
        rIICDS     = slvAddr;            //slvAddr=0xa0
        _iicStatus = 0x100;                //IICSTAT clear?
        rIICSTAT   = 0xf0;              //MasTx,Start
        rIICCON    = 0xaf;              //Resumes IIC operation.
          
        while(_iicStatus==0x100);        //Wait until IICSTAT change
          
        if(!(_iicStatus&0x1))
            break;                      //When ACK is received
    }