【问题标题】:MSP430 timer clock divider doesn't workMSP430 定时器时钟分频器不工作
【发布时间】:2023-03-18 04:07:01
【问题描述】:

我正在尝试使用 MSP430 进行简单的 PWM。使用计时器我面临一个问题。我注意到时钟分频器没有任何意义我设置 ID_3 假设时钟除以 8,或者我设置 ID_1 或 ID_2。我用示波器看到的输出频率是 130Hz。有错误吗?

#include "msp430g2553.h"  

  volatile unsigned long i;
  volatile unsigned int D1=50;

void main(void)
{
  i=0;
  WDTCTL = WDTPW + WDTHOLD;         // Stop WDT  
  CCTL0 = CCIE;                     // CCR0 interrupt enabled
  TACTL = TASSEL_2 + MC_1 + ID_1;          // SMCLK, upmode MC1
  CCR0 =  5;                       // Timer should count up to CCR) and reset   
  P1OUT &= 0x00;                    // Shut down everything
  P1DIR &= 0x00;               
  P1DIR |= BIT0;                    // P1.0 pin output 
  _BIS_SR(CPUOFF + GIE);            // Enter LPM0 w/ interrupt 
  while(1)                          //Loop forever, we work with interrupts!
  {}
} 

// Timer A0 interrupt service routine 
#pragma vector=TIMER0_A0_VECTOR 
__interrupt void Timer_A (void) 
{   
   i=i+1;
   if (i>=100) {i=0;}
   if (i<=D1) {P1OUT = BIT0;}                          
   if (i>D1) {P1OUT &= 0x00;}
} 

【问题讨论】:

    标签: clock msp430 divider


    【解决方案1】:

    默认情况下,SMCLK 和 CPU 以相同的频率运行(大约 1.1 MHz)。 中断处理程序需要超过五个周期才能运行,因此输出速度不是取决于您如何配置定时器,而是取决于Timer_A() 中的代码可以运行多快。

    您可以尝试优化中断处理程序(i 不需要有 32 位等)并使用更长的定时器间隔。 但最好为硬件 PWM 配置定时器。

    【讨论】:

    • 同意硬件PWM
    • 感谢您的评论。基本上我需要 4 个具有不同占空比的 PWM,所以使用硬件我不能用硬件 PWM 做到这一点。我将尝试使用您的提示来选择不同类型的 i。对我来说,递增似乎不需要太多周期,尤其是当我让定时器以 1.1MHz 运行时。
    • CPU不能增加一个 32 位变量;这必须在软件中精心模拟。并考虑增加 DCO 频率。
    • 感谢大家的建议。我已经优化了我的 pwm 参数,现在开始使用 3 个 pwm 信号: volatile unsigned char i=0;易失性无符号字符 D1=127;易失性无符号字符 D2=10;挥发性无符号字符 D3=230;现在处理器应该只适用于 8 位的字符。现在我想完成定时器中断需要很短的时间,但现在我只有 66Hz。下面是我的定时器中断代码,为什么MSP430要花这么多时间?
    • // Timer A0 interrupt service routine #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) { i=i+1; if (i&gt;=255) {i=0;} if (i&lt;=D1) {P1OUT |= 0x01;} else {P1OUT &amp;= ~0x01;} if (i&lt;=D2) {P1OUT |= 0x40;} else {P1OUT &amp;= ~0x40;} if (i&lt;=D3) {P1OUT |= 0x04;} else {P1OUT &amp;= ~0x04;} }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 2019-11-24
    • 1970-01-01
    相关资源
    最近更新 更多