打印

wtimer1捕获计数模式不进中断

[复制链接]
1389|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
379889207|  楼主 | 2014-7-24 14:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 379889207 于 2014-7-24 16:49 编辑

用WTIIME1写一个测频计,低频用的是捕获计时模式可以测出结果,高频用捕获计数模式,但测试高频部分时TIMEA模块不进中断,TIMERB可以正常中断,这是什么原因?
void Init_WTIMER1_HighFre(void)              //初始化
{
        SysCtlPeripheralEnable(SYSCTL_PERIPH_WTIMER1);//启用Timer1模块模块
        SysCtlDelay(1);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);//启用GPIO作为脉冲捕捉引脚
        SysCtlDelay(1);

        ROM_GPIOPinConfigure(GPIO_PC6_WT1CCP0);           //配置GPIO脚为捕捉模式
        ROM_GPIOPinTypeTimer(GPIO_PORTC_BASE,GPIO_PIN_6);
        ROM_GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_6,   
                                                                GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);
                    
        //  配置使用Timer4的TimerA模块为边沿触发减计数模式
        ROM_TimerConfigure( WTIMER1_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_COUNT
                        |TIMER_CFG_B_PERIODIC);
        ROM_TimerControlEvent( WTIMER1_BASE, TIMER_A, TIMER_EVENT_NEG_EDGE);

//        ROM_TimerIntRegister(WTIMER1_BASE,TIMER_A,ISR_WTimer1A);

        ROM_TimerLoadSet (WTIMER1_BASE, TIMER_A, 11000);
        ROM_TimerLoadSet (WTIMER1_BASE, TIMER_B, 16000000);
        ROM_TimerMatchSet(WTIMER1_BASE, TIMER_A, 10000);

        ROM_IntMasterEnable ();

        ROM_TimerIntEnable (WTIMER1_BASE,TIMER_TIMA_MATCH | TIMER_TIMB_TIMEOUT);
        ROM_IntEnable (INT_WTIMER1A);
        ROM_IntEnable (INT_WTIMER1B);

        ROM_TimerEnable (WTIMER1_BASE, TIMER_A );
        ROM_TimerEnable (WTIMER1_BASE, TIMER_B);
}

void ISR_WTimer1A(void)
{
        uint32_t CapTimer_Fre;
        uint32_t ulStatus;
        uint8_t PinStatus;
        ulStatus = TimerIntStatus(WTIMER1_BASE,false);
        TimerIntClear (WTIMER1_BASE, ulStatus);

        if(ulStatus & TIMER_CAPA_MATCH)
        {
                ROM_TimerControlEvent( WTIMER1_BASE, TIMER_A, TIMER_EVENT_NEG_EDGE);
                ROM_TimerLoadSet(WTIMER1_BASE, TIMER_A, 11000);
                ROM_TimerEnable(WTIMER1_BASE, TIMER_A);

                CapTimer_Fre=TimerValueGet(WTIMER1_BASE, TIMER_B);
                fre_temp_tick= CapTimer_Fre_Ori + (Fre_TimerOutCount*16000000) - CapTimer_Fre;
                CapTimer_Fre_Ori = CapTimer_Fre;
                Fre_Cur_Frequency=(uint64_t)1000*80000000 / fre_temp_tick;
                Fre_TimerOutCount=0;
        }
        PinStatus = GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_1);  //   反转LED
        GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1, ~PinStatus);
}
void ISR_WTimer1B(void)
{
        uint32_t ulStatus;
        ulStatus = TimerIntStatus(WTIMER1_BASE,false);
        TimerIntClear (WTIMER1_BASE, ulStatus);  //  清除中断标志位
//        TimerEnable (WTIMER1_BASE, TIMER_B);

        Fre_TimerOutCount++;

        if(GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_2))
        {
                GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0);
        }
        else
        {
                GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 4);
        }
}

用的是TM4C123GH6PM

相关帖子

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

本版积分规则

1

主题

2

帖子

1

粉丝