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.

[参考译文] MSP430F1611:更改 TIMER_A 源不起作用

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/565190/msp430f1611-changing-timer_a-source-does-not-work

器件型号:MSP430F1611

我在比较模式下使用 Timer_A 在 MSP430f1xx 上生成 PWM 输出。 在 OSC 故障期间、我将 Timer_A 源从 SMCLK 更改为 ACLK (XTS=1)。

ACLK 现在以与 SMCLK 相同的频率运行、并且所有定时器寄存器看起来都正常。 但 PWM 输出频率现在是随机的(我假设这是因为 Timer_A 不会按预期在 ACLK 上运行)。

这是我的 NMI 例程、

#pragma vector=NMI_vector
_interrupt void NMI_(void)

IF (OFIFG){
configure_lfxt1 ();   //确定
IFG1 &=~NMIIFG;
IFG1 &=~OFIFG;
IE1 |= NMIIE;

TACTL &=~(MC0 | MC1);
TACTL &=~tassel_2;
TACTL |= tassel_1;
_DELAY_CYCLES (200);
TACTL |= MC_1;

请提供任何指示。 谢谢、

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

    就在我了解您的应用时、您有一个馈送 SMCLK 的外部源(XT2)、当您遇到振荡器故障时、您想要切换到计时器 A 的单独外部源(LFXT1)?

    您上面发布的代码片段对我来说很好。 我怀疑这是 ACLK 不能以您认为的频率运行或未正确配置的问题。 您是否尝试将 ACLK 的值输出到引脚并检查您是否获得了预期的频率?

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

    您好 Caleb、

    您正确理解了场景。 是的、我尝试输出 ACLK 频率、并且它按预期计时(切换到 ACLK 的其他应用程序、运行时不会出现任何问题)。

    此外、我从 SMCLK 切换到 ACLK 的原因是我无法使用 LFXT1 (XTS=1)配置 SMCLK。

    下面是我从 XT2切换到 LFXT1的方法。

    BCSCTL1 |= XT2OFF + XTS + DIV_2;
    _DELAY_CYCLES (2000);                 //等待 OSC 启动
    BCSCTL2 |= SELM_3 + DIVM_1 + SELS + DIVS_2;

    此致、

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

    到目前为止、我看到的一切都是正确的。 您是否可以尝试从 ACLK 开始运行 Timer-A 并查看是否获得相同的结果? 通过这样做、我们可以缩小问题是从 SMCLK 切换到 ACLK 时代码中的问题、还是从 ACLK 运行 Timer-A 时出现问题。

    此致、
    Caleb Overbay
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    BCSCTL2 |=
    ORing 占位符值可能会产生不正确的设置、具体取决于已设置的 prevoius 位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在配置更改期间清除可能有所帮助?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    > IF (OFIFG){
    由于 OFIFG 是一个常量、因此这始终为真。

    >IE1 |= NMIIE;
    另请参阅:"注意:"关于在 SLAU049F 第2.2.1节末尾的 ISR 中设置 NMIIE (尽管之前的文本看起来正好相反)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这在 MCLK 和 ACLK 时钟所需频率下均按预期工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    关于 OFIFG、您是对的、我修改了代码。

    但关于 NMIIE 的设置、我不确定您要参考的注释的哪一部分。 我没有将 RST/NMI 保持在低电平或者我修改 NMI 边沿选择位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我按照建议从一开始就运行了 Timer_A、并注意到它仍然失败。
    基本上、TASSEL 对 Timer_A 没有影响 无论选择何种源、它都始终选择 SMCLK。
    有什么想法吗?

    此致

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

    您能发布我们可以用来尝试重现此问题的代码吗? 我想在最后尝试一下

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

    您是否仍然需要有关此问题的帮助、或者是否有任何您想要分享的进展?

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

    此问题已得到解决。 这个问题是因为 Timer_A 根本没有切换到 ACLK。 代码中有一个错误。

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

    听得好。 我希望您不介意我再多说一点、但代码中的错误在哪里?

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

    其中一个函数 Sure Caleb 为 TACTL 寄存器分配了一个值、从而修改了我完全忽略的 TASSELx (而不是 ORing 相关位)。