342|1

1029

帖子

3

资源

纯净的硅(中级)

【GD32E503评测】 如何开启定时器中断? [复制链接]

    在我的简易示波器实验中,ADC转换的代码是放在主循环中,转换的频率不容易控制,我准备利用定时器中断的功能来实现固定转换的频率,但没有找到现成的定时器中断设置和处理的代码,我参照范例写了下列代码来设置定时器2:

//设置定时器2(Test100ms)
    timer_initpara.prescaler         = 1799;                //8999;
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period            = 9999;                //9999;
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
    timer_initpara.repetitioncounter = 0;
    timer_init(TIMER2, &timer_initpara);
	
    timer_interrupt_enable(TIMER2, TIMER_INT_UP);
    nvic_irq_enable(TIMER2_IRQn, 2U, 0U);
	
    timer_auto_reload_shadow_enable(TIMER2); 
    timer_enable(TIMER2);

 

    同时在gd32e50x_it.c文件中添加了中断处理函数,同时在头文件中进行了声明。中断处理是对LED1进行翻转测试,方便观看定时效果:

/*!
    \brief     TIMER2中断处理函数
    \param[in]  none
    \param[out] none
    \retval     none
*/
void TIMER2_IRQHandler(void)
{
    gd_eval_led_toggle(LED1);
}

 

    在主程序开始时调用了中断设置函数:

void exti_config(void)
{
    
    /* enable and set EXTI interrupt */
    nvic_irq_enable(TIMER2_IRQn, 1U, 0U);
    
    /* configure EXTI line */
    exti_init(TIMER2, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
    exti_interrupt_flag_clear(TIMER2);
}

    但在测试过程中,LED1毫无反映,就如同中断未发生一般,不知道上面的代码有那里不正确或者是还缺少什么设置。


回复

1029

帖子

3

资源

纯净的硅(中级)

经仔细检查,发现的程序是停在中断使能这行代码上:

timer_interrupt_enable(TIMER2, TIMER_INT_UP);

此时LED灯被点亮,但没有继续翻转,应该是中断起了作用。


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

最新文章 更多>>
    关闭
    站长推荐上一条 1/6 下一条

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

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

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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