打印

MSP430的捕获功能求助?

[复制链接]
7938|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
peter_zheng| | 2012-4-23 16:51 | 只看该作者
在比较器模块里有一个寄存器是CMx,可以进行选择:
Capture mode
00 No capture
01 Capture on rising edge
10 Capture on falling edge
11 Capture on both rising and falling edges

使用特权

评论回复
板凳
liqaz| | 2012-4-23 17:51 | 只看该作者
不是每个430系列都有
捕获功能吧

使用特权

评论回复
地板
yiyanzhong| | 2012-4-25 16:18 | 只看该作者
使用捕获模式,你只需初始化时定义好就可以按照你的意图使用了,至于如何识别上升沿下降沿那是芯片内部的构成,运用模电的比较器之类的。如果你是做单片机的,这部分要详细了解,如果是用单片机就没这必要了

使用特权

评论回复
5
checkcai| | 2012-4-25 16:35 | 只看该作者
有CCP模块就有这个功能

使用特权

评论回复
6
永远的不知| | 2012-4-27 16:23 | 只看该作者
1# startostar
上升沿和下降沿是可以设的。

使用特权

评论回复
7
tianli1980| | 2012-4-27 21:56 | 只看该作者
上升沿捕获,还是下降沿捕获,还是二者都能捕获,可以自己选择配置。

使用特权

评论回复
8
cuiyong0709| | 2012-5-8 11:05 | 只看该作者
MSP430F5510头文件里定义
#define CM_0                (0*0x4000u) /* Capture mode: 0 - disabled */
#define CM_1                (1*0x4000u) /* Capture mode: 1 - pos. edge */
#define CM_2                (2*0x4000u) /* Capture mode: 1 - neg. edge */
#define CM_3                (3*0x4000u) /* Capture mode: 1 - both edges */
下边是我用MSP430F5510单片机做的捕获,我想捕获的是双沿,但是我先选的上升沿捕获,当上升沿捕获中断后再改为下降沿捕获,下降沿捕获中断后再改为上升沿捕获。
//初始化程序
void Init_TA(void)
{
      TA0CCTL1 = CCIE + CM_1 + SCS + CAP;                //对应CCR1使能,上升沿同步捕获
    TA0CTL = TBSSEL__ACLK + MC_2 + TACLR + TAIE;//时钟源选择ACLK,连续数模式,清计数器
}
//中断程序
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
     switch(TA0IV)                                                    //TA中断向量查询
     {
          case 2:                                                         //是捕获中断  2为CCR1捕获中断向量值
            if (TA0CCTL1 & CM0)                            //上升沿捕获
            {
                         TA0CCTL1 &=~ CM_1;  
                         TA0CCTL1 |= CM_2;                      //改为下降沿捕获
                 start = TA0R;
                  }
                   if (TA0CCTL1 & CM1)                            //下降沿捕获
            {
                        TA0CCTL1 &=~ CM_2;  
                        TA0CCTL1 |= CM_1;                      //改为上升沿捕获
                end = TA0R;
                  }
        break;
         
            case 14:                                                //是溢出中断
               overflow++;                                //溢出次数自加1
            break;
         
            default:
            break;
    }
}
//那么你捕获的脉宽就是time = (overflow * 65535 + end - start)*时钟周期;

使用特权

评论回复
9
Cathy_Fu| | 2012-5-14 16:12 | 只看该作者
识别不了 只能通过别的方式去判断 比如说查询当前引脚上的电平是高or低

使用特权

评论回复
10
hn04| | 2012-5-21 14:40 | 只看该作者
本帖最后由 hn04 于 2012-5-22 08:49 编辑

CMx只是用来设置触发模式的,我一般是判断寄存器中的CCI位来区分上升沿和下降沿

if((TA1CCTL0 & CCI) == CCI)
{
       //上升沿触发
}
else
{
      //下降沿触发
}//end if((TA1CCTL0 & CCI) == CCI)

使用特权

评论回复
11
jupiter08| | 2012-8-9 17:17 | 只看该作者
MSP430F5510头文件里定义
#define CM_0                (0*0x4000u) /* Capture mode: 0 - disabled */
#define CM_1                (1*0x4000u) /* Capture mode: 1 - pos. edge */
#define CM_2                ( ...
cuiyong0709 发表于 2012-5-8 11:05

你好,我有个程序跟你的差不多,不过我的总是进不了中断,求指点

使用特权

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

本版积分规则

1

主题

30

帖子

1

粉丝