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.

[参考译文] MSP430G2553:无法使用 LPM3设置计时器中断

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/967261/msp430g2553-failing-to-setup-timer-interrupt-with-lpm3

器件型号:MSP430G2553

您好!

我制作了一个使用 DCO 的项目、以及一个使用 LPM3的计时器中断、该项目工作正常。 现在、我尝试使用 VLOCLK 执行相同的操作、但我无法使其正常工作。 之所以使用 VLOCLK、是因为我在唤醒时不需要大量的功耗计算、器件通常处于 LPM4模式、并具有按钮中断(不在代码中)、它仅在 CR2032上运行、并且应该尽可能长。 中断未触发。 我测试了时钟、它具有大约10kHz 的频率、这对于 VLOCLK 来说似乎是正确的(尽管指定的范围为4至20KHz 似乎是不可思议的)。

#include 

void sleep_ms()
{
TACTL =(TASSEL1 | TACLR | TAIE);
CCTL0 = CCIE;
CCR0 = 0;
TACCR0 = 3;
TACTL |= MC_1;
_bis_SR_register (LPM3_bits | GIE);
}

int main (void)
{
WDTCTL = WDTPW | WDTHOLD;

P1OUT = 0x00;
P1DIR = 0xFF;
P2OUT = 0x00;
P2DIR = 0xFF;
P3OUT = 0x00;
P3DIR = 0xFF;

//P1SEL = BIT0 //测试频率

BCSCTL3 |= LFXT1S_2; //_Bis_SR_register (SCG1 | SCG0); _NOP(); _NOP(); _NOP(); BCSCTL2 |= SELM_3 + DIVM_3; IFG1 &=~OFIFG; _enable_interrupt (); while (1) { P1OUT |= 0x02; sleep_ms(); P1OUT &=~0x02; sleep_ms(); } } #pragma vector=TIMER0_A0_VECTOR __INTERRUPT void Timer_A (void) { LPM3_EXIT; TACTL = 0; CCTL0 = 0; }

那么、我缺少什么呢?  我再也看不到发生了什么。

感谢您的任何提示。

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

    >    TACTL = (TASSEL1 | TACLR | TAIE);

    TASSEL1 is a bit setting, not a field setting, so this sets TASSEL=2 (SMCLK). To get ACLK (TASSEL=1), use something like:

    >   TACTL = (TASSEL_1 | TACLR | TAIE);

    Unsolicited: It looks like you're setting MCLK=10kHz/8=1.25kHz, which is pretty slow. I encourage you to measure how much power you're actually saving. When I did that experiment (many years ago), I observed that power didn't scale (down) linearly with MCLK speed; I concluded it was better to run MCLK moderately fast (0.5-1.0MHz) so as to spend more time in LPM.

    [编辑:我只是注意到您同时设置了 TAIE 和 CCTL0:CCIE、但您只有用于后者的 ISR。 我认为您不需要两者、因此我建议您删除 TAIE。]

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

    看起来它现在正在半途工作。 外部32KHz 振荡器是否是功耗最低的时钟源?