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.

[参考译文] TM4C129LNCZAD:具有重复启动功能的 I2C 函数

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/810558/tm4c129lnczad-i2c-function-with-repeated-start

器件型号:TM4C129LNCZAD

大家好、团队、

我代表我们在 CSC 支持的客户写信。 他在以下问题上需要帮助:

我正在尝试使用 MikroElektronica Mikromedia 5的开发工具来实现 Tiva。 它使用 TM4C129LNCZAD 芯片、I2C 功能似乎比较复杂。 我正在尝试按照 DS 中列出的步骤(第1448-1449页、主器件在主器件重复启动传输后的主器件接收多个字节)来设置采用 Melexis 90614红外温度计的 I2C 传输。 我主要尝试使用直接寄存器写入来编写代码、因为它们的库函数似乎不适合我构建。 下面是我的示例代码、其中包含有关其降低位置的注释说明。 您可以提供任何帮助吗?

空 IrThermMeasure()

浮点测量温度= 0.0;
字符文本[10];
字符 Tdata_[3];

I2C4_MCLKOCNT = 0xDA;
I2C4_Enable();
I2C4_MSA =(0x5A << 1)+ 0;//地址0x5A + 0进行写入
I2C4_MDR = 0x07;// RAM 访问命令、地址0x07
I2C4_MCS = 0x03;//发出写入开始位,运行
DELAY_us (1);
while (I2C4_MCS-78B0!= 0)
{}
I2C4_MSA =(0x5A << 1)+ 1;//地址0x5A + 1用于读取
//在该注释上方,它将发出地址并写入0x07
I2C4_MCS = 0x0B;//Rec with Ack Req、Start bit、and Run
DELAY_us (1);
while (I2C4_MCS-78B0!= 0)
{}
Tdata_[0]= I2C4_MDR;
//在该注释上方,流程为起始位、地址、0x07、起始位、地址、 来自 IrThermo 的一个字节的数据、而 clk 引脚不会释放(不应释放)
//换句话说,在这里,它似乎正常工作。
I2C4_MCS = 0x09;//接收一个字节的数据
DELAY_us (1);
while (I2C4_MCS-78B0!= 0)
{}
I2C4_MCS = 0x05;//写入地址并通过停止位接收一个字节的数据
DELAY_us (1);
while (I2C4_MCS-78B0!= 0)
{}
delay_ms (1);
//最后一行是使一切混乱的东西。 流程现在开始了
//起始位、地址、0x07、0x07、停止位
//如果我更改之前 MDR 中的内容,它会将 MDR 中的内容作为最后一个字节发送出去。
//似乎可以通过某种方式将自身更改为写入函数而不是读取

// I2C4_Disable ();

// measuredTemperature =((int) Tdata_[0]+(int) Tdata_[1]<<8)* 0.02;


// measuredTemperature = irthrom3v3_getTobject ();
// FloatToStr (measuredTemperature、text);
// TempButton.Caption = Tdata_;
// IntToStr (text、Tdata_[0]);
// TempButton.Caption =文本;
// DrawRoundButton (&TempButton);

初始化正常、我获取了一些数据、但尝试获取任何大于1字节的数据(我需要3个字节)只会导致主器件在 MDR 中发送数据两次、也就是这种情况。 它似乎切换回写入模式。

谢谢、
特拉维斯

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

    您好!

     客户为什么不使用 TivaWare 库? TivaWare 库提供驱动程序/API/示例。 您可以在<TivaWare_Installation/examples/peripherals/i2c 下找到 I2C 示例

     您还将发现 I2C 应用手册的以下链接非常有用。  

    http://www.ti.com/lit/an/spma073/spma073.pdf

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

    我不使用 TivaWare 库、因为我使用开发工具编译器和软件、因为它包含用于集成到芯片板中的显示屏和触摸屏的驱动程序。 它们的编译器和库的问题在于、它似乎无法在 I2C 中为 TM4C 芯片提供重复起始函数。 因此、我尝试使用 TM4C129的 DS 中排列的流程之后的寄存器写入来写入函数。 我之前也已经阅读了建议的应用手册、虽然其中提供了一些有用的信息、但它似乎并未详细介绍在传输后重复启动功能以及需要接收3个字节的数据所需的细节。 谢谢你。

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

    我现在通过私人消息与客户沟通。  

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

    您现在可以在此处回复吗? 客户目前无法访问其 E2E 帐户、他将无法在其帐户中看到私人消息。

    谢谢你

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

    他正在对我作出回应。  

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

    我明白了。 好的、这太棒了!
    非常感谢、Charles。

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

    您好、Elisha、

     现在、我将关闭此主题、因为我将通过私人消息与客户进行通信。 我希望他稍后能进入论坛,届时我们可以在这里进行讨论。