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/TMS320F2.8377万S:I2C问题

Guru**** 2489685 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/653819/ccs-tms320f28377s-problem-with-i2c

部件号:TMS320F2.8377万S

工具/软件:Code Composer Studio

您好,

我正在尝试通过I2C将其与VCNL4010 (IR传感器)连接,但我遇到了问题。  我在设备支持中找到了一个示例代码,并参考它修改了代码。 但它不起作用。 在示波器上,我一直处于高状态,我看不到任何通信。  

#include "F28x_Project.h"

void i2c_a_init (void);
void i2c_a_write_data(UINT16, UINT16);
UINT16 i2c_read_data (UINT16 register_address);

int main(void){

InitSysCtrl();
伊尼特·格皮奥();

I2C_A_INIT();

而(1){

I2C_A_WRITE数据(0x81,0x07);
I2C_A_READ_DATA (0x80);
}
}

void i2c_a_init (void)
{
I2caRegs.I2CSAL.ALL = 0x0026; // 7位从属地址- DS1672

EALLOW;
gpioCtrlRegs.GPBPUD.bit.GPIO32 = 0;
gpioCtrlRegs.GPBPUD.bit.GPIO33 = 0;

//为选定的I2C引脚设置限制

gpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 3;
gpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 3;

//配置哪些GPIO引脚将是I2C_A引脚
//使用GPIO寄存器
//
gpioCtrlRegs.GPBMUX1.bit.GPIO32 = 1;
gpioCtrlRegs.GPBMUX1.bit.GPIO33 = 1;
EDIS;

//在主发射器模式下初始化I2C
I2caRegs.I2CPsc.all = 19;// I2C时钟应介于7MHz-12MHz之间
I2caRegs.I2CCLKL = 45; //预校准器设置为100kHz比特率
I2caRegs.I2CCLKH = 45; //在10MHz I2C时钟上
I2caRegs.I2CFFTX.ALL = 0x6000;//启用FIFO模式和TXFIFO
I2caRegs.I2CFFRX.ALL = 0x2040;//启用RXFIFO,清除RXFFINT
return;
}
void i2c_a_write_data (UINT16 register_address, UINT16 register_value)
{//start
condition, stop condition, Master,Transmitter,I2C enabled
I2caRegs.I2CMDR.All = 0x2E20;
I2caRegs.I2CCNT = 0x02; //要发送的字节-此处为2
I2caRegs.I2CDXL.ALL =注册地址;//注册位置
I2caRegs.I2CDXL.ALL = REGISTER_VALUE;//注册位置
}


UINT16 i2c_read_data (UINT16 REGISTER_ADDRESE)
{
//启动条件,停止条件,主,发送器,I2C启用
I2caRegs.I2CMDR.All = 0x2E20;
I2caRegs.I2CCNT = 0x01; //要发送的字节-始终为1
I2caRegs.I2CDXL.ALL =注册地址;//注册位置

//启动条件,停止条件,主控,I2C启用
I2caRegs.I2CMDR.ALL = 0x2C20;
I2caRegs.I2CCNT = 0x01; //要接收的字节-始终为1
返回I2caRegs.I2CDRR.ALL; //读取和返回数据
}

感谢你的帮助
此致  

Szymon

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

    我看到您的代码唯一的问题是您的写入/读取功能在任何时候都不检查FIFO状态。 例如,当您写入DXR时,应确保TXFIFO中有您要写入的字节数的空间。 当您写入DRR时,您应确保RXFIFO中有一个项目可供读取。

    这个问题并不能真正解释为什么您根本看不到线上的任何活动。 是否可以在CCS中打开“寄存器”视图并检查I2CSTR寄存器的状态? 它在i2c_a_write_data()的开头是什么样子的? 它在i2c_a_write_data()的末尾是什么样子的?

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

    你好

    感谢您的回复。

    是的,我可以读取I2CSTR的值。

    在开头 i2c_a_write_data(),I2CFR的值为0x0410。

     I2c_a_write_data()的末尾 是0x1400

    此致

    Szymon

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

    感谢您提供更多信息。 BB高应意味着发送了启动条件,因此我很惊讶您没有看到信号上的任何活动。

    您是否可以尝试将几行代码添加到代码末尾的i2c_a_write_data()作为实验? 您可以使用以下两行来确定已发送字节数以及已发送停止条件。

    while (I2caRegs.I2CFFTX.Bit.TXFFST != 0U);
    while (I2caRegs.I2CMDR.bit.stp!= 0U);

    您可以在对i2c_a_read_data()的调用中放置一个断点,然后查看它是否卡在其中一个循环中,或者是否使它到达断点。

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

    我添加了您创建的两行,当我逐步执行程序时,程序在该行上挂起:while (I2caRegs.I2CFFTX.bit.TXFFST!= 0U);

    我不知道什么可能是错误的。 我看到SDA线上的状态一直很高。

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

    如果你不是一步一步地运行它——就像你点击“恢复”,让它运行一段时间,然后停止它——它是否仍然停留在同一个地方,在SDA上没有任何活动?

    我没有发现GPIO配置有任何问题,但您能否在“CCS寄存器”视图中再次检查GPIO配置寄存器的值? 您是否还可以尝试切换到SDA的不同GPIO,以确保您正在使用的GPIO没有任何问题?

    谢谢!

    Whitney

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否找到了问题的解决方案?

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

    您好,

    我一直都有同样的问题

    此致

    Szymon

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否尝试过我在上一篇帖子中的建议?

    [引述用户="Whitney Dewey"]
    我没有发现GPIO配置有任何问题,但您能否在“CCS寄存器”视图中再次检查GPIO配置寄存器的值? 您是否还可以尝试切换到SDA的不同GPIO,以确保您正在使用的GPIO没有任何问题?
    [/引述]

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

    您是否仍有此问题? 您是否尝试过上述建议?

    编辑:由于我没有收到您的回复,我假设您已解决了问题并关闭了线程。 如果情况并非如此,并且您需要进一步帮助,请随时发表评论(如果此帖子锁定,请启动新帖子)。

    Whitney