/*! \brief this function handles LVD exception \param[in] none \param[out] none \retval none */ void LVD_IRQHandler(void) { if(RESET != exti_interrupt_flag_get(EXTI_16)) { gd_eval_ledtoggle(LED1); exti_interrupt_flag_clear(EXTI_16); } }
/*! \brief this function handles external lines 10 to 15 interrupt request \param[in] none \param[out] none \retval none */ void EXTI10_15_IRQHandler(void) { if(RESET != exti_interrupt_flag_get(EXTI_13)){ gd_eval_led_toggle(LED2); } exti_interrupt_flag_clear(EXTI_13); }
void GD32_GPIO_EXTI_IRQHandler(rt_int8_t exti_line) { if(RESET != exti_interrupt_flag_get((exti_line_enum)(1 << exti_line))) { pin_irq_hdr(exti_line); exti_interrupt_flag_clear((exti_line_enum)(1 << exti_line)); } }
/*! \brief this function handles EXTI4_15 interrupt request \param[in] none \param[out] none \retval none */ void EXTI4_15_IRQHandler(void) { /* make sure whether the EXTI Line is interrupted */ if(RESET != exti_interrupt_flag_get(EXTI_13)){ /* reload FWDGT counter */ fwdgt_counter_reload(); } /* clear the interrupt flag bit */ exti_interrupt_flag_clear(EXTI_13); }
rt_err_t gd32_pin_irq_enable(struct rt_device *device, rt_base_t pin, rt_uint32_t enabled) { const struct pin_index *index; const struct pin_irq_map *irqmap; rt_base_t level; rt_int32_t hdr_index = -1; exti_trig_type_enum trigger_mode; index = get_pin(pin); if (index == RT_NULL) { return RT_EINVAL; } if (enabled == PIN_IRQ_ENABLE) { hdr_index = bit2bitno(index->pin); if (hdr_index < 0 || hdr_index >= ITEM_NUM(pin_irq_map)) { return RT_EINVAL; } level = rt_hw_interrupt_disable(); if (pin_irq_hdr_tab[hdr_index].pin == -1) { rt_hw_interrupt_enable(level); return RT_EINVAL; } irqmap = &pin_irq_map[hdr_index]; switch (pin_irq_hdr_tab[hdr_index].mode) { case PIN_IRQ_MODE_RISING: trigger_mode = EXTI_TRIG_RISING; break; case PIN_IRQ_MODE_FALLING: trigger_mode = EXTI_TRIG_FALLING; break; case PIN_IRQ_MODE_RISING_FALLING: trigger_mode = EXTI_TRIG_BOTH; break; default: rt_hw_interrupt_enable(level); return RT_EINVAL; } //rcu_periph_clock_enable(RCU_AF); /* enable and set interrupt priority */ nvic_irq_enable(irqmap->irqno, 5U); /* connect EXTI line to GPIO pin */ syscfg_exti_line_config(index->port_src, index->pin_src); /* configure EXTI line */ exti_init((exti_line_enum)(index->pin), EXTI_INTERRUPT, trigger_mode); exti_interrupt_flag_clear((exti_line_enum)(index->pin)); rt_hw_interrupt_enable(level); } else if (enabled == PIN_IRQ_DISABLE) { irqmap = get_pin_irq_map(index->pin); if (irqmap == RT_NULL) { return RT_EINVAL; } nvic_irq_disable(irqmap->irqno); } else { return RT_EINVAL; } return RT_EOK; }
/*! \brief this function handles EXTI4_15 exception \param[in] none \param[out] none \retval none */ void EXTI4_15_IRQHandler(void) { if(SET == exti_interrupt_flag_get(EXTI_13)) exti_interrupt_flag_clear(EXTI_13); }