#include "gpio_input_interrupt.h"

AT(.com_rodata.isr)
const char str_0[] = "gpio_input_interrupt_PB5!\r\n";

AT(.com_rodata.isr)
const char str_1[] = "gpio_input_interrupt_PF5!\r\n";

AT(.com_text.isr)
void gpio_port_isr(void)
{
    if(gpio_get_flag(gpiob5) != RESET)
    {
        gpio_clear_flag(gpiob5);
        printk(str_0);
    }
    if(gpio_get_flag(gpio_external_interrupt) != RESET)
    {
        gpio_clear_flag(gpio_external_interrupt);
        printk(str_1);
    }
}

void gpio_interrupt_init(void)
{
    gpio_init_typedef gpio_init_structure;

    gpio_init_structure.gpio_pin = GPIO_PIN_5;
    gpio_init_structure.gpio_dir = GPIO_DIR_INPUT;
    gpio_init_structure.gpio_fen = GPIO_FEN_GPIO;
    gpio_init_structure.gpio_mode = GPIO_MODE_DIGITAL;
    gpio_init_structure.gpio_pupd = GPIO_PUPD_UP;
    gpio_init(GPIOB_REG, &gpio_init_structure);

    gpio_interrupt_typedef gpio_interrupt_structure;
    gpio_interrupt_structure.gpio_exti_line = gpiob5;
    gpio_interrupt_structure.extitrigger = exti_trigger_falling;
    gpio_interrupt_structure.gpio_other_exti_line = null;
    gpio_pic_config(&gpio_interrupt_structure,gpio_port_isr, 0, ENABLE);
}

void gpio1_interrupt_init(void)
{
    gpio_init_typedef gpio_init_structure;

    gpio_init_structure.gpio_pin = GPIO_PIN_5;
    gpio_init_structure.gpio_dir = GPIO_DIR_INPUT;
    gpio_init_structure.gpio_fen = GPIO_FEN_GPIO;
    gpio_init_structure.gpio_mode = GPIO_MODE_DIGITAL;
    gpio_init_structure.gpio_pupd = GPIO_PUPD_UP;
    gpio_init(GPIOF_REG, &gpio_init_structure);

    gpio_interrupt_typedef gpio_interrupt_structure;
    gpio_interrupt_structure.gpio_exti_line = gpio_external_interrupt;
    gpio_interrupt_structure.extitrigger = exti_trigger_falling;
    gpio_interrupt_structure.gpio_other_exti_line = gpiof5;
    gpio_pic_config(&gpio_interrupt_structure,gpio_port_isr, 0, ENABLE);
}
