This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F28034:有关 TMS320F28034模型 I2C 控制 AT24C08的问题、请参阅?

Guru**** 2487425 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/752755/ccs-tms320f28034-question-about-tms320f28034-model-i2c-control-at24c08-for-read-or-write

器件型号:TMS320F28034

工具/软件:Code Composer Studio

尊敬的 TI 团队:

 我作为同事的问题:

AT24C08 A0、A1、A2、WP 的引 脚连接 GND

#define EEPROM_SLAVE_ADDR     (0xA0 >> 1)(__LW_AT__p0 P1=00:块0的默认通信)

空 Init_I2C (空)


 GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0;   //启用 GPIO32的上拉电阻(SDAA)
 GpioCtrlRegs.GPBPUD.bit.GPIO33 = 0;   //启用 GPIO33的上拉电阻器(SCLA)
 GpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 3; //异步输入 GPIO32 (SDAA)
   GpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 3; //异步输入 GPIO33 (SCLA)
 GpioCtrlRegs.GPBMUX1.bit.GPIO32=1;  //将 GPIO32配置为 SDAA 操作
 GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 1;  //为 SCLA 操作配置 GPIO33

   //初始化 I2C
   I2caRegs.I2CMDR.ALL = 0;//I2C 复位

   I2caRegs.I2CPSC.all = 5;     //预分频器-在模块时需要7-12MHz clk 60MHz/(5+1)=10MHz 系统时钟为60M,、使用内部振荡器1
  
   //clk=100kHz
   I2caRegs.I2CCLKL = 50;   //注意:必须为非零
   I2caRegs.I2CCLKH = 40;   //注意:必须为非零

  // I2caRegs.I2CIER.All = 0x24;  //启用 SCD 和 ARDY __interrupts
   I2caRegs.I2CIER.ALL = 0x00;  //无__interrupts

   I2caRegs.I2CMDR.bit.IRS = 1;//I2C 使能     SCL 的引脚是否能够在 设置 IRS 后检测方器件?   如果 不是 、SCL 何时可以检测到方器件???
   I2caRegs.I2CMDR.bit.FREE = 1;//中断  
   I2caRegs.I2CFFTX.ALL = 0x6040; //启用 FIFO 模式和 TXFIFO
   I2caRegs.I2CFFRX.ALL = 0x2044; //启用 RXFIFO、清除 RXFFINT、
  

CURR_Msg.MsgStatus = I2C_MSGSTAT_SEND_WITHSTOP;
   CURR_Msg.SlaveAddress = EEPROM_SLAVE_ADDR;
  // CURR_Msg.MemoryHighAddr = paramData[1];
   CURR_Msg.MemoryLowAddr = paramData[2];
   CURR_Msg.NumOfBytes =1;
   CURR_Msg.MsgBuffer[0]= paramData[4];
   I2CA_WriteData (&CURR_Msg);//使用同函数


uint16 I2CA_WriteData (struct I2CMSG* msg)

  uint16 i;

  //等待直到 STP 位从任何先前的主设备通信中清零。
  //模块清除该位的操作被延迟到 SCD 位之后
  //设置。 如果在启动新消息之前未选中此位
  // I2C 可能会被混淆。
  IF (I2caRegs.I2CMDR.bit.STP==1)
  {
     返回 I2C_STP_NOT _READY_ERROR;
  }

  //设置从地址
  I2caRegs.I2CSAR = msg->SlaveAddress;

  //检查总线是否占线
  IF (I2cRegs.I2CSTR.bit.BB = 1)
  {
     返回 I2C_BUS_BUS_BUSY_ERROR;
  }

  //设置要发送的字节数
  // MsgBuffer +地址

   I2caRegs.I2CCNT = msg->NumOfBytes+1;
 //  I2caRegs.I2CDXR = msg->MemoryHighAddr;
  //设置要发送的数据
  I2caRegs.I2CDXR = msg->MemoryLowAddr;

  对于(i=0;i NumOfBytes;i++)
  {
     I2caRegs.I2CDXR =*(msg->MsgBuffer+I);
  }
  I2caRegs.I2CFFTX.bit.TXFFINTCLR =1;
  /*
   * 清除标志位
   *
  //将 START 作为主发送器发送
  I2caRegs.I2CMDR.ALL = 0x6E20;//软件运行此操作,SCL 和 SDA 的引脚 无法检测 软件,为什么? I2CFFTX.bit.TXFFST =I2CCNT,为什么???

  while (I2caRegs.I2CFFTX.bit.TXFFST!=0){//procedure stop this???????

系列上调试过的没有什么问题,只是更改了一个EEPROM内部写入的地址,望指点 μ s
  if (I2cRegs.I2CSTR.bit.SCD = 1)
 I2caRegs.I2CSTR.bit.SCD = 1;
/*
 * SCD=1清楚SCD 和NACK位
 *

  返回 I2C_Success;

上面的过程 已经在 TMS320F28377控制 AT24C64上进行了测试、并且 RESUALT 是正常的。但是在这种情况下不起作用、

 

提前感谢您!

此致!

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您的问题是什么? 我不清楚上述内容。

    请提供详细说明。

    最棒的
    Kevin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    上述过程不能写入或读取 At24C08,为什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    很难用您提供的信息来表达。 这是不是 I2C_EEPROM 示例而无需修改?

    我建议查看 F2803x I2C 指南以了解正在使用的寄存器、并更好地了解示例中的情况:

    www.ti.com/.../sprufz9d.pdf

    此外、您还应查看 At24C08数据表以了解器件所需的数据格式。

    最棒的
    Kevin