This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/msp430fr4133:计时器0未按预期工作!!

Guru**** 2589280 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/630110/ccs-msp430fr4133-timer-0-not-working-as-supposed

部件号:MSP430FR4133

工具/软件:Code Composer Studio

大家好,

我尝试实施一个简单的程序,每10秒切换一个LED。

为此,我想设置源 ACLK,在这个午餐板中是32.768 kHz,在连续模式和 输入分配器1中。

计时器= 6.5535万 / 3.2768万 =~ 2s

每个溢出将在2秒内发生。 问题是,我看到的是切换频率远低于这个。 可以有人帮助我吗?

这是代码:


#include <MSP4S.h>
#include <hlcd.h>

未签名的Global_Timer0_Count =0;
unsigned Global_Count = 0;

INT MAIN ( void )

WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

TA0CTL |= TALCL;

TA0CTL || MC_2 | tassel_1 | ID_0;

TA0CTL |= TAIE;

P1DIR |= BIT0;// WFP 1.0 是LED输出
P1OUT = 0x01;//设置LED打开

PM5CTL0 &=~LOCKLPM2;

__enable_interrupit();

__bis_sr_register(GIE);//启用中断的LPM0


同时(1)

}

}

//计时器A0中断服务例程
#pragma vector = TIMER0_A1_vector
__interrupt void TIMERA0_ISR0 (void)

global_Timer0_Count ++;

IF (Global_Timer0_Count == 5){

P1OUT ^= 0x01;//使用OXE-OR切换WFP 1.0
global_Timer0_Count = 0;
TA0CTL &=~BIT0;

}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Hernani:

    我发现了一个与您的代码示例非常相似的代码示例,它使用Timer0_A每2秒对中断进行计时,以切换WFP 1.0。 使用 此链接访问TI资源管理器 ,以查找msp430fr413x_ta0_04.c项目。 导入此项目并将其与代码进行比较,以查看差异并了解示例如何正确实现2秒中断。

    一旦您确认该代码有效且中断每2秒触发一次,则添加全局变量以确定是否已过了10秒来切换LED。 另一种方法是使用计时器时钟分频器将计时器A的时钟除以8,这样您就不必使用全局变量来确定是否已超过10秒。 当您将时钟除以8时,16秒时会出现溢出,因此 您必须在"Up Mode (上机模式)"下使用计时器,并在TA0CCRx中最多计数至特定值,以确定是否已超过10秒。

    希望这能有所帮助!

    此致,

    Matt Calvo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Hernani,

    如果您认为此问题已解决,请继续并选择我的上述帖子已解决您的问题,以便我们可以关闭此线程。

    谢谢!

    Matt Calvo
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    解决。 谢谢你