gpt4 book ai didi

c - MSP430 Timer_A - 寄存器的比例

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:41 26 4
gpt4 key购买 nike

在 CCS 中对 MSP430 进行编程

利用Timer_A,ACLK和他的中断来使LED闪烁(只是现在闪烁-同样长时间断开-同时打开)。

此代码闪烁导致延迟 2 秒。存在寄存器 TA1CCR0 的最大值为 0xFFFF= 65535(ACLK 为 2 秒)的问题。对于我的应用程序(闪烁的 LED 只是一个例子)我需要从 1 秒到 999 秒的范围。 (代码中的第 6-7 行)。我怎样才能做到这一点?可能吗?

#include <msp430.h> 
#include <msp430f6736.h>

void CfgTA(unsigned long delayCycles)
{
int t2=2; // must be variable from 1 to 999
t2=delayCycles*t2;
TA1CCTL0 |= CCIE; //Enable Interrupts on Timer
TA1CCR0 = t2-1; //Number of cycles in the timer
TA1CTL |= TASSEL_1 | MC_1; //ACLK , UP mode

}

void ledblink()
{
//LED config
P4DIR |= BIT6;
P4OUT &= ~BIT6;

CfgTA(32768); //Timer configuration to blink every 1 sec
while (1)
{
_bis_SR_register(LPM3_bits + GIE); //Enter Low Power Mode 3 with interrupts
}

}


#pragma vector=TIMER1_A0_VECTOR
__interrupt void Timer_A0(void)
{

P4OUT ^= BIT6; // Swapping on/off LED
}


int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

ledblink();

return 0;
}

最佳答案

如何计算 1 秒中断的秒数。

1) 将中断初始化为每秒发生一次并重新加载其定时器/计数器寄存器

2) 将全局变量设置为延迟秒数:

int delaySeconds = 10;

3) 中断函数内部

static int count =0;
count++;
if( count >= delaySeconds )
{
count = 0;
P4OUT ^= BIT6; // Swapping on/off LED
}

我觉得中断函数,在退出之前,还需要清除time1中断挂起标志

关于c - MSP430 Timer_A - 寄存器的比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33959369/

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