打印

DSPF28035 硬件IIC查询方式写EEPROM时页写不成功(字节写可以)

[复制链接]
1518|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sure220|  楼主 | 2016-6-3 19:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题描述:之前用DSP自带的IIC通过硬件查询方式实现了IIC字节写入EEPROM  读取多个字节,后来想实现EEPROM的页写,用的是24C64  一页也就是32字节。
IIC写多个字节的函数定义:
void I2C_PageWrite(Uint16 MemoryAddress,Uint16* write_buffer,Uint16 Num_dates)
{
        Uint16 i;
   // Setup slave address
        I2caRegs.I2CSAR=0x0050;
   // Setup number of bytes to send
   // number of data bytes to be send + Address
   I2caRegs.I2CCNT =Num_dates+2;
   // Setup memory address data to send
   I2caRegs.I2CDXR =0x00;
   I2caRegs.I2CDXR =MemoryAddress;
        DELAY_US(50);
   for(i=0;i<Num_dates;i++)
   {
   I2caRegs.I2CDXR=write_buffer[i];
   }
   I2caRegs.I2CMDR.all = 0x6E20;
}
函数调用方式
I2C_PageWrite(MemoryLowAddr,MsgBuffer,32);

请高手帮忙看一下是哪个地方出了问题

相关帖子

沙发
洪剑平| | 2016-7-28 14:50 | 只看该作者
Uint16 I2CA_WriteData(Uint16 *Wdata, Uint16        RomAddress, Uint16        number)
{
   Uint16 i;
   //总线是否忙
   if (I2caRegs.I2CSTR.bit.BB == 1)
   {
      return I2C_BUS_BUSY_ERROR;
   }

   //I2CDXR是否准备好接受数据
   while(!I2C_xrdy());

   I2caRegs.I2CSAR = 0x50;
   I2caRegs.I2CCNT = number + 2;
   I2caRegs.I2CMDR.all = 0x6E20;
   //I2caRegs.I2CDXR = RomAddress;
   I2caRegs.I2CDXR = RomAddress/256;
   I2caRegs.I2CDXR = RomAddress%256;
  
   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;
}

这个写多字节的能给我参考下吗?我调试一直不成功,谢谢!

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝