打印
[DSP编程]

I2C地址设置

[复制链接]
1482|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tt163|  楼主 | 2015-10-29 12:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
tt163|  楼主 | 2015-10-29 12:31 | 只看该作者
Uint16 WriteData(Uint16        *Wdata, Uint16 RomAddress, Uint16 number)
{
   Uint16 i;
   if (I2caRegs.I2CSTR.bit.BB == 1)
   {
      return I2C_BUS_BUSY_ERROR;
   }
   while(!I2C_xrdy());
   I2caRegs.I2CSAR = 0x50;
   I2caRegs.I2CCNT = number + 1;
   I2caRegs.I2CDXR = RomAddress;
   I2caRegs.I2CMDR.all = 0x6E20;
   for (i=0; i<number; i++)
   {
      while(!I2C_xrdy());
      I2caRegs.I2CDXR = *Wdata;
      Wdata++;
         if (I2caRegs.I2CSTR.bit.NACK == 1)
                     return        I2C_BUS_BUSY_ERROR;
   }         
   return I2C_SUCCESS;   
}

Uint16 ReadData(Uint16  *RamAddr, Uint16        RomAddress, Uint16 number)
{
   Uint16  i,Temp;

   if (I2caRegs.I2CSTR.bit.BB == 1)
   {
       return I2C_BUS_BUSY_ERROR;
   }
   while(!I2C_xrdy());
   I2caRegs.I2CSAR = 0x50;
   I2caRegs.I2CCNT = 1;
   I2caRegs.I2CDXR = RomAddress;
   I2caRegs.I2CMDR.all = 0x6620;
   if (I2caRegs.I2CSTR.bit.NACK == 1)
                   return        I2C_BUS_BUSY_ERROR;
   DELAY_US(50);               
   while(!I2C_xrdy());
   I2caRegs.I2CSAR = 0x50;
   I2caRegs.I2CCNT = number;         
   I2caRegs.I2CMDR.all = 0x6C20;
   if (I2caRegs.I2CSTR.bit.NACK == 1)
                   return        I2C_BUS_BUSY_ERROR;
   for(i=0;i<number;i++)
   {
      while(!I2C_rrdy());
             Temp = I2caRegs.I2CDRR;
         if (I2caRegs.I2CSTR.bit.NACK == 1)
                     return        I2C_BUS_BUSY_ERROR;
             *RamAddr = Temp;
             RamAddr++;
   }
   return I2C_SUCCESS;
}

Uint16        I2C_xrdy()
{
        Uint16        t;
        t = I2caRegs.I2CSTR.bit.XRDY;
        return t;
}

Uint16        I2C_rrdy()
{
        Uint16        t;
        t = I2caRegs.I2CSTR.bit.RRDY;
        return t;
}

使用特权

评论回复
板凳
tt163|  楼主 | 2015-10-29 12:34 | 只看该作者
目前调用函数为  
AT24C02中
   WriteData(dat,0x60,8);
    DELAY_US(10000);
    ReadData(dat1,0x60,8);
测试Ok
目前调用函数为
WriteData(dat,0x0060,8);
    DELAY_US(10000);
    ReadData(dat1,0x0060,8);
读写都是错误。
   把I2caRegs.I2CCNT = 1;改为2  也是错的
  把 I2caRegs.I2CDXR = RomAddress; 改为高低地址,分别送也是错的

使用特权

评论回复
地板
tt163|  楼主 | 2015-10-30 09:59 | 只看该作者
怎么没人回复啊!自己把它顶上去

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

39

帖子

1

粉丝