gpt4 book ai didi

c - MSP430:需要帮助设置此 TimerA

转载 作者:行者123 更新时间:2023-11-30 18:11:04 25 4
gpt4 key购买 nike

#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 将在 Timer_Init 执行之前通过 Led_Init() 设置。

DCO_FREQ 未在任何地方设置,因此我不太确定应该将其设置为什么。

我也不明白滴答计数器的用途。TMRC 计算公式错误也不是不可能的,因为从逻辑上讲,如果预设的 TIMER_INTERVAL 较高,TMRC 就会减小,这没有意义,不是吗?

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

单位:MSP430G2553

最佳答案

BCSCTL1 = CALBC1_16MHZ;
DCOCTL = CALDCO_16MHZ;

DCO 的运行频率为 16 MHz。

#define TMRC (... * TIMER_INTERVAL)

the TMRC decreases if the preset TIMER_INTERVAL is higher

TMRC 随 TIMER_INTERVAL 成比例增加。

关于c - MSP430:需要帮助设置此 TimerA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52454683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com