MSP430: Нужна помощь в настройке этого TimerA - PullRequest
0 голосов
/ 22 сентября 2018
#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_Init(), который запускается до этого Timer_Init().TIMER_INTERVAL будет установлено до выполнения Timer_Init с помощью Led_Init ().

DCO_FREQ нигде не установлено, поэтому я не совсем уверен, что я должен установить.

Я также не понимаю назначение счетчика тиков.Также не исключено, что формула вычисления TMRC неверна, поскольку логически TMRC уменьшается, если предустановка TIMER_INTERVAL выше, что не имеет смысла или не так ли?

В любом случае, как-то мне бы хотелось, чтобыМожет работать с более медленными интервалами, например, 1 с или медленнее, но не знаю, как.

Единица измерения: MSP430G2553

1 Ответ

0 голосов
/ 22 сентября 2018
BCSCTL1 = CALBC1_16MHZ;
DCOCTL = CALDCO_16MHZ;

DCO работает на частоте 16 МГц.

#define TMRC (... * TIMER_INTERVAL)

TMRC уменьшается, если заданное значение TIMER_INTERVAL выше

TMRC увеличивается пропорционально TIMER_INTERVAL.

...