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.

[参考译文] MSPM0G1106:I2C 问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1312584/mspm0g1106-i2c-issues

器件型号:MSPM0G1106

大家好、我正在实施一个 I2C 多主机驱动器。 最终、它会卡在所需的众多 while 环路中、并且我的看门狗会将其复位。

我希望避免这种情况、并像一种超时方法那样实现、仅重置驱动器、而不是整个微控制器。

在这2种情况下、它会卡住。

案例1

要将其从控制器切换到主器件、我有以下序列:

它会在此期间卡住。

情形2:

在控制器模式下发送时、它会卡在这些 while 中的任何一个。

注意: 目前、我在同时激活3个微控制器的同时测试冲突(并且从未见过中断发生)、因此"卡住问题" 大约每150-200次激活一次。  

所以、我希望创建一个超时值或捕获错误的值、重新启动外设、并中断这些 while。  

这是我当前的配置:

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

    韩语-

    您是否有备用计时器模块可用于在等待 while 循环时捕获/实现超时?  

    您可以在进入 while 循环时启动/重置一个定时器、然后在 ISR 中为该定时器设置一个标志。  如果设置了标志、您可以中断 while 循环、然后进行错误处理。  

    此外、如果已经有一个正在运行的计时器、则可以向该 ISR 添加一个计数器变量。 您可以在启动 while 循环之前对计数器进行复位。  

    然后、您可以测试计数值以确定是否需要断开 while 循环。  

    -杰森