MSP430定时器时钟分频器不起作用

时间:2017-05-04 08:32:14

标签: clock msp430 divider

我正在尝试使用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;}
} 

1 个答案:

答案 0 :(得分:1)

默认情况下,SMCLK和CPU以相同的频率运行(约1.1 MHz)。 中断处理程序运行所需的时间要长于五个周期,因此输出速度不是由您配置计时器的方式决定的,而是由Timer_A()中的代码运行速度决定的。

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