[DSP编程] I2C地址设置

[复制链接]
 楼主| tt163 发表于 2015-10-29 12:30 | 显示全部楼层 |阅读模式
现在用28335与EEPROM通过I2C通信。程序在AT24C02上面测试OK,但是在AT24C256上,读写不正常。原因是24C02是8位地址访问,24C256是16为地址访问。但是现在程序怎么改,请大家给点建议。谢谢
 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部

11

主题

39

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部