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.

[参考译文] MSP430FR5989-Timer B:EP 中断标志丢失

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1279675/msp430fr5989-ep-loss-of-timer-b-interrupt-flag

器件型号:EP

嗨、团队、

我有一位客户遇到了 与计时器 B 中断标志丢失相关的问题(请参阅上一个 E2E 主题)。 我将在下面附上他的完整消息

"我们假设这个问题是由 DMA7勘误表引起的、因为我们定期触发的所有时间都在运行 DMA、如果满足勘误表的所有条件、就可能导致中断丢失。

我们一直在尝试重现此勘误表、如论坛中所述(请参阅之前的 E2E 主题)、以查看它是否可能是问题的根本原因。 但是、从那以后我们运气不好、并开始认为勘误表可能描述错误、或者勘误表中未描述其他条件。
此外、由于我们不使用中断(权变措施1)并且我们不能在每次执行 RWM 指令(权变措施2)时禁用 DMA、因此建议的解决方案是不可接受的。

为了试图重现勘误表、或者对于为什么我们遇到中断标志丢失问题、你是否有任何其他理论可以实现?

我已经阅读过、有一个早期版本的 DMA7勘误表、可能它是不同的编写方式、并且可以帮助我们复制它。 您有访问此版本的权限吗?"

请告诉我是否可以提供帮助;我被告知将此任务分配给 MSP HSM、作为负责的组织

谢谢!

马可

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

    该勘误表要求排队以产生错误:1) IFG 寄存器上的读取/修改/写入操作、2)当时发生的 DMA、3)传入中断。 一组极不可能的条件。 我预计问题可能在其他地方。

    回顾您之前的消息、我发现没有使用计时器的具体原因。 至少不是这样。 但这提醒我、获得精确 DCO 时钟频率的一种方法是使用基于精确 ACLK 的计时器对 SMCLK 周期进行计数。 我执行了该操作、但使用了两个计时器。 一个从 SMCLK 运行、另一个从 ACLK 运行。 SMCLK 计时器处于向上计数模式以进行其他操作、因此其 ISR 递增计数器。 ACLK ISR 大约每秒处理一次其他细节。

    哦、读取 TB0R 是个问题、因为 ACLK 不与 MCLK 同步。 "当定时器时钟和 CPU 时钟异步时、任何对 TBxR 的读取会由于定时器未运行而导致所读的结果是不可预料的。"

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

    尊敬的 David:

    感谢您的答复。

    您所介绍的条件与勘误表中所述的条件不同。 特别是、DMA7中没有条件编号3 (传入中断)。
    对于这一新状况、我有以下问题:
    1) 1)此中断是否需要与 IFG 寄存器来自同一个模块? 或者、是否可以是在发生 IFG 寄存器的 RMW 时触发中断的另一模块(例如 SPI)(例如 TimerB)?
    2) 2)当你说传入中断时、这是否意味着 GIE 和模块 IE 都需要设置? 或者、一个 IFG 被设定是否足够(GIE 和模块 IE 关闭)?

    我们怀疑我们遇到的问题是 DMA7造成的、因为该问题很少发生、并且唯一合理的解释是勘误表或电子问题、ACLK 会干扰并使计数器数次递增。 在将标志设置为 false 之前将其设置为 true。

    关于您对 TB0R 读数的评论、您所说的内容不适用、因为在实际的执行中、我们在两个连续读数返回相同的值之前读取 TB0R。 ´s、如果我们在 TB0R 变化时读取它、我们将不会认为它正确、并会再次读取 TB0R。

    如果您需要更多信息、请告诉我。

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

    从勘误表中可以看出:"同一模块新到达的中断可能会丢失"。 因此、当 CPU 更改 IFG 寄存器、被 DMA 操作暂停且有新的中断到达时、存在一个问题。 勘误表中并未说明 CPU 更改时必须与之相同。

    有一种 DMA 设置指示它不要暂停读取-修改-写入操作、这似乎可以解决这一问题、但勘误表中没有提到这一点。

    所有中断都从 IFG 开始。 这之后的情况取决于使能端。 此勘误表仅谈到 IFG。 或者至少这是我读取它的方式。

    使用与发布的代码不同的代码(TB0R)肯定会很好。

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

    尊敬的 Tomas:

    我对这个勘误表了解不多、根据 workaround1、你可以读取 TAxIV 来检查是否设置了 IFG、所以它不会触发与 DMA7相同的问题。 它对这个问题有什么帮助吗?

    同时、在前面的 e2e 主题中、您描述了: 很多其他器件的固件与这些器件完全相同、但它们不存在此问题、因此这实际上不是一个反复出现的问题。

    这是否意味着当软件和硬件相同时、只有少数设备会出现问题、而其他设备正常工作? 它是有点奇怪的。

    B.R.

    萨尔

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

    大家好、

    虽然该权变措施会阻止发生勘误、但仅当 TA.IE 被激活时才会设置 TAxIV、而这并非我们的情况。 此外、如果读取 TAxIV、具有较低优先级的标志将被覆盖。

    几款器件具有相同的固件和硬件、但有几款器件在非常罕见的情况下出现了问题。 这并不意味着其他电路正常工作。 实际上、我确实认为、如果满足这些条件、它们上可能会出现错误。

    此致、

    托马斯

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

    尊敬的 Tomas:

    根据 TRM、禁用中断不会影响 TAxIV。 较低优先级的中断会在较高优先级之后生成新的中断、因此我假设它不会被覆盖。 目前没有可测试的器件。 您可以 尝试一下、检查错误是否再次发生。

    B.R.

    萨尔

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

    在阅读了勘误表并进行思考后、我认为这就是正在发生的情况:

    1) 1) CPU 开始执行一条读取-修改-写入指令、并读取一个 IFG 寄存器。

    2) DMA 操作开始、停止 CPU。

    3) 3)有一个新的中断到达、并在该 IFG 寄存器中设置一个标志。

    4) 4) DMA 操作完成并释放 CPU。

    5) 5) CPU 将其改变的值写入 IFG 寄存器。 自它读取它以来、没有注意到它发生了变化。 可能清除硬件置位的位。

    我假设在连续周期内进行读写的正常执行期间有某种机制可以防止出现此问题。 但在读取和写入之间存在延迟时失败。

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

    大家好、

    当我读取它时、如果中断未被启用(例如、CCIE 为假)、TAxIV 将不会被置位。

    我对它进行了测试、但它没有设置 TAxIV。 仅当计时器的相应 CCIE 为 true 时、TAxIV 才被置位。

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

    David:

    所以、如果我理解正确、中断只有在 RMW 操作和 DMA 传输同时到达时才会丢失。 标志 DMARMWDIS 不会阻止这种情况发生吗?

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

    我希望 DMARMWDIS 会有所帮助、这就是我提到它的原因、但勘误表无论如何也没有将它列为权变措施。 (一个可能的原因是我猜测发生了什么事情是错误的。)