微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MSP430定时器详解

MSP430定时器详解

时间:01-16 来源:互联网 点击:

较功能,也就是当计数到CCRx时产生中断,由于CCTLx默认的是比较功能,所以一般也就只用到CCIE这个控制字,就是开启相应比较器的中断。CCRx就是相应比较器的值。

下面介绍几个Timer_A的重要寄存器:

TACTL寄存器:

SSEL_1 SSEL_0 是时钟源的选择

0——TACLK,使用外部引脚信号作为输入

1——ACLK,辅助时钟

2——SMCLK,子系统主时钟

3——INCLK,外部输入时钟

对TACTL进行模式设置的同时也开启了定时器,要停止只需把MC_0赋值给TACTL就可以。

ID1 ID0 是时钟源的分频选择

00——不分频

01——2分频

10——4分频

11——8分频

MC1 MC0 是模式选择

0——停止模式,用于定时器的暂停

1——增计数模式,计数器计数到CCR0,再清零计数

2——连续计数模式,计数器增计数到0xffff,再清零计数

3——增/减计数模式,增计数到CCR0,再减计数到0

CLR——————定时器清楚位

TAIE——————定时器中断允许位

TAIFG——————定时器溢出标志位

TAR寄存器:

16位计数器,是执行计数的单元,是计数器的主体。我的理解:即存储你的计数值,0——>CCR0

CCTLx寄存器:

捕获比较控制寄存器:

CAPTMOD1~0:选择捕获模式

0 0————禁止捕获模式

0 1————上升沿捕获

1 0————下降沿捕获

1 1————上升沿与下降沿都捕获

CCIS1~0: 捕获事件输入源

0 0————选择CCIxA

0 1————选择CCIxB

1 0————选择GND

1 1————选择Vcc

SCS——选择捕获信号与定时器时钟同步、异步关系

0:异步捕获

1:同步捕获(实际中经常使用同步模式,捕获总是有效的)

SCCIx——比较相等信号EQUx将选中的捕获/比较输入信号CCIx(CCIxA,CCIxB,Vcc和GND)进行锁存,然后可由SCCIx读出。

CAP——选择捕获模式还是比较模式。

0:比较模式

1:捕获模式

OUTMODx: 选择输出模式

0 0 0————输出

0 0 1————置位

0 1 0————PWM翻转/复位

0 1 1————PWM置位/复位

1 0 0————翻转

1 0 1————复位

1 1 0————PWM翻转/置位

1 1 1————PWM复位/置位

CCIEx——捕获/比较模块中断允许位

0:禁止中断

1:允许中断

CCIx——捕获/比较模块的输入信号

捕获模式:由CCIS0和CCIS1选择的输入信号可通过该位读出

比较模式:CCIx复位

OUT——输出信号(如果OUTMODx选择输出模式0,则该位对应于输入状态)

0:输出低电平

1:输出高电平

COV——捕获溢出标志

0:没有捕获溢出

1:发生捕获溢出

当CAP=0时,选择比较模式。捕获信号发生复位。没有使COV置位的捕获事件

当CAP=1时,选择捕获模式。如果捕获寄存器的值被读出前再次发生捕获事件,则COV置位。程序检测COV来判断原值读出前是否又发生捕获事件。读捕获寄存器时不会使溢出标志复位,须用软件复位。

CCIFGx——捕获比较中断标志

捕获模式:寄存器CCRx捕获了定时器TAR值时置位

比较模式:定时器TAR值等于寄存器CCRx值时置位

//***********************************************************

// Date: 2009.8.4

// Author: xurafreedom

// Email: freedomxura@gmail.com / mxh20999@163.com

// Blog: http://xurafreedom.cublog.cn

//

// Description: Toggle P3.4 using software and TA_0 ISR. Toggles every

// 50000 SMCLK cycles. SMCLK provides clock source for TACLK.

// During the TA_0 ISR, P3.4 is toggled and 50000 clock cycles are added to

// CCR0. TA_0 ISR is triggered every 50000 cycles. CPU is normally off and

// used only during TA_ISR.

// ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~800kHz

// Software release:IAR Assembler for MSP430 V4.09A/W32 (4.9.1.9)

//*******************************************************

#include

/********************函数声明******************/

void InitClock();

/********************主函数********************/

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

InitClock(); // Initialize the clock

P3DIR |= BIT4; // P3.4 output

CCTL0 = CCIE; // CCR0 interrupt enabled

CCR0 = 500;

TACTL = TASSEL_2 + MC_1; // SMCLK, Up to CCR0 mode

_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt

}

/*******************************************

函数名称:InitClock

功 能:初始化时钟函数

参 数:无

返回值 :无

********************************************/

void InitClock()

{

unsigned int oscdly;

BCSCTL1 = ~XT2OFF; //------------清OSCOFF/XT2,使XT2振荡器有效

do

{

IFG1 =~OFIFG; //------------清OFIFG

oscdly=255;

while(oscdly--); //-----

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top