GD32固件库学习(六)-外部中断EXTI
1 外部中断以及事件功能概述
EXTI包含23个相互独立的边沿检测电路并且可以向处理器产生中断请求或事件唤醒。EXTI提供3种触发类型:上升沿触发,下降沿触发和任意沿触发。EXTI中每个边沿检测电路都可以分别予以配置或屏蔽。
EXTI触发源包括来自I/O管脚的16根线以及来自内部模块的7根线。(包括LVD、RTC闹钟、USB唤醒、以太网唤醒、RTC侵入和时间戳、RTC唤醒)。通过配置SYSCFG_EXTISSx寄存器,所有的GPIO管脚都可以被选作EXTI的触发源。
2 中断初始化代码
//开启时钟
rcu_periph_clock_enable(RCU_SYSCFG);
rcu_periph_clock_enable(RCU_GPIOA);
//初始化GPIO口
gpio_mode_set(GPIOA,GPIO_MODE_INPUT,GPIO_PUPD_NONE,GPIO_PIN_8);
/* enable and set EXTI interrupt to the lowest priority */
nvic_irq_enable(EXTI5_9_IRQn,2U,0U);
/* connect EXTI line to GPIO pin */
syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN8);
/* configure key EXTI line */
exti_init(EXTI_8, EXTI_INTERRUPT, EXTI_TRIG_RISING);
exti_interrupt_flag_clear(EXTI_8);
3 中断服务函数
/*!
\brief this function handles external lines 5 to 9 interrupt request
\param[in] none
\param[out] none
\retval none
*/
void EXTI5_9_IRQHandler(void)
{
if(RESET != exti_interrupt_flag_get(EXTI_8))
{
EXTI8_Flag++;
if(EXTI8_Flag==1)
printf("中断进入成功\n");
}
exti_interrupt_flag_clear(EXTI_8);//每次进入中断都要清除中断标志
}