3805|6

15

帖子

1

TA的资源

一粒金砂(初级)

楼主
 

wtimer1捕获计数模式不进中断 [复制链接]

用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);
        }
}

最新回复

谢谢楼主,我试试   详情 回复 发表于 2014-8-6 10:06
 
点赞 关注

回复
举报

15

帖子

1

TA的资源

一粒金砂(初级)

沙发
 
用的tm4c123gh6pm芯片。
 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
楼主请问你这个问题现在解决了吗

点评

解决了,,写错了一个单词  详情 回复 发表于 2014-7-29 17:16
 
 
 

回复

27

帖子

1

TA的资源

一粒金砂(中级)

4
 
我现在配置串口中断也是,就是不进FIFO中断。
 
 
 

回复

15

帖子

1

TA的资源

一粒金砂(初级)

5
 
解决了,,,  ROM_TimerIntEnable (WTIMER1_BASE,TIMER_TIMA_MATCH | TIMER_TIMB_TIMEOUT);
这一句中的TIMER_TIMA_MATCH 应该写成TIMER_CAPA_MATCH。。。。
 
 
 

回复

15

帖子

1

TA的资源

一粒金砂(初级)

6
 
肚肚嘿嘿 发表于 2014-7-28 13:01
楼主请问你这个问题现在解决了吗

解决了,,写错了一个单词

点评

谢谢楼主,我试试  详情 回复 发表于 2014-8-6 10:06
 
 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

7
 
sculpture 发表于 2014-7-29 17:16
解决了,,写错了一个单词

谢谢楼主,我试试
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表