找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

关于TIMER0捕获一直为零

[复制链接]
跳转到指定楼层
楼主
本帖最后由 laosun2008 于 2017-5-8 15:41 编辑

我在T0_EXT(PA7)上装了一个按键,每次按键触发CAPIF中断好几次,并且捕获值一直为零


主函数代码如下:int32_t main(void)
{        

    //初始始化部份省略
    NVIC_EnableIRQ(TMR0_IRQn);
    TIMER_Open(TIMER0, TIMER_CONTINUOUS_MODE, 1);
    TIMER_SET_PRESCALE_VALUE(TIMER0, 0);
    TIMER_SET_CMP_VALUE(TIMER0, 0xFFFFFF);
    TIMER_EnableEventCounter(TIMER0, TIMER_COUNTER_FALLING_EDGE);//使能事件计        数模式
    TIMER_EnableCapture(TIMER0, TIMER_CAPTURE_FREE_COUNTING_MODE, TIMER_CAPTURE_FALLING_EDGE);//使能捕获模式
    TIMER_EnableCaptureDebounce(TIMER0);    TIMER_EnableInt(TIMER0);
    TIMER_EnableCaptureInt(TIMER0);               
    TIMER_Start(TIMER0);

    for(;;);
    return 0;
}

中断函数
static int cnt=0;
void TMR0_IRQHandler(void)
{
    if(TIMER_GetCaptureIntFlag(TIMER0) == 1)
    {
        uint32_t au32CAPValue;
        /* Clear Timer0 capture trigger interrupt flag */        
        au32CAPValue = TIMER_GetCaptureData(TIMER0)
        TIMER_ClearCaptureIntFlag(TIMER0);
        printf("capture int_cnt=%d , captureVal=%d \n",cnt++,au32CAPValue);        
                        
    }
}
下面是芯片运行时的引脚状态图













11.png (221 KB, 下载次数: 357)

11.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
a_ziliu 发表于 2017-5-8 13:31:50 | 只看该作者
timer 0的clock source怎麼設置的,可以看一下設定嗎?
回复 支持 反对

使用道具 举报

板凳
 楼主| laosun2008 发表于 2017-5-8 15:37:59 | 只看该作者
CLK_EnableModuleClock(TMR0_MODULE);                       
CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0SEL_HIRC, 0);

SYS->GPA_MFPL &= ~SYS_GPA_MFPL_PA7MFP_Msk;
SYS->GPA_MFPL |= SYS_GPA_MFPL_PA7MFP_T0_EXT;
回复 支持 反对

使用道具 举报

地板
a_ziliu 发表于 2017-5-9 09:33:11 | 只看该作者
把你的例子跟官方的比。
你多了這一行TIMER_EnableCaptureDebounce
移除試看看吧
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU