MSP430f5529定时器,定时器中断[以TIMERA为例]
参照用户手册第十七章
前言
定时器A是一个16位定时/计数器,拥有七个捕获/比较寄存器。定时器可支持多个捕获/比较、PWM输出和定时通道。定时器还具备极多的中断功能。中断可以在溢出条件下在计数器和每个捕获/比较寄存器中发生.MSP430F5529的计数参考时钟来源于ACLK,SMCLK,TAxCLK(外部时钟源),INCLK(外部时钟源),通过TASSEL可以设置采用的参考时钟,有关时钟源的知识将在以后讲述。
功能概述
MSP430的定时器具有以下几种功能
1.包含了四种工作模式的异步16位定时/计数器
2.输入捕获/输出比较
3.PWM输出
4.定时中断
这一节主要介绍定时器本体使用
MSP430的定时器控制模式有四种,分别为停止,向上计数,连续(continuous)计数,往返计数模式。此四种模式通过MC位来选择。
向上计数模式会连续从0记到设置值
往返计数模式记到设置值后重新返回向下计数到0
连续计数模式重复计数从0到65535(0xFFFFh)
向上,上下计数模式会在记到值时触发中断,连续计数模式在归零时触发中断
定时器启动方式
计时器可通过以下方式启动或重新启动:
•当MC>0且时钟源处于活动状态时,计时器计数。
•当定时器模式为向上或向上/向下时,可通过将0写入TAxCCR0来停止定时器。然后,可以通过将非零值写入TAxCCR0来重新启动计时器。在这种情况下,计时器从零开始向上递增。
以上翻译原文
寄存器介绍
16位定时/计数器TAxR(TimerA Register)
16位定时/计数器TAxR,此定时器(以下定时/计数器均简称定时器)可读可写。最大计数值65535,计数溢出时会产生溢出中断标志TAIFG。通过比特位TACLR,定时器的存值,定时器分频设置,定时器计数方向可被清除。
该寄存器即定时器本体
定时器控制寄存器TAxCTL(TimerA Control Register)
可按位读写,是总体控制定时器的开关。
以下为具体操作模式的宏定义
位名称 | 功能 |
---|---|
TASSEL | 设置计数参考时钟 |
MC | 设置计数模式 |
TACLR | 清除设置开关 |
TAIE | 溢出中断使能开关 |
TAIFG | 溢出中断标志位 |
需要注意到,有些宏定义虽然表述不同但是比特定义值是相同的。他们具有等效的作用,可以相互取代。
定时器捕获/比较寄存器TAxCCTLn(TimerAx Capture/Compare Control n Register)
有关x,n指代数值:
x是指代TimerA的某个定时器,有0和1两个。n为CCRn的数量,这里TimerA有七个,即n为从0到6。其产生中断的优先级从0到6逐级递减,0为最高。
位名称 | 功能 |
---|---|
CCIE | 设置计数中断使能 |
CCIFG | 计数中断发生标志 |
CCIFG产生进入中断函数后可自动清除,不需要软件复位
TAxCCRn
在向上计数模式,往返计数模式下,此设定值是定时增加的最大值。记到最大值将会置零中断或者反向计数。
示例程序
#include "msp430.h"
unsigned int i;
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= BIT0;
TA0CCTL0|=CCIE;
TA0CCR0|=30000;
TA0CTL = TASSEL_2 + MC_1 + TACLR;
__bis_SR_register(LPM0_bits + GIE);
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER_A(void)
{
P1OUT ^= BIT0;
}
需要注意到最后一句
__bis_SR_register(LPM0_bits + GIE);
使用中断时不要忘记打开总中断否则,中断无论如何都不会开启。
LPM0_bits的含义是单片机进入低功耗模式0