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.

[参考译文] MSP430F6779A:需要有关计时器的帮助

Guru**** 2540720 points
Other Parts Discussed in Thread: MSP430F6779A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/862895/msp430f6779a-need-help-with-timers

器件型号:MSP430F6779A

好的、所以我会尽量解释和说明。 我正在使用 MSP430F6779A、并希望在引脚66 (P4.7)中生成 PWM 信号。 有关 IC 引脚图、请参阅数据表的第12页;有关引脚说明、请参阅第23页。 该引脚通过比较/捕捉寄存器 TA3CCR0映射到计时器 TA3.0。 根据我所学的内容、我们需要两个 CCR 来生成 PWM。 我们在 TACCR0寄存器中加载 PWM 周期、并在相应的定时器映射比较/捕捉寄存器中加载占空比设置/复位时间。 例如、 在引脚44 (P2.2定时器映射的 TA0.2)上、我能够通过将 PWM 周期周期放在 TA0CCR0寄存器中、将 PWM 周期放在 TA0CCR2寄存器中来生成所需的 PWM。  假设 TA0CCR0 = 255且 TA0CCR2 = 100。 然后、我们将 OUTMOD_7分配给用于复位/设置操作的引脚。 因此、初始时、当定时器从0计数到 TA0CCR2值(本例中为100)时、该引脚被复位、但在它达到 TA0CCR2值后、该引脚被置位、直到它达到 TA0CCR0值(本例中为255)。 这样、我们就得到了 PWM。

但是、在 P4.7 (TA3通信/捕捉寄存器0)中、我无法获取 PWM。 假设我们在 TA3CCR0寄存器中加载 PWM 周期、其中我们应加载占空比开/关时间周期、以便引脚在特定时间后设置/复位。 请帮我解决这个问题、因为我认为无法在该引脚上获得 PWM。 如果我遗漏了一些东西、请告诉我。 提前感谢!  

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

    您好、耐受、

    您可以参考以下代码示例:

    http://dev.ti.com/tirex/explore/node?node=ABDjsXjkDdnRm9lTo.36kg__IOGqZri__LATEST

    此致

    Johnson

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

    尊敬的 Johnson:

    这就是我说的。 在您发送的代码示例中、TA2CCR0 (PWM 周期)加载128、TA2CCR1 (占空比开/关周期)设置为32。 使用 TA2CCR1、而不是其他寄存器(例如- TA2CCR2)、因为引脚1.1被映射到 TA2.1。 我们将值32加载到 TA2CCR1中。 我在这里关注的是我要生成 PWM 的引脚(引脚4.7)被映射到 TA3.0。 因此、如果我使用 PWM 周期周期设置 TA3CCR0、我不会剩下任何可以加载占空比开/关值的寄存器。 这是您发送的代码。

    #include 
    
    void main (void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止 WDT
    
    //设置 P1.1 TA2.1
    P1DIR |= BIT1; // P1.1/TA2.1
    P1SEL0 |= BIT1; //输出 TA1
    
    //设置 TA2
    TA2CCR0 = 128; // PWM 周期/2
    TA2CCTL1 = OUTMOD_6; // CCR1切换/设置
    TA2CCR1 = 32; // CCR1 PWM 占空比
    TA2CTL = tassel_2 | MC_3 | TACLR; // SMCLK、向上/向下计数模式、清零 TAR
    
    _bis_SR_register (LPM0_bits); //输入 LPM0
    __no_operation(); //对于调试器
    } 

    对于我的应用、我要稍微更改一下它。  

    #include 
    
    void main (void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止 WDT
    
    //设置 P4.7 TA3.0
    P4DIR |= BIT7; // P4.17TA3.0
    P4SEL0 |= BIT7; //输出 TA3
    
    //设置 TA3
    TA3CCR0 = 128; // PWM 周期/2
    TA3CCTL0 = OUTMOD_6; // CCR0切换/置位。
    TA2CCR1 = 32; //我在这里使用什么寄存器? 我无法使用 TA3CCR0。 这只会更改 PWM 周期周期、而不会为我提供 PWM。 我无法使用 TA3CCR1或 TA3CCR2 (即使不知道它存在、因为 TA3 - CCR0和 CCR1中只有两个 CCR 寄存器)、因为它们未映射到 P4.7引脚。
    TA3CTL = tassel_2 | MC_3 | TACLR; // SMCLK、向上/向下计数模式、清零 TAR
    
    _bis_SR_register (LPM0_bits); //输入 LPM0
    __no_operation(); //对于调试器
    } 



    我无法理解我在标记背景红色时使用的寄存器。 是否有任何方法可以在该引脚上生成 PWM? 请告诉我。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请检查我使用背景颜色的行上的注释。 谢谢

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

    你好,,

    TAX.0不能输出 PWM 波形、它是一个用于控制 PWM 波形频率的寄存器。

    此致

    Johnson