MSP430的捕获功能求助?

[复制链接]
 楼主| startostar 发表于 2012-4-23 09:45 | 显示全部楼层 |阅读模式
谁用过MSP430的捕获功能如果上升沿下降沿都捕获的话(初始化设置完成),中断中怎么分别识别是上升沿还是下降沿的中断?
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 | 显示全部楼层
使用捕获模式,你只需初始化时定义好就可以按照你的意图使用了,至于如何识别上升沿下降沿那是芯片内部的构成,运用模电的比较器之类的。如果你是做单片机的,这部分要详细了解,如果是用单片机就没这必要了
checkcai 发表于 2012-4-25 16:35 | 显示全部楼层
有CCP模块就有这个功能
永远的不知 发表于 2012-4-27 16:23 | 显示全部楼层
1# startostar
上升沿和下降沿是可以设的。
tianli1980 发表于 2012-4-27 21:56 | 显示全部楼层
上升沿捕获,还是下降沿捕获,还是二者都能捕获,可以自己选择配置。
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)*时钟周期;
Cathy_Fu 发表于 2012-5-14 16:12 | 显示全部楼层
识别不了 只能通过别的方式去判断 比如说查询当前引脚上的电平是高or低
hn04 发表于 2012-5-21 14:40 | 显示全部楼层
本帖最后由 hn04 于 2012-5-22 08:49 编辑

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
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

粉丝
快速回复 在线客服 返回列表 返回顶部