TI中文支持网
TI专业的中文技术问题搜集分享网站

I2C EEPROM

我在进行写操作时,程序一直处在I2caRegs.I2CMDR.bit.STP=1;状态,导致我无法进行写操作,

I2CA_WriteData(struct I2CMSG *msg) 

  int16 i;

while (I2caRegs.I2CMDR.bit.STP == 1)
{

return i_ERROR;
} }

mangui zhang:

硬件设计有问题吗    IIC上有没有上拉电阻等  

附件是详细指导说明   看看

我在进行写操作时,程序一直处在I2caRegs.I2CMDR.bit.STP=1;状态,导致我无法进行写操作,

I2CA_WriteData(struct I2CMSG *msg) 

  int16 i;

while (I2caRegs.I2CMDR.bit.STP == 1)
{

return i_ERROR;
} }

user3900194:

我再单步调试例子程序时,进行写操作:当运行完I2caRegs.I2CMDR.all = 0x6E20;—–当运行完这一步后,我通过watch window,看,为何I2caRegs.I2CMDR.all = 0x4220?,请看源程序:

Uint16 I2CA_WriteData(struct I2CMSG *msg){   Uint16 i;

   // Wait until the STP bit is cleared from any previous master communication.   // Clearing of this bit by the module is delayed until after the SCD bit is   // set. If this bit is not checked prior to initiating a new message, the   // I2C could get confused.   if (I2caRegs.I2CMDR.bit.STP == 1)   {      return I2C_STP_NOT_READY_ERROR;   }

   // Setup slave address   I2caRegs.I2CSAR = msg->SlaveAddress;

   // Check if bus busy   if (I2caRegs.I2CSTR.bit.BB == 1)   {      return I2C_BUS_BUSY_ERROR;   }

   // Setup number of bytes to send   // MsgBuffer + Address   I2caRegs.I2CCNT = msg->NumOfBytes+2;

   // Setup data to send   I2caRegs.I2CDXR = msg->MemoryHighAddr;   I2caRegs.I2CDXR = msg->MemoryLowAddr;// for (i=0; i<msg->NumOfBytes-2; i++)   for (i=0; i<msg->NumOfBytes; i++)

   {      I2caRegs.I2CDXR = *(msg->MsgBuffer+i);   }

   // Send start as master transmitter   I2caRegs.I2CMDR.all = 0x6E20;—–当运行完这一步后,我通过watch window,看,为何I2caRegs.I2CMDR.all = 0x4220?

   return I2C_SUCCESS;}

我在进行写操作时,程序一直处在I2caRegs.I2CMDR.bit.STP=1;状态,导致我无法进行写操作,

I2CA_WriteData(struct I2CMSG *msg) 

  int16 i;

while (I2caRegs.I2CMDR.bit.STP == 1)
{

return i_ERROR;
} }

rookiecalf:

回复 user3900194:

探索者

我再单步调试例子程序时,进行写操作:当运行完I2caRegs.I2CMDR.all = 0x6E20;—–当运行完这一步后,我通过watch window,看,为何I2caRegs.I2CMDR.all = 0x4220?,请看源程序:

Uint16 I2CA_WriteData(struct I2CMSG *msg){   Uint16 i;

   // Wait until the STP bit is cleared from any previous master communication.   // Clearing of this bit by the module is delayed until after the SCD bit is   // set. If this bit is not checked prior to initiating a new message, the   // I2C could get confused.   if (I2caRegs.I2CMDR.bit.STP == 1)   {      return I2C_STP_NOT_READY_ERROR;   }

   // Setup slave address   I2caRegs.I2CSAR = msg->SlaveAddress;

   // Check if bus busy   if (I2caRegs.I2CSTR.bit.BB == 1)   {      return I2C_BUS_BUSY_ERROR;   }

   // Setup number of bytes to send   // MsgBuffer + Address   I2caRegs.I2CCNT = msg->NumOfBytes+2;

   // Setup data to send   I2caRegs.I2CDXR = msg->MemoryHighAddr;   I2caRegs.I2CDXR = msg->MemoryLowAddr;// for (i=0; i<msg->NumOfBytes-2; i++)   for (i=0; i<msg->NumOfBytes; i++)

   {      I2caRegs.I2CDXR = *(msg->MsgBuffer+i);   }

   // Send start as master transmitter   I2caRegs.I2CMDR.all = 0x6E20;—–当运行完这一步后,我通过watch window,看,为何I2caRegs.I2CMDR.all = 0x4220?

   return I2C_SUCCESS;}

我在进行写操作时,程序一直处在I2caRegs.I2CMDR.bit.STP=1;状态,导致我无法进行写操作,

I2CA_WriteData(struct I2CMSG *msg) 

  int16 i;

while (I2caRegs.I2CMDR.bit.STP == 1)
{

return i_ERROR;
} }

user3900194:

回复 mangui zhang:

硬件加了上拉电阻10k,同样的程序在不同的2808板子上可以,但是在28035上就会I2caRegs.I2CMDR.bit.STP =1,是否等于1软件是无法配置的吧?

Uint16 I2CA_WriteData(struct I2CMSG *msg){   Uint16 i;

   if (I2caRegs.I2CMDR.bit.STP == 1)   {      return I2C_STP_NOT_READY_ERROR;   }

   // Setup slave address

。。。。。。。。。。。。。。。。。。。

}

我在进行写操作时,程序一直处在I2caRegs.I2CMDR.bit.STP=1;状态,导致我无法进行写操作,

I2CA_WriteData(struct I2CMSG *msg) 

  int16 i;

while (I2caRegs.I2CMDR.bit.STP == 1)
{

return i_ERROR;
} }

user3900194:

回复 rookiecalf:

恩,谢谢,我还发现在ccs中单步调试时 读取数据时 I2caRegs.I2CSTR.bit.ARDY=0;而全速运行模式时 I2caRegs.I2CSTR.bit.ARDY=1,为何有这样的区别啊

赞(0)
未经允许不得转载:TI中文支持网 » I2C EEPROM
分享到: 更多 (0)