msp430 launchpad的捕获模式中断无法进入

2019-03-24 12:35发布

本人想利用定时器的捕获模式触发LED2灯的亮灭,但不知为何中断怎么也无法进入(我用一根杜邦线,一端连上VCC,一端间接性地连上P1.2,以实现P1.2端电平的上升和下降),看了下相应管脚对应的信号源,P1.2对应的信号源为T0A1.CCI1A,这个应该是没错的。
这里向懂的朋友请教下,十分感谢!(用的是MSP430G2553芯片)

程序如下:
#include "msp430g2553.h"
unsigned char overflow;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;//关闭看门狗
  P1DIR=BIT6;
  P1OUT=BIT6;
  P1SEL=BIT2;                                //设置P1.2端口为功能模块使用,用来捕获信号的上升下降沿
  DCOCTL=0;
  BCSCTL1=CALBC1_1MHZ;
  DCOCTL=CALDCO_1MHZ;                        //设置DCO为1MHZ
  BCSCTL2 = SELM_1;                             //主时钟和从时钟都选择DCOCLK
  TACTL |= TASSEL_2 + ID_0+TACLR+MC_2;     //设置定时器的时钟源为SMCLK,并设置为不分频(1MHZ),连续计数模式,TAR清零
  TA0CCTL1 |= CCIE+CAP+CM_1+CCIS_0+SCS;        //中断使能,捕获模式,上升沿捕获,同步模式,捕获信号源选择为CCI1A端口
   _EINT();//全局开中断
    while(1)
    {
     }

}


#pragma vector = TIMER0_A1_VECTOR
__interrupt void TimerA_ISRTWO(void)
{

    switch(TA1IV)                              //向量查询
  { case 2:                                       //捕获中断
        if(TA1CCTL0&CM0)                    //上升沿
         {
           TA1CCTL0=(TA1CCTL0&(~CM0))|CM1;       //更变设置为下降沿触发
           overflow=0;                     //溢出计数变量复位
           P1OUT|=BIT6;                       //实验板的LED2亮
           TA0CCTL1&=~CCIFG;              //清除中断标志
         }
       else if (TA1CCTL0&CM1)                 //下降沿
        {  
           TA1CCTL0=(TA1CCTL0&(~CM1))|CM0;       //更变设置为上升沿触发
           TA1R=0;
         overflow=0;                     //溢出计数变量复位
           P1OUT&=~BIT6;                    //实验板的LED2灭
          TA0CCTL1&=~CCIFG;               //清除中断标志
        }   
       break;
    case 10:                               //定时器溢出中断
       overflow++;
       break;                              //溢出计数加1
    default:break;
  }

[ 本帖最后由 WPD 于 2013-5-11 20:51 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
WPD
2019-03-25 08:56
不知道是不是中断服务函数里的case有问题,里面的case2对应的应该是CCR1的CCIFG中断标志,但我用的不知道是不是CCR1寄存器,如果不是那又怎么改?

一周热门 更多>

相关问题

    相关文章