打印

用定时器的捕获模式

[复制链接]
1280|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电路设计|  楼主 | 2018-10-28 14:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我有个程序,需求是计算单位时间有多少个脉冲。
现在做到用定时器的捕获,计算两个脉冲之间的时间。
__interrupt void TIMER1_A0_ISR (void) 只能相应脉冲来的捕获事件。

现在我想要:如果很长时间没有脉冲,计数器满的时候也处理数据。
就是说没有脉冲来,我通过计数器满中断,刷新数据。
请问怎么做?

程序:
Timer_A_initContinuousModeParam initContParam_A1 =
{
        TIMER_A_CLOCKSOURCE_SMCLK,              // SMCLK Clock Source
        TIMER_A_CLOCKSOURCE_DIVIDER_2,          // SMCLK/2 = 4MHz
        TIMER_A_TAIE_INTERRUPT_DISABLE,         // Disable Timer interrupt
        TIMER_A_DO_CLEAR,                       // Clear value
        false                                   // Start Timer
};
Timer_A_initCaptureModeParam initCapParam_A1 =
{
        TIMER_A_CAPTURECOMPARE_REGISTER_0,
        TIMER_A_CAPTUREMODE_RISING_EDGE,
        TIMER_A_CAPTURE_INPUTSELECT_CCIxA,
        TIMER_A_CAPTURE_SYNCHRONOUS,
        TIMER_A_CAPTURECOMPARE_INTERRUPT_ENABLE,
        TIMER_A_OUTPUTMODE_OUTBITVALUE
};


void Init_TimerA(void)
{
//    //计数器  TA1  初始化
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1, GPIO_PIN4, GPIO_TERNARY_MODULE_FUNCTION);  //设置P1.4为捕获输入口
    Timer_A_initContinuousMode(TIMER_A1_BASE, &initContParam_A1);
    Timer_A_initCaptureMode(TIMER_A1_BASE, &initCapParam_A1);
}


__interrupt void TIMER1_A0_ISR (void)
{
    unsigned int temp;
    temp=TA1CCR0;
    if(TA1CCTL0&COV)
    {
      TA1CCTL0&= ~COV;
    }

    这里处理计数器的差值,就是两个脉冲之间的时间;
}

相关帖子

沙发
dirtwillfly| | 2018-10-29 19:44 | 只看该作者
你用的什么型号的单片机?
建议先运行一下例程看看,排除下硬件问题

使用特权

评论回复
板凳
电路设计|  楼主 | 2018-11-1 21:42 | 只看该作者
是MSP430FR6972,硬件没问题,示波器看到波形。
单独用捕获,可以。
单独用定时器,溢出中断也可以产生。
就是定时器,再初始化了捕获以后就不会产生定时器的溢出中断了,不知道问题在哪?

使用特权

评论回复
地板
电路设计|  楼主 | 2018-11-3 11:35 | 只看该作者
有没有这么用过的大神给指导一下?

使用特权

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

本版积分规则

6

主题

18

帖子

0

粉丝