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.

[参考译文] CCS/MSP430F5438A:GPIO 不在 Timer_A1末尾切换

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/949792/ccs-msp430f5438a-gpio-not-toggling-at-the-end-of-the-timer_a1

器件型号:MSP430F5438A

工具/软件:Code Composer Studio

您好、MSP-Team、

我代表客户输入问题。 问题与 Timer_A1 (TA1)的输出行为有关。

他在向上计数模式下使用 TA1、激活 TAIE 并在 OUTMOD = TOGGLE 时切换 GPIO。 相应地设置 GPIO 的 PSEL。 在 TA1的中断例程中、TA1CCR0更新为新值。

如果计数器值高于需要设置的 CCR0值、则 IRQ 将被触发、倒计数将被正确复位、但 GPIO 未被切换。

此行为是否正确? 在这种情况下、预期输出也会切换。

此致、

Gokhan

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

    您好、Goekhan、

    当 TA1R 大于 TA1CCR0时、如果选择向上计数模式、则定时器应自动从0开始计数。 这可能会触发 TAIFG、因为它从 TA1CCR0计数到0、但我不希望 GPIO 在下一个计时器周期计数回至 TA1CCRn 之前切换(因为在向上计数模式下使用切换会在每次 TA1R = TA1CCRn 时导致 GPIO 切换)。

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

    尊敬的 Barrera 先生

    非常感谢您的快速响应!

    参考了第 1.2.5.1.1章"输出示例- SLAU400F 中处于增模式的定时器":"当定时器计数到 TAxCCRn 值并且从 TAxCCR0降到零时、OUTn 信号会发生变化、具体取决于输出模式。"

    如果我理解正确、TA1R 会向上计数到设置的 TA1CCR0值、并且一旦它们匹配、在计时器时钟的下一个上升沿、TA1R 会回滚到零、TAIFG 会被触发、并且在我的情况下会切换 OUTn。

    那么、如果我将 TA1CCR0设置为与当前的 TA1R 相同的值、那么在计时器时钟的下一个上升沿、OUTn 应该切换、因为给出了 TA1R 和 TA1CCR0匹配的条件? 另一方面、当 TA1R 大于新设置的 TA1CCR0值时、不会为 OUTn 提供此条件、只有 TA1R 回滚到零并且触发 TAIFG。

    此致、

    Pascal Künzi

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

    Pascal、您好!

    因此、数据表第一句末尾显示:"取决于输出模式"。 之前提到过、OUTMOD = Toggle 且 Timer_A1处于向上计数模式。 如果您查看输出模式4:切换的输出示例图、它会显示每次计数 TA1R = TA1CCRn 时 OUTn 信号都会切换。 当 TA1R = TA1CCR0时、没有开关行为、因此我很困惑为什么在这种情况下 OUTn 会切换。 这是您看到的行为吗?

    如果您使用输出模式2、3、6或7、则该输出的开关行为将取决于 TA1CCR0。

    它没有在数据表中明确说明如果您将 TA1CCR0完全更改为 TA1R 将会发生什么行为、更重要的是、此时 OUTn 的行为是什么、因此我将与团队一起研究这一点、看看他们提供了什么反馈。 您是否有用于测试此代码的任何代码?

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

    描述输出模式的表格非常清楚、当定时器计数到 CCRx 时、输出切换。 因此、如果您将 CCRx 更改为小于当前计数的值、则在下次计数到 CCRx 时才会切换。

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

    你好,Aaron

    您可能是第二次使用 TA1R!= TA1CCRn?

    我最初假设、如果您设置 TA1CCR0 < TA1R、OUTn 应该切换。 但我现在理解、情况并非如此。

    遗憾的是、我没有任何特定的代码来测试这一点。 我在我们非常大的应用程序上进行此操作、我无法分享。

    感谢您帮助我了解计时器外设并澄清这一点。

    此致、

    Pascal Künzi

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

    Pascal、您好!

    很抱歉、我之前 在回答(编辑)中说 TA1R = TA1CCR0、而 TA1R = TA1CCRn。 如果您使用输出模式2、3、6或7、当 TA1R 从 TA1CCR0降到零时、OUTn 将切换;如果您使用输出模式1、4或5、则 OUTn 将在计数增至 TA1CCRn 时切换。  

    很高兴为您提供帮助。

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

    你好,Aaron

    您的意思是"当 TA1R = TA1CCR0时、没有开关行为因此我很困惑为什么在这种情况下 OUTn 会切换。 这是您看到的行为吗?"。

    是的、我确实看到了这种行为。 但是、我们可能讨论了一个不同的模块。 我正在切换 P8.5、根据我的理解、CCR0用于切换并回滚到零。

    我是否正确理解了这一点? 很抱歉、命名惯例的混淆。

    此致、

    Pascal

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

    Pascal、您好!

    如果您使用向上计数模式、我建议切换到另一个器件输出信号引脚、如 TA1.1或 TA1.2、以便 TA1CCR1或 TA1CCR2切换输出引脚。 由于 TA1CCR0设置了 PWM 周期、因此在将该引脚用作 PWM 输出时、使用 TA1.0将不会很有用。 您看到的是下面的线程中显示的行为(最下面的回复)-输出在每个周期都会发生变化。  

    e2e.ti.com/.../189263

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

    我在 Launchpad 上尝试了一个简单的测试。 我将 TA0.1配置为计时器输出(连接到绿色 LED)以监控结果。

    CCR1被设置为等于 CCR0、该 CCR0已从计数为0xff 的32KHz ACLK 运行。 CCTL1被设置为切换/复位输出模式。

    用户指南中的表25.2告诉我、当定时器计数到 CCR1时、输出将切换、而当它计数到 CCR0时、输出将复位。 如果是这样,那么结果将确切取决于同时发生的冲突所发生的情况。 完全打开或关闭是可能的结果。 但我看到的是 LED 发出的微弱的光。  更改 CCR1会改变其亮度、CCR0+1的值为 FULL OFF。

    这告诉我、当定时器在到达 CCR0后复位为零一个计数时、会发生输出复位。

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

    你(们)好、David

    感谢您查看该内容。 与我的设置相比、CCTL1设置为模式4切换。

    根据我现在介绍的内容、切换/复位和切换均按预期运行、并与此论坛 问题的底部答案相匹配

    此致、

    Pascal

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

    你好,Aaron

    您共享的论坛条目与我的期望/体验相匹配。

    我最初提出的一个问题是、当 TA1R 大于设置的 TA1CCR0值时、OUTn 是否切换已在之前的答复中得到解决。

    非常感谢您的努力、分享了指向该论坛条目的链接、并帮助我了解计时器外设的功能! )

    此致、

    Pascal Künzi