MSP430:设置此TimerA需要帮助

时间:2018-09-22 07:56:56

标签: c embedded msp430 microprocessors

#include "project.h"
#include "led.h"

#include "timer.h"

#define DIVIDER 8
#define TMRC (DCO_FREQ / DIVIDER / 1000 * TIMER_INTERVAL)

static tWord tickCount=0;

void Timer_Init() {

    BCSCTL1 = CALBC1_16MHZ;
    DCOCTL = CALDCO_16MHZ;
    BCSCTL2 = 0x0 ; // MCLK clock source DCOCLK, MCLK divider 1, SMCLK source DCOCLK, SMCLK divider 1

    // Set up interrupts and timer 0

    // Enable interrupts on timer
    CCTL0 = CCIE;

    // Use clock SMCLK, UP counting, divided of 8
    TACTL = TASSEL_2 + MC_1 + ID_3;

    // Set compare value
    CCR0 = TMRC;
}

__attribute__((interrupt(TIMER0_A0_VECTOR))) void Timer_A(void) { 
timer_run(); 
} 

tWord getTick() {return tickCount;}

timer_run() {
   tickCount++;
   Led_Update();
}

此代码是为我们的讲师提供的,我不希望使用它来设置此TimerA来使LED间隔闪烁,可以通过LED_Init()的构造函数进行更改,该构造函数在此Timer_Init()之前运行。 TIMER_INTERVAL将在通过Led_Init()执行Timer_Init之前设置。

DCO_FREQ没有设置任何位置,所以我不太确定该将其设置为什么。

我也不了解滴答计数器的用途。 TMRC计算公式也不是错误的,因为从逻辑上讲,如果预设TIMER_INTERVAL较高时TMRC会减小,这是没有道理的吗?

无论如何,我希望它能够以更慢的间隔(例如1秒或更慢)运行,但不知道如何运行。

单位:MSP430G2553

1 个答案:

答案 0 :(得分:-1)

BCSCTL1 = CALBC1_16MHZ;
DCOCTL = CALDCO_16MHZ;

DCO以16 MHz运行。

#define TMRC (... * TIMER_INTERVAL)
  

如果预设的TIMER_INTERVAL较高,则TMRC减小

TMRC与TIMER_INTERVAL成正比。