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.

[参考译文] MSP430F5340:MSP430F5340在检查 UCTXSTT 位时挂起

Guru**** 2527420 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/865936/msp430f5340-msp430f5340-hangs-while-checking-uctxstt-bit

器件型号:MSP430F5340

你(们)好  

我遇到的问题是、MSP 在检查 UCTXSTT 位时挂起。

以下是我的代码:

UCB1I2CSA = SlavuceAddress;
UCB1CTL1 &=~UCSWRST;

UCB1CTL1 |= UCTR | UCTXSTT;// I2C TX,启动条件


while ((((UCB1CTL1 & UCTXSTT)=0)&&(UCB1IFG & UCTXIFG));

如果我删除 ((UCB1CTL1和 UCTXSTT) 并仅监视 IFG 标志、它将起作用、稍后我将检查 NACK。 生成起始条件后、代码在没有任何 NACK 的情况下正常工作。  

但为什么在我检查  UCTXSTT 位时它挂起。 ?

谢谢

Rekha

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

    您好、Rekha、

    请参阅示例代码。

    器件是否可能在重复启动条件下挂起?

    e2e.ti.com/.../1212.C.zip

    谢谢、

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

    您好!

    当 MSP 从发送模式切换到接收模式时、器件不会在重复启动时挂起。

    最初发送起始位、然后我轮询 UCTXSTT 位以将其清零。 但从未发生过。

    我甚至参考了示例代码、但它采用了基于中断的方法。 但我的代码遵循轮询方法。

    附加我的 file.e2e.ti.com/.../i2c-battry.txt

    谢谢

    Rekha

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

    如用户指南(SLAU208Q)图38-12所示、STT 不会清除、直到您识别 TXIFG 并将某个内容放入 TXBUF 中。  

    因此我可以看到您所附加代码中的 if()如何失败,但不能看到您发布的 while ()如何挂起(因为测试的意义是相反的)。

    在任何情况下、请查看该图并确保您的代码遵循所需的步骤。

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

    [引用用户="Bruce McKenney47378"]如用户指南(SLAU208Q)图38-12所示、STT 不会被清除、除非您识别 TXIFG 并将某些内容放入 TXBUF[/QUESP]

    这是否意味着我的代码未正确检查标志?

    我也不明白你所说的是哪一个数字!!!

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

    是的、指示的 if ()应该只检查 TXIFG、因为在您对该 STT 执行操作之前、STT 将始终为1。

    图是 F5用户指南(修订版 Q)第1006页中的图。 产品页面上应提供指向此文档的链接。 当我尝试编写 I2C 代码时、我始终保持此(或等效)页面打开。

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

    感谢您的快速响应。

    好的、我修改了我的代码来监控 IFG 标志->查找 NACK ->如果收到 ACK ->确认 STT 已清除、我继续执行代码流。

    我的方法是否正确?

    谢谢

    Rekha

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

    听起来不错。 (我前面没有图表。)

    您没有提到它、但是为了响应 TXIFG、您必须实际写入 TXBUF 才能继续。 (总线在您执行此操作之前处于停滞状态。)

    运行时它有什么作用?

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

    您好!

    是的、我正在写入 TxBUF 以响应 IFG 标志。  

    当我们运行它时:从机的寄存器地址被写入 TXBUF,一旦执行此命令,我们就会通过将 MSP 更改为接收器模式来重新启动 I2C,以便从从机接收数据。

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

    这听起来就像您设置的那样。 很高兴听到这个消息。

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

    非常感谢您的持续支持。 我将继续并关闭此 TT。