打印

定时器A的捕获

[复制链接]
2971|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yytpy2008|  楼主 | 2012-7-30 15:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
拿到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;
}

相关帖子

沙发
shenmu2012| | 2012-8-2 09:42 | 只看该作者
捕获跟中断总是不分家的 啊,用捕获功能是可以实现很多功能的啊

使用特权

评论回复
板凳
永远的不知| | 2012-8-2 13:12 | 只看该作者
1# yytpy2008

有两条建议
1.在初始化上加入将p1.1设为输入
P1DIR &= ~BIT1;
2.将中断向量改为TIMER0_A1_VECTOR试试。

使用特权

评论回复
地板
FS1360472174| | 2012-8-2 23:09 | 只看该作者
定时器A0有三个中断源吗?直接在中断里写服务程序

使用特权

评论回复
5
15200500727| | 2012-8-4 08:16 | 只看该作者
P1SEL |= 0x01;   改为PSEL=BIT1;

使用特权

评论回复
6
hawksabre| | 2012-8-5 17:08 | 只看该作者
顶一个  学习了  哦呵呵

使用特权

评论回复
7
peter_zheng| | 2012-8-11 12:58 | 只看该作者
P2SEL |= BIT3;                                        // Set P2.3 as timer interrupt
        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

捕获代码配置,请参考

使用特权

评论回复
8
apod502| | 2012-8-11 15:31 | 只看该作者
注意:当用P1.1作输入时,一定要写:PIOUT |=BIT1;

这句很重要!!

使用特权

评论回复
9
GG_GG| | 2012-8-11 19:51 | 只看该作者
路过学习了!

使用特权

评论回复
10
GG_GG| | 2012-8-11 19:51 | 只看该作者
感谢分享

使用特权

评论回复
11
GG_GG| | 2012-8-11 19:51 | 只看该作者
:lol

使用特权

评论回复
12
hawksabre| | 2012-8-31 18:47 | 只看该作者
在使用430单片机端口时   一定要声明所使用端口   你的问题没有声明所用端口的功能

使用特权

评论回复
13
springspring| | 2012-9-17 21:51 | 只看该作者
这种设置挺麻烦的,捕获模式跟中断是可以分开的

使用特权

评论回复
14
学习了

使用特权

评论回复
15
lonelynine| | 2013-11-14 18:44 | 只看该作者
我也在学习这方面,我发觉你这样做是不通的,P1.0/TACLK第二功能定义为输入,它是不能输出时钟的。所以无论你如何设置,都绝对不能得到脉冲,建议改为P2.0/ACLK这个引脚,它可是输出ACLK时钟,我验证过。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

75

帖子

1

粉丝