Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

进入LPM3后定时器选择SMCLK但仍然可以唤醒?

$
0
0

芯片:MSP430FR6972

问题描述:

我将一个定时器的时钟源配置为SMCLK,而SMCLK的时钟来源是DCO,然后我在主函数中进入LPM3,按照我的理解应该是进不去定时器中断的呀,但是我调试发现我仍然可以进入中断,所以想问一下是哪里配置有问题吗?

相关代码:

/*
* 函数名: MSP_Clock_Config
* 描述 : 时钟配置 ACLK=32.768KHz MCLK=DCO=16MHz SMCLK=1MHz
* 输入 : 无
* 返回 : 无
*/
void MSP_Clock_Config(void)
{
/* 外部晶振引脚配置 */
PJSEL0 |= BIT4 | BIT5;
FRCTL0 = FRCTLPW | NWAITS_1;
CSCTL0_H = CSKEY >> 8; /* Unlock CS registers */
CSCTL1 = DCORSEL | DCOFSEL_4; /* Set DCO to 16MHz */
CSCTL2 = SELA__LFXTCLK | SELS__DCOCLK | SELM__DCOCLK;/* Select clock source */
CSCTL3 = DIVA__1 | DIVS__16 | DIVM__1; /* Set divider */
CSCTL4 = HFXTOFF | LFXTDRIVE_0;
CSCTL4 &= ~LFXTOFF;
do
{
CSCTL5 &= ~LFXTOFFG;
SFRIFG1 &= ~OFIFG;
}while (SFRIFG1&OFIFG); /* Wait oscillate is ready*/
CSCTL0_H = 0; /* Lock CS registers */
}

/*
* 函数名: TimerA0_Init
* 描述 : 定时器A0初始化并启动
* 输入 : 无
* 返回 : 无
*/
void TimerA0_Init(void)
{
TA0CCTL0 = CCIE; /* TA0CCR0 interrupt enabled */
TA0CCR0 = 30000; /* 1s的定时 */
TA0CTL = TASSEL__SMCLK | MC__UP; /* ACLK, UP mode */
}

/*
* 函数名: Timer0_A0_ISR
* 描述 : 停止定时器A0通道0中断服务函数
* 输入 : 无
* 返回 : 无
*/
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer0_A0_ISR(void)
{
Device_Status.tim_test_flag=1;

LPM3_EXIT;
}

int main(void)
{
WDTCTL = WDTPW+WDTHOLD_L;
MSP_GPIO_Init();
MSP_Clock_Config();
#if USE_DEBUG
MSP_USCIA1_Init();
#endif
TimerA0_Init();
_EINT();
while(1)
{
if(Device_Status.tim_test_flag)
{
Device_Status.tim_test_flag=0;
Debug_LED1_Blink;/* 会进入到这里 */
}
LPM3;
}

}


Viewing all articles
Browse latest Browse all 3634

Trending Articles