打印

捕获功能

[复制链接]
811|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jlyuan|  楼主 | 2014-10-18 22:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
spark周| | 2014-10-18 22:27 | 只看该作者
在比较器模块里有一个寄存器是CMx,可以进行选择:
Capture mode
00 No capture
01 Capture on rising edge
10 Capture on falling edge
11 Capture on both rising and falling edges

使用特权

评论回复
板凳
jiaxw| | 2014-10-18 22:28 | 只看该作者
不是每个430系列都有
捕获功能吧

使用特权

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

使用特权

评论回复
5
yszong| | 2014-10-18 22:29 | 只看该作者
有CCP模块就有这个功能

使用特权

评论回复
6
spark周| | 2014-10-18 22:30 | 只看该作者

上升沿和下降沿是可以设的。

使用特权

评论回复
7
jiaxw| | 2014-10-18 22:32 | 只看该作者
上升沿捕获,还是下降沿捕获,还是二者都能捕获,可以自己选择配置。

使用特权

评论回复
8
wuhany| | 2014-10-18 22:32 | 只看该作者
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
yszong| | 2014-10-18 22:34 | 只看该作者
识别不了 只能通过别的方式去判断 比如说查询当前引脚上的电平是高or低

使用特权

评论回复
10
dengdc| | 2014-10-18 22:35 | 只看该作者
CMx只是用来设置触发模式的,我一般是判断寄存器中的CCI位来区分上升沿和下降沿



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

使用特权

评论回复
11
jlyuan|  楼主 | 2014-10-18 22:37 | 只看该作者
嗯,我知道了

使用特权

评论回复
12
jlyuan|  楼主 | 2014-10-18 22:37 | 只看该作者
多谢大家了啊, 结贴了哈

使用特权

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

本版积分规则

880

主题

12030

帖子

4

粉丝