【GD32E503评测】 如何开启定时器中断?
[复制链接]
在我的简易示波器实验中,ADC转换的代码是放在主循环中,转换的频率不容易控制,我准备利用定时器中断的功能来实现固定转换的频率,但没有找到现成的定时器中断设置和处理的代码,我参照范例写了下列代码来设置定时器2:
-
- timer_initpara.prescaler = 1799;
- timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
- timer_initpara.counterdirection = TIMER_COUNTER_UP;
- timer_initpara.period = 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进行翻转测试,方便观看定时效果:
-
- void TIMER2_IRQHandler(void)
- {
- gd_eval_led_toggle(LED1);
- }
-
在主程序开始时调用了中断设置函数:
- void exti_config(void)
- {
-
-
- nvic_irq_enable(TIMER2_IRQn, 1U, 0U);
-
-
- exti_init(TIMER2, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
- exti_interrupt_flag_clear(TIMER2);
- }
但在测试过程中,LED1毫无反映,就如同中断未发生一般,不知道上面的代码有那里不正确或者是还缺少什么设置。
|