50分MSP430 关于TIME_A的捕获与比较

来源:百度知道 编辑:UC知道 时间:2024/05/29 00:01:40
//******************************************************************************
// MSP430xG46x Demo - Timer_A, TACCR2 CAP mode. Mode ISR, DCO SMCLK
//
// Description: SMCLK provides clock source for TACLK.TACCR0 = 50000-1
// TACCR2 CAP the TACCR1 out , CCR1 += 5000;
// CPU is normally off and used only during TA_ISR.
// ACLK = 32.768kHz, MCLK = SMCLK = TACLK = Default DCO
//
// MSP430xG461x
// ---------------
// /|\| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | P1.2|--> TA1
// | P2.0|--> TA2
//
// FengLF
// LSD SCIENCE& TECHNOLOGY CO.,LTD
// 2007.06
// Built with IAR Embedded Workbench Version: 3.42A
//******************************************************************************
#include <msp430xG46x.h>

unsigned int cap_data,data1,data2;

我也是这个月才接触的,我来说说我知道的吧

CM0和CM1分别是指定时器A捕获比较寄存器TACCTLx中的捕获选择位,本程序设置的是TACCTL2中的这两位

程序中的两个中断是不同的中断,分别对应TACCIFG0和TACCIFG1标志位,也就是说,当对应的标志位置位时便进入对应的中断中。根据这个程序再详细点地说,由于设置成Timer_a 增计数模式,CCR0 = 50000-1,所以每次定时器A都会自动计数,到达49999时TACCIFG0置位,便进入到了Timer A0中断服务程序;而进入Timer A1中断服务程序的条件,就是每次定时器A计到CCR1的值时TACCIFG1置位。

Timer A0中断服务程序的作用就是在每次定时器计数完一轮后CCR1加500,一直加到50000时CCR1清零重新计数。

TAIV是定时器A的向量寄存器,里面有3位用来存放中断向量特征值,Timer A1 中断服务程序中就是根据这3位中断向量特征值来分情况,确定中断源(2对应捕获比较器1和TACCIFG1,4对应捕获比较器2和TACCIFG2,10对应的是定时器溢出和TAIFG),该程序中只对中断向量特征值为4时进行一些操作,具体是什么作用我说不清,所以不乱说,不过datax =CCR2 这个应该是读取输入的。>_<

OUT_MODx是TACCTLx中的输出模式控制位,程序中 CCTL1 |= OUTMOD_7 ,就是TACCTL1的输出选择复位/置位模式,即当计数值到TACCR1寄存器中的值时,输出信号(这里指TA1,即P1.2脚输出的信号)复位,当计数值达到TACCR0寄存器中的值时,输出信号置位。

由于 P1SEL |= BIT2 和 P2SEL |= BIT0 ,也就将 P1.2和 P2.0 设置成了外围模块的功能引脚

最后,建议你买本书或者借本书来看看 O(∩_∩)O