|
【TI首届低功耗设计大赛】MSP430FR5969学习之定时器中断延时
[复制链接]
继续学习MSP430FR5969的定时器。关于定时器,库文件的DEMO里边是在continue模式下运行的例子,这里我只需要定时器工作在UP模式下,每隔一秒切换LED状态。于是自己摸索了下,应该是照如下配置运行的。
1 TIMA的配置函数如下:
void TIMA_Configuration(void)
{
TIMER_A_configureUpMode(TIMER_A0_BASE,
TIMER_A_CLOCKSOURCE_SMCLK,
TIMER_A_CLOCKSOURCE_DIVIDER_40,
(uint16_t)25,
TIMER_A_TAIE_INTERRUPT_DISABLE,
TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE,
TIMER_A_DO_CLEAR);
//TIMER A, 时钟SMCLK, 40分频,周期40,即定时时间为1ms,TIMER A 溢出中断禁止,CCR0比较中断开。
TIMER_A_clearCaptureCompareInterruptFlag(TIMER_A0_BASE, TIMER_A_CAPTURECOMPARE_REGISTER_0 );//清除中断标志位 CCR0
TIMER_A_startCounter(TIMER_A0_BASE, TIMER_A_UP_MODE);//TIM A 计数器开始运行
}
因为没有现成的参考,以上三个库函数的使用是我自己尝试着使用的,不知道有没有没考虑到的地方,有问题的话请拍砖指正。
2 进入低功耗模式
__bis_SR_register(LPM0_bits + GIE);
__no_operation();
LPM0模式下,MCLK关闭,但SMCLK仍然运行。所以不影响咱们定时器的工作。
3 进入中断
按照我的思路,中断向量应该是
vector=TIMER0_A0_VECTOR
其中TIMER3/2/1/0是用于表示哪个定时器,A0/1则表示该定时器下的其中一个中断源(每个定时器都有两个中断源)。
我这里用的是定时器0, 中断源为为TA0CCR0.CCIFG,所以是TIMER0_A0_VECTOR
4 程序结果分析
程序源码已上传。下载后开发板上的LED灯能够正确地在1S这个周期上切换,分析功耗结果,发现与现象一致,以1s为周期进行切换。所以程序应该无误。
今天就学到这里了。特别感谢蓝雨夜前辈今天的指点。
|
|