[技术求助] 用定时器的捕获模式

[复制链接]
212|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;
    }

    这里处理计数器的差值,就是两个脉冲之间的时间;
}
| 2018-10-29 19:44 | 显示全部楼层
你用的什么型号的单片机?
建议先运行一下例程看看,排除下硬件问题
 楼主 | 2018-11-1 21:42 | 显示全部楼层
是MSP430FR6972,硬件没问题,示波器看到波形。
单独用捕获,可以。
单独用定时器,溢出中断也可以产生。
就是定时器,再初始化了捕获以后就不会产生定时器的溢出中断了,不知道问题在哪?
 楼主 | 2018-11-3 11:35 | 显示全部楼层
有没有这么用过的大神给指导一下?
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表