拿到launch pad的板子,想做一下定时器a的捕获功能,可是三天下来,没有进展。想要实现的功能很简单,从p1.0发出一个32.768KHZ的频率。利用定时器A的捕获测周期的宽度,可是怎么也进入不了中断?不知道怎么回事。在此请各位大师指点一下。
/*****************************************************************
//功能:利用定时器A的捕捉能测量脉冲信号的脉宽
//
//
// MSP430F2553
// -----------------
// /|| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | |
// | P1.0/ACLK|---+
// | | |
// | P1.1|<--+
// | |
// | |
//说明:ACLK要进行32.768K,并将其作为外部的要捕获的脉冲;
//MCLK=SMCLK=7.68M;
//******************************************************************************////
#include <msp430g2553.h>
int pwm_start,pwm_end,pwm_wide=0;
void main(void)
{
WDTCTL = WDTPW +WDTHOLD; // Stop Watchdog Timer
BCSCTL1=0xcd;
///BCSCTL2=0xc0;
P1DIR |= 0x01; // P1.0, outputs
P1SEL |= 0x01; // P1.0 ACLK output
P1SEL|=BIT1; //P1.1 CCI2A
TACCTL0 =CAP+CM_3+CCIS_0+SCS+CCIE;
TACTL = TASSEL_2 + MC_2; //SMCLK=7.68M,L连续计数模式
_EINT(); //开总中断
LPM0;
_NOP();
pwm_wide=pwm_end-pwm_start;
while(1);
}
// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A(void)
{
switch(TAIV)
{case 1:break;
case 2:
if(TACCTL0 & CCI)
pwm_start=CCR0;
else
pwm_end=CCR0;
//pwm_wide=pwm_end-pwm_start;
break;
case 10:
break;
}
LPM0_EXIT;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
P2DIR &= ~BIT3; // Set P2.3 as an input
TA1CTL = TASSEL_2 + MC_2; // SMCLK, contmode
TA1CCTL0 = CM_3 + CCIS_1 + SCS + CAP + CCIE; // Interrupt at both edges
捕获代码配置,请参考
一周热门 更多>