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.

[参考译文] MSP430FR2111:定时器 B TBIV 不会在 ISR 后复位

Guru**** 2618835 points

Other Parts Discussed in Thread: MSP430FR2111, MSP430FR2311

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/673622/msp430fr2111-timer-b-tbiv-does-not-reset-upon-isr

器件型号:MSP430FR2111
主题中讨论的其他器件: MSP430FR2311

您好!  

我已经在向上计数模式下初始化了计时器 B 并实现 了 TIMER0_B1_vector ISR、以便截取计时器回绕。

我在 ISR 中放置了一个断点、并注意到每次触发断点时、TBR 都会略微增加 (3/4计数)、就好像 TBIFG 从未复位并不断 触发 ISR 一样。

用户指南提到 "任何对 TBxIV 寄存器的访问、读取或写入都会自动复位最高优先级的挂起中断标志。 "我看不到发生了什么...

感谢您的任何建议。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    断点箭头指向 switch 语句、因此 TB0IV 尚未被读取;因此它仍然显示0x0E。

    进入 ISR 后、TB0R 继续计数。 当 ID=0时、它的进展很小、超过了0、这是不值得注意的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Bruce 的快速回复

    我理解您的观点、但:
    -由于某种原因,我无法在 case statemet 上设置断点(优化?)
    - TB0R 在屏幕电容器上显示0x0007,在上一个迭代上显示0x0004,在下一个迭代上显示0x000A,因此很明显,在 IFG 发生后它不是一分钟的进度,而是值持续增加, 这就是我怀疑 TBIFG 未被清除并且 ISR 被重复触发的原因。
    此行为会持续到达到 TB0CCR0、然后 CCR0 ISR 作为输出(TIMER0_B0_VECTOR)触发。

    另一个想法:
    由于 MSP430FR2111 Timer B0只有3个 CCR 模块,也许我只能使用3个 CCRx 条件语句(0/2/4),然后使用 TBIFG (所以它的值是6而不是14)条件语句?

    再次感谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1)是的、我通常将无法在所需位置设置断点的原因归咎于优化器。 反汇编可能很有趣。
    2) TB0R 的一个小变化(比如说<10个节拍)可能是由于哪种指令被中断(CPU 不会在指令中间中断)。 如果您在其他地方禁用中断、当然、它可能会有更大的变化。
    3) 3)我猜(不检查本手册)是为整个产品系列设计了 IV 值、即使未实现某些 CCR。 如果您有顾虑、请查看 msp430fr2111.h (右键单击 TBIV_TBIFG 并"转到定义")。

    您可以尝试-O0和/或如果您有示波器、则尝试通过摆动 GPIO 来查看中断周期。 60k 时钟周期甚至可能足够长、足以在 LED 上看到。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    排印错误警报(我不够仔细):TBIV 与 TB0IV 不同。 您希望后者位于交换机()中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请注意、我的代码基于 driverlib 的示例"timer_b_ex2_overflowISR"(用于 MSP430FR2311)。

    示例代码确实使用 了 TBIV (而不是您建议的 TB0IV)。

    我将很快进行尝试并报告。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的 msp430fr2111.h 副本(和2311.h)显示了 TBIV=(0xFFFF)-即一个常数-(大概)会导致您的整个 ISR 被优化-从而导致您的症状。 如果这是其他示例所做的、我不知道它是如何工作的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bruce、您好!

    你是对的。 TB0IV 工作的很有魅力

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我找到了那个示例程序,当我编译它(即使是使用-O0)时,TIMERB1_ISR 为空--只是一个 RETI。 当我找到我的 Launchpad 时、我希望它能显示您观察到的症状。

    我怀疑这一个问题在某种程度上滑过了裂缝。 很好的收获
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    我已确认代码示例中存在拼写错误。 我们将修复它并进行更新。 感谢您的报告。  

    如果我的帖子有助于解决您的问题、请单击  验证答案    按钮 

    冬季、

    搜索 E2E! 您的问题可能已经得到解答!