【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毫无反映,就如同中断未发生一般,不知道上面的代码有那里不正确或者是还缺少什么设置。
|