bsp_exti.h
#ifndef __BSP_EXTI_H
#define __BSP_EXTI_H
#include "gd32e10x.h"
/*EN脚*/
#define EN_GPIO_PORT GPIOA
#define EN_GPIO_CLK RCU_GPIOA
#define EN_GPIO_PIN GPIO_PIN_11
#define EN_EXTI_PORTSOURCE GPIO_PORT_SOURCE_GPIOA
#define EN_EXTI_PINSOURCE GPIO_PIN_SOURCE_11
#define EN_EXTI_LINE EXTI_11
#define EN_IRQChannel EXTI10_15_IRQn
#endif
bsp_exti.c
#include "bsp_exti.h"
/*!
\brief 配置嵌套向量中断控制器NVIC
\param[in] none
\param[out] none
\retval none
*/
static void NVIC_Configuration(void)
{
nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2 );
nvic_irq_enable(EN_IRQChannel,1,1);
}
/*!
\brief 对EN用到的GPIO进行配置
\param[in] none
\param[out] none
\retval none
*/
void EN_GPIO_Configuration(void)
{
rcu_periph_clock_enable(EN_GPIO_CLK);
gpio_init(EN_GPIO_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, EN_GPIO_PIN);
}
/*!
\brief 对EN用到的EXTI线进行配置,
\param[in] none
\param[out] none
\retval none
*/
void EN_EXTI_Configuration(void)
{
NVIC_Configuration();
gpio_exti_source_select(EN_EXTI_PORTSOURCE,EN_EXTI_PINSOURCE);
exti_init(EN_EXTI_LINE,EXTI_INTERRUPT, EXTI_TRIG_FALLING);
}
main.c
void test_exti(void)
{
LED_RED_GPIO_Config();
EN_GPIO_Configuration();
EN_EXTI_Configuration();
while(1);
}
gd32e10x_it.c
void EXTI10_15_IRQHandler(void)
{
if(exti_flag_get(EN_EXTI_LINE)==SET)
{
LED_RED_TOGGLE;
}
exti_flag_clear(EN_EXTI_LINE);
}