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.

[参考译文] EK-TM4C1294XL:I2C 读取双精度数

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1112575/ek-tm4c1294xl-i2c-read-double

器件型号:EK-TM4C1294XL

大家好、

客户尝试  通过 i2c 在 TI Launchpad 上与 GPS 接收器进行通信、并遇到 i2c 问题。 请参阅下面的详细信息。

用于初始化和通信目的、使用 Tiva ware Library。 TI Launchpad 是主设备、GPS 接收器是从设备。  
e2e.ti.com/.../EK_2D00_TM4C129XL.txt

我使用逻辑分析仪来观看 i2c 总线、一切顺利。消息是正确的、看起来应该是正确的。所以我认为问题不是从器件。问题是在 pbBytesRead 中、大部分字节会被拖得更长时间 示例总线上的逻辑分析仪显示为:0x24 0x42 0x45 0x76 0x64。但 launchepad 读取 pbBytesRead:0x24 0x24 0x42 0x42 0x45 0x45 0x45 0x76 0x76 0x64 0x64 0x64 0x64。初始化错误的内容可能是什么? 有人对我有一些线索或提示吗? 如果需要、我可以提供一些更多信息。

谢谢。

此致、
5月

谢谢你。

此致、
5月

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

    您好!

     你能不能在 每一个你有 I2CMasterBusy()的地方尝试一下

    替换:

    while (I2CMasterBusy (I2C0_BASE)=true);  

    使用  

    while (!I2CMasterBusy (I2C0_BASE)== true); //添加此行。  您还可以在此处添加短延迟环路、而不是  while (!I2CMasterBusy (I2C0_BASE)= true)

    while (I2CMasterBusy (I2C0_BASE)== true);  //将此行保留在上述行之后。

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

    您好、Charles、

    刚刚收到客户的回复、请参阅以下详细信息。

    I tryed "while (I2CMasterBusy (I2C0_BASE)== true);"而不是"while (I2CMasterBusy (I2C0_BASE))"


    }".但这不是相同的吗??? 此列表的工作结果与此结果不完全相同。
    我还尝试了一些延迟、但也有一些字节为双倍、或者如果延迟太大、则数组中没有一些字节。逻辑分析仪的结果(我认为是正确的、也是我期望的结果) 以及电路板的读数。

    一些附加:

    使用此行"while (!I2CMasterBusy (I2C0_BASE)= true)"、我会进入永久性循环。因此这不是我想要的。 我还检查了组合:" SysCtlDelay(等待);
    while (I2CMasterBusy (I2C0_BASE)== true);"

    define 等待30
    这也不是我想要的结果

    谢谢你。

    此致、
    5月

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

    您好、May、

     很抱歉、我觉得我自己有点困惑。 我的意思是、在客户代码中、无论您身处何处、都可以看到以下行:

    替换:

    while (I2CMasterBusy (I2C0_BASE))
        {

        }

     作者:

    while (!I2CMasterBusy (I2C0_BASE)== true); //添加此行。   

    while (I2CMasterBusy (I2C0_BASE) //保留原始行
        {

        }

    如果上述建议不起作用、我需要再次查看您的代码以查看发生了什么情况。