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.

[参考译文] MSP430G2553:can't 使用之前运行的2020年 LaunchPad 代码让计时器正常运行

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1522228/msp430g2553-can-t-get-the-timers-to-function-using-launchpad-on-2020-code-that-worked-before

器件型号:MSP430G2553
MSP430G2231主题中讨论的其他器件》

工具/软件:

我有4款产品采用 MSP430G2231和 MSP430G2553。 我正在使用  对我公司至关重要的计时器处理第三个问题。

我编写这段简短代码是为了 通过 MSP430G2553的3个引脚创建一个 PWM 波形。 我上次运行的时间是2002年、    在 Windows 10下使用了 Code Composer Ver10 10.1.1.00004。

然后代码运行得很好。 我最近 尝试使用 MSP430G2231上的计时器尝试切换 P1.2、并且没有任何反应。 我可以使用 while 循环切换端口。 但任何与计时器相关的内容都不起作用。 所以我回到了 G2553代码、现在它不起作用。

我尝试 过调试该问题、如下所示。

  1. 我尝试在另一台计算机上使用相同的 Launchpad、无 PWM
  2. 我恢复到版本10.1.1 Code Composer 软件(无 PWM)
  3. 已使用新的开箱即用 Launchpad 和新的 G2553、无 PWM

请参阅以下代码和 LaunchPad 上 G2553的器件设置。

// TA0CCR0 // *计时器 A0捕捉/比较0 */
// TA0CCR1 // *计时器 A0捕捉/比较1 */
// TA0CCR2 // *计时器 A0捕捉/比较2 */

// TA1CCR0 /*计时器 A1捕捉/比较0 */
// TA1CCR1 /*计时器 A1捕捉/比较1 */
// TA1CCR2 /*计时器 A1捕捉/比较2 */

// P2.2 计时器 A1 CCR1 Out1
// P2.4 计时器 A1 CCR1 Out2

// P1.2 计时器 A0 CCR0 Out1

/************************************************************ /





#include


内部 main (void)

 


       P1DIR |= BIT2;            // P1.2输出
       P1SEL |= BIT2;            // P1.2选项选择
       P2DIR = 0x14;            //将 P2.2和 P2.4设置为输出方向。
       P2SEL = 0x14;            //选择 P2.2和 P2.4 作为 PWM 输出。



       TA1CCR0 = 1000-1;          // PWM 周期
       TA1CCTL1 = OUTMOD_7;         // CCR1复位/设置
       TA1CCR1 = 0;             // P2.2 PWM 占空比  
       TA1CCTL2 = OUTMOD_7;
       TA1CCR2 = 0;             // P2.4 PWM 占空比(500 = 50%)  
       TA1CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK、向上计数模式、清除 TAR

       P1DIR |= BIT2;            // P1.2输出
       P1SEL |= BIT2;            // P1.2选项选择

       TA0CCR0 = 1000-1;          // PWM 周期   
       TA0CCTL1 = OUTMOD_7;         // CCR0复位/设置
       TA0CCR1 = 1000;           // P1.2 PWM 占空比
       TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK、向上计数模式、清除 TAR

       //__bis_SR_register (LPM0_bits);  //进入 LPM0
       // __ no_operation ();          //对于调试器


}

 

 

 

 

 

 

 

 

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

    1)我看不到您关闭看门狗的位置。 确保这显示在 main()的开头:

    > WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

    2)看起来 LPM0行已被删除、因此 main()返回、这可能是良性的、也可能不是良性的。 尝试取消注释该行。

    [编辑: 3)不要忘记从 J101上取下 RXD 跳线。]

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

    谢谢 Bruce、

    由于某种原因、我没有剪切和粘贴该行。 我编写 MSP430代码已经有10年了、主要使用循环和中断。 我在2020年编写了这段 PWM 代码、它运行得很好。  

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

    对于 PWM、它是否需要处于低功耗模式? 我的应用不关心由汽车电池供电的功耗、  

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

                  TA0CCR0 = 1000-1;                   // PWM Period    
                  TA0CCTL1 = OUTMOD_7;                // CCR0 reset/set
                  TA0CCR1 = 1000;                     // P1.2  PWM duty cycle
                  
    CCR1应介于0和 CCR0之间、这一点很重要。

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

    谢谢大卫,你在哪里得到了这个结论? 我没有在任何地方读过。 您能指出一些陈述这一点的文本吗?  

    任何人都可以添加看门狗计时器代码并尝试此代码。 请告诉我会发生什么情况。 您能使用 Window 的版本和 Code Composer 版本进行回复吗? 我真的很感激。

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

    David、您对 TACCR0和 TACCR1来说是正确的。 为什么其他输出无法正常工作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 David、您从哪里得到了这个结论? 我没有在任何地方读过。 您能指出一些陈述这一点的文本吗?  [/报价]

    它就在指南中、描述了向上模式和输出单元的操作。 没什么复杂的。

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

    您是说 TA1吗?

    输出单元的文档表明、当计时器计数到 CCRx 时、输出将被复位。 但是、复位为零的计数器是否限定为计数到?

    一个错误关闭是一个持续的刺激。 :-)

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

    尊敬的 Randy:
    是否有任何建议帮助您找到问题的解决方案?

    此致、

    Diego Abad

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

    尊敬的 Randy:
    是否有任何建议帮助您找到问题的解决方案?

    此致、

    Diego Abad

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

    Diego、

    没有任何建议是答案。 我回去加载了一些简单的计时器示例。 它部分工作。 我只能在调试模式下按"Resume"按钮来使 PWM 正常工作。 它需要在上电时工作、就像简单的计时器示例一样。

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

     加载的代码将保持在无限循环中、然后应该可以正常工作。 我稍后会尝试。

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

    您指的是哪个代码?  现在我不确定测试用例是什么。

    当我昨晚尝试这种方法(CCS 12.6、G2ET Launchpad、RXD/TXD 跳线已移除)时、我在 P1.2上获得(1)恒定的高电平、在 P2.2/P2.4上获得(2)恒定的低电平。

    正如 David 指出的、这与(发布的)代码请求相匹配。 (我将 WDT 线添加回。)

    当我将所有 CCR1/CCR2-s 更改为500时、所有3个引脚上的占空比为1.04kHz、50%。 程序在从 main()返回后以 abort()结束旋转。

    [编辑:轻微澄清。]

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

    没有移除任何跳线。 请看我关于调试模式的帖子

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

    显然,我的启动板不能正常工作. 除非按下"Resume"、否则无法运行代码。 请参阅下面的 TI 示例代码。

    //************************************************************************************************
    // MSP430G2xx3演示- Timer_A、Toggle P1.0、CCR0 Cont。 模式 ISR、DCO SMCLK
    //
    // 说明:使用软件和 TA_0 ISR 切换 P1.0。 每切换一次
    // 50000个 SMCLK 周期。 SMCLK 为 TACLK 提供时钟源。
    // 在 TA_0 ISR 期间切换 P1.0并添加50000个时钟周期
    // CCR0。 每50000个周期触发一次 TA_0 ISR。 CPU 正常关闭和
    // 仅在 TA_ISR 期间使用。
    // ACLK =不适用、MCLK = SMCLK = TACLK =默认 DCO
    //
    //      MSP430G2xx3
    //     ------------------------
    ///|||         XIN|-
    //   |        |
    //   --|RST XOUT|-     
    //    |        |
    //    |      P1.0|--> LED
    //
    // D. Dang
    // 德州仪器(TI)公司
    // 2010年12月
    // 使用 CCS 版本4.2.0和 IAR Embedded Workbench 版本:5.10构建
    //************************************************************************************************

    #include

    内部 main (void)

     WDTCTL = WDTPW + WDTHOLD;         //停止 WDT



      P1DIR |= 0x0C;               // P1.2和 P1.3输出
      P1SEL |= 0x0C;               // P1.2和 P1.3 TA1/2选项
      CCR0 = 512-1;               // PWM 周期
      CCTL1 = OUTMOD_7;             // CCR1复位/设置
      CCR1 = 384;                // CCR1 PWM 占空比
      TACTL = TASSEL_1 + MC_1;          // ACLK、向上计数模式

     // __bis_SR_register (LPM3_bits);       //输入 LPM3


    }

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

    Bruce、我回去尝试了我发布的第一个代码。 甚至在我停止调试器时也是如此。 它看起来像最初的问题是由于我没有完成整个闪存过程。 我只是单步执行代码、然后停止了。 使用此代码、我按"Resume"以完成芯片刷写。 我上次发布的代码的运行情况。 你的猜测可能比我的更好。 感谢您的意见。

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

    尊敬的 Randy:
    很高兴听到它起作用了。 我将结束该主题。  

    此致、

    Diego Abad