#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
答案 0 :(得分:-1)
BCSCTL1 = CALBC1_16MHZ;
DCOCTL = CALDCO_16MHZ;
DCO以16 MHz运行。
#define TMRC (... * TIMER_INTERVAL)
如果预设的TIMER_INTERVAL较高,则TMRC减小
TMRC与TIMER_INTERVAL成正比。