[求助] msp430g2553 捕获功能,好像没有进入中断~求指导~

benni   2012-8-6 10:16 楼主
msp430g2553 捕获功能,好像没有进入中断~求指导~

#include

unsigned int capture1_value = 0;

void main()
{
  WDTCTL = WDTPW + WDTHOLD;
  BCSCTL1 = CALBC1_16MHZ;  //设定cpu
  DCOCTL = CALDCO_16MHZ;   //配置DCOCLK产生16M时钟
  BCSCTL2 |= SELM_1 + DIVM_0 + DIVS_0;  //主时钟MCLK选择DCOCLK,不分频.子时钟SMCLK选择DCOCLK,不分频

  P1DIR &= ~BIT2;   //P1.2 INPUT
  P1SEL |= BIT2;   
  TACTL = TASSEL_2 + TACLR + MC_1; //SMCLK,up mode
    //capture 1
  TACCTL1 = CCIE + CM_2 + CCIS_0 + CAP + SCS ;    //neg. edge,enabled interrupt,CCIxA,capture mode,            
  TACCR1 = 16;  
  _BIS_SR(GIE);
  while(1)
  {}

}

#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{
  switch (TAIV)
  {
  case 0x02:
    TACCTL1 &= ~CCIFG;
    capture1_value = TACCR1;
  case 0x04:break;   //capture 2
  case 0x0a:break;
  }
}

回复评论 (15)

2推荐 elulis 

引用: 原帖由 benni 于 2012-8-6 15:21 发表
大神,捕获这个还是弄得不明白,官方给的code example里没有给出捕获的例程。我想问的有下面几点(我问题很多 )
1.在捕获下,竟然能进入中断里,不是说明满足了捕获条件了吗,那为什么把TAR时的值放入TACCRx里,但 ...
你才大神呢~
1、CCRx的值可能会是0;如果一直是0,是否是up mode并且CCR0=0呢?
2、嗯的,CCRx的值乘以timer的时钟源周期就是时间啦
3、是的,请在第一次捕获后CCIE中断使能标志位
4、G2553是2 x TA3,但TA0.2如图在DIP20封装上没有。
5、例如TA1.2的引脚对应P2.4(CCI2A)和P2.5(CCI2B)引脚,如下图;另外一些内部信号也是由CCIx区分的,例如常用捕获ACLK来校正DCO频率。捕获的边沿是由TACCTLx寄存器配置的。

无标题.png
Python全文搜索引擎:<url>http://code.google.com/p/ming-search/</url>
点赞  2012-8-9 22:36
#pragma vector = TIMER0_A0_VECTOR
改为#pragma vector = TIMER0_A1_VECTOR

CCR1、CCR2的中断在A1里面
Python全文搜索引擎:<url>http://code.google.com/p/ming-search/</url>
点赞  2012-8-6 10:29

回复 沙发 elulis 的帖子

我改了,好像还是不行啊,capture1_value这个变量一下是0,没有变,怎么回事~
点赞  2012-8-6 10:32
volatile unsigned int capture1_value = 0;
然后调试试试看可以吗?
Python全文搜索引擎:<url>http://code.google.com/p/ming-search/</url>
点赞  2012-8-6 10:40

回复 4楼 elulis 的帖子

还是不行,没有变化~
点赞  2012-8-6 10:48

回复 5楼 benni 的帖子

晕,我调试下看看……
Python全文搜索引擎:<url>http://code.google.com/p/ming-search/</url>
点赞  2012-8-6 10:52

回复 6楼 elulis 的帖子

恩。。。非常感谢~
点赞  2012-8-6 10:55

回复 5楼 benni 的帖子

TACTL = TASSEL_2 + TACLR + MC_2; //SMCLK,Continous mode 这样可以了。
Python全文搜索引擎:<url>http://code.google.com/p/ming-search/</url>
点赞  2012-8-6 10:59

回复 8楼 elulis 的帖子

为什么是要连续计数模式?
点赞  2012-8-6 11:05

回复 9楼 benni 的帖子

Up Mode 是从0到CCR0计数,CCR0没有赋值一直是0,TAR也一直是0。当捕获发生时把TAR自动赋值给CCRx,这个值只能是0……要去公司吃饭啦,回聊:)
Python全文搜索引擎:<url>http://code.google.com/p/ming-search/</url>
点赞  2012-8-6 11:09

回复 8楼 elulis 的帖子

当满足捕获条件的时候不是会把TAR里的值传给TACCR1的吗,为什么调试的时候的TACCR1的值就是main里的值的?
点赞  2012-8-6 11:11

回复 10楼 elulis 的帖子

恩。。非常感谢,那我再好好看看datasheet吧,还有不懂的,还请你多多指教~
点赞  2012-8-6 11:13

回复 11楼 benni 的帖子

大神,捕获这个还是弄得不明白,官方给的code example里没有给出捕获的例程。我想问的有下面几点(我问题很多
1.在捕获下,竟然能进入中断里,不是说明满足了捕获条件了吗,那为什么把TAR时的值放入TACCRx里,但用watch看的值还是0.  
2.当捕获条件满足后,把TAR时的值放入TACCRx里,那么TACCRx 乘以 定时的时间 是不是就是这次捕获所花的时间。
3.如果输入的是方波,且是下降沿捕获,那么是不是一直都在捕获下降沿,不断进入中断,我想只捕获一次,该怎么做?
4..datasheet里不是说msp430g2553有两个定时器,且每个都有三个捕获口,那怎么timer0只有TA0.0,TA0.1,那对应的CCR2的TA0.2是在哪个引脚?
5.CCIXA与CCIXB,有什么区别,两个都是外部触发源输入口,是不是分别对于的是下降沿与上升沿输入口。
好多问题哦,请多指教~
点赞  2012-8-6 15:08

回复 沙发 elulis 的帖子

大神,捕获这个还是弄得不明白,官方给的code example里没有给出捕获的例程。我想问的有下面几点(我问题很多 )
1.在捕获下,竟然能进入中断里,不是说明满足了捕获条件了吗,那为什么把TAR时的值放入TACCRx里,但用watch看的值还是0.  
2.当捕获条件满足后,把TAR时的值放入TACCRx里,那么TACCRx 乘以 定时的时间 是不是就是这次捕获所花的时间。
3.如果输入的是方波,且是下降沿捕获,那么是不是一直都在捕获下降沿,不断进入中断,我想只捕获一次,该怎么做?
4..datasheet里不是说msp430g2553有两个定时器,且每个都有三个捕获口,那怎么timer0只有TA0.0,TA0.1,那对应的CCR2的TA0.2是在哪个引脚?
5.CCIXA与CCIXB,有什么区别,两个都是外部触发源输入口,是不是分别对于的是下降沿与上升沿输入口。
好多问题哦,请多指教~
点赞  2012-8-6 15:21
定时器要打开CCIE的
点赞  2013-8-24 13:54
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复