3608|10

27

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

msp430 launchpad的捕获模式中断无法进入 [复制链接]

本人想利用定时器的捕获模式触发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 编辑 ]

最新回复

P1.2是不是要设置一下输入模式。P1DIR&=~BIT2;  详情 回复 发表于 2013-5-16 08:37
 
点赞 关注

回复
举报

157

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
我用一根杜邦线,一端连上VCC,一端间接性地连上P1.2,以实现P1.2端电平的上升和下降


这并不一定能实现上升和下降. 你试试接VCC后再接地, 而不是浮空.

点评

WPD
刚才试了下,LED2状态还是不变的,应该是程序有问题了  详情 回复 发表于 2013-5-11 21:53
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 457887107 的帖子

刚才试了下,LED2状态还是不变的,应该是程序有问题了
 
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

4
 
需不需要使能上下拉电阻?

点评

WPD
加了句P1REN=BIT2;使能P1.2上下拉电阻,LED2还是不闪  详情 回复 发表于 2013-5-11 22:45
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 wangfuchong 的帖子

加了句P1REN=BIT2;使能P1.2上下拉电阻,LED2还是不闪
 
 
 

回复

98

帖子

0

TA的资源

一粒金砂(高级)

6
 
TACTL |= TASSEL_2 + ID_0+TACLR+MC_2;  
这一句没有开启中断
应该为 TACTL |= TASSEL_2 + ID_0+TACLR+MC_2+TAIE;

点评

WPD
这位朋友,还是不行,无论像4楼所说使能上拉电阻与否,再加上你的TAIE中断,灯还是依旧不闪  详情 回复 发表于 2013-5-11 23:08
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 6楼 wow1919 的帖子

这位朋友,还是不行,无论像4楼所说使能上拉电阻与否,再加上你的TAIE中断,灯还是依旧不闪
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

8
 
不知道是不是中断服务函数里的case有问题,里面的case2对应的应该是CCR1的CCIFG中断标志,但我用的不知道是不是CCR1寄存器,如果不是那又怎么改?
 
 
 

回复

5015

帖子

12

TA的资源

裸片初长成(初级)

9
 
TACTL |= TASSEL_2 + ID_0+TACLR+MC_2;分两句写
TACTL |= TACLR;
TACTL |= TASSEL_2 + ID_0+MC_2;

TACLR会将TA的配置清零。
 
个人签名《MCU工程师炼成记》作者之一
 
 

回复

298

帖子

2

TA的资源

纯净的硅(中级)

10
 
你程序很凌乱啊,双边沿捕获寄存器里有模式3啊,就是双边沿捕获,为什么还要切换捕获模式,还有可以检查一下时钟工作没,时钟没工作也进入不了中断的
 
 
 

回复

51

帖子

1

TA的资源

一粒金砂(中级)

11
 
P1.2是不是要设置一下输入模式。P1DIR&=~BIT2;
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表