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/TMS320F28069:I2C 通信 无 fifo 至 mpu6050 (从属)

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/765271/ccs-tms320f28069-i2c-comm-without-fifo-to-mpu6050-slave

器件型号:TMS320F28069

工具/软件:Code Composer Studio

现在、我使用的是 tms320f28069、我 想通过 i2c 与从设备进行通信、无需 fifo 寄存器。

我 要使用的代码是  

初始化 i2c  

无效
InitI2C (空)

I2caRegs.I2CSAR = 0x0068;//从器件地址- EEPROM 控制代码
I2caRegs.I2CPSC.all = 0x08;//预分频器-模块时需要7-12MHz
I2caRegs.I2CCLKL = 10;//155->50kHz// 60-100kzh // 10;400kHz //注意:必须为非零
I2caRegs.I2CCLKH = 05;//65->50Kzh//30-100kHz//5;400kHz //注意:必须为非零
I2caRegs.I2CIER.ALL = 0x24;//启用 SCD 和 ARDY 中断

I2caRegs.I2CMDR.ALL = 0x0020;

// I2caRegs.I2CFFTX.ALL = 0x6000;//启用 FIFO 模式和 TXFIFO

//I2caRegs.I2CMDR.All=0x6E20;
// I2caRegs.I2CFFRX.ALL = 0x2040;//启用 RXFIFO、清除 RXFFINT、2040
I2caRegs.I2CMDR.bit.IRS=1;

写入 i2c

 

空 I2CA_WriteData_1 (无符号短整型寄存器、无符号短整型数据)

while (I2cRegs.I2CSTR.bit.BB = 1);
I2caRegs.I2CCNT = 2;//设置要发送的字节数
I2caRegs.I2CDXR = reg;
I2caRegs.I2CMDR.ALL = 0x6620;
I2caRegs.I2CDXR =数据;
I2caRegs.I2CMDR.ALL = 0x6E20;
while (I2cRegs.I2CSTR.bit.SCD=0);

读取 i2c\

void I2CA_ReadData5 (uint16 reg,uint16 ReadCount,uint8 *缓冲区)

uint16 i;
// delay_loop ();
// I2CA_WriteData_1 (0x68、0x04);
delay_loop();
I2CA_WriteData_1 (0x6A、0x45);

while (I2cRegs.I2CSTR.bit.BB = 1);
I2caRegs.I2CCNT = 1;//设置要发送的字节数
I2caRegs.I2CDXR = reg;
I2caRegs.I2CMDR.ALL = 0x6620;
// I2caRegs.I2CDXR=数据;
// I2caRegs.I2CMDR.All=0x6E20;
// while (I2caRegs.I2CSTR.bit.BB = 1);
while (I2caRegs.I2CMDR.bit.STP!=0);
delay_loop();
// I2caRegs.I2CCNT = 4;//设置要发送的字节数
// buffer=I2caRegs.I2CDRR;
// I2caRegs.I2CMDR.All=0x6C20;
// while (I2cRegs.I2CSTR.bit.SCD = 0);
I2caRegs.I2CCNT = 4;//只读取一个字节数据

// while (!I2caRegs.I2CSTR.bit.ARDY);
if (I2cRegs.I2CSTR.bit.nack = 1)

I2caRegs.I2CSTR.All = I2C_CLR_Nack_bit;// 0x0002

I2caRegs.I2CMDR.bit.STP= 0;// CNT=0时停止位

while (!I2caRegs.I2CSTR.bit.SCD);//是否检测到停止位?

对于(I = 0;I < 4;I++)


Buffer[i]= I2caRegs.I2CDRR;//读取一个字节数据

I2caRegs.I2CMDR.ALL = 0x6C20;
while (I2cRegs.I2CSTR.bit.SCD = 0);

请告诉我出错的地方

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果没有 FIFO、数据不会发送到 tms320f28069、因此请帮我一个小忙
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否提供有关其故障情况的更多详细信息? 您是否在引脚上看到任何输出? 在调试器中、代码是否在某个特定的位置卡住?

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

    感谢您的回应!

     

    我的程序正在被写入函数定义--> BB 位中的结构化。 然后、我在 i2c 中检查时钟、在传输后它将变为低电平(最初它仅由于上拉而为高电平)

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

    写入函数在您第一次调用 BB 时是否卡在该环路上、或者您是否说它进行了传输、但之后时钟信号不会再次变为高电平、因此您无法再次完成写入?

    写入函数结束时、I2cRegs.I2CSTR.bit.SCD = 0、而不是等待 I2caRegs.I2CMDR.bit.STP = 1。

    惠特尼

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

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

    我已经解决了我发现的问题、即必须设置最后一个 NACK 位。
    设置该位后,我得到输出....Relaxed