按照目前的理解,内部有三组中断源可以选择,每组中断源可以匹配一个或者几个GPIO口,在这里仅做了一个中断源,下降沿触发。
#define INT_PIN GPIO_PB3
void int_pin_init(void)
{
for(u8 index = 0; index < IRQ_MAX ; index++)
{
gpio_set_func(INT_PIN, AS_GPIO);//设置引脚为GPIO模式,设置的时候会清除复用功能
gpio_set_input_en(INT_PIN, 1);//GPIO设为输入
gpio_set_output_en(INT_PIN, 0); //不使能输入
gpio_setup_up_down_resistor(INT_PIN, PM_PIN_PULLUP_10K);//设置为上拉
gpio_set_data_strength(INT_PIN, 1);//设置为强驱动
gpio_set_interrupt_pol(INT_PIN, POL_FALLING);//下升沿触发中断
reg_irq_src = FLD_IRQ_GPIO_EN; //清中断标志
reg_irq_mask |= FLD_IRQ_GPIO_EN;//使能irq中断
gpio_en_interrupt(INT_PIN, 1);//使能该引脚的中断
}
irq_enable(); //使能总中断
}
并在中断回调函数中进行中断源的判断,清除中断,和中断任务的执行
_attribute_ram_code_ void irq_handler(void)
{
irq_blt_sdk_handler();
if(reg_irq_src & FLD_IRQ_GPIO_EN)
{
static int aaaaa = 0;
aaaaa++;
printf("%d\n",aaaaa);
reg_irq_src = FLD_IRQ_GPIO_EN;
}
}