sure220 发表于 2016-6-3 19:42

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

问题描述:之前用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;
   }
   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]
查看完整版本: DSPF28035 硬件IIC查询方式写EEPROM时页写不成功(字节写可以)