#include "Exti.h" #include "gd32f30x_libopt.h" #include "main.h" #define INPUT_PIN_1 GPIO_PIN_0 #define INPUT_PIN_2 GPIO_PIN_1 #define SWTICH_PIN GPIO_PIN_8 #define KEY_BEEP_PIN GPIO_PIN_5 //#define EXIT_INPUT_PIN_1 EXTI_SOURCE_PIN0 //#define EXIT_INPUT_PIN_2 EXTI_SOURCE_PIN1 //#define SWITCH_INPUT_PIN EXTI_SOURCE_PIN8 //#define EXIT_KEY_BEEP_PIN GPIO_PIN_5 #define INPUT_EXIT_1 EXTI_0 #define INPUT_EXIT_2 EXTI_1 #define SWITCH_EXTI EXTI_8 #define KEY_BEEP_EXTI EXTI_5 static void read_switch_level(); static uint8_t get_exti_input2(void); static uint8_t get_exti_input1(void); void sts_exti_init(void) { rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_GPIOC); rcu_periph_clock_enable(RCU_AF); gpio_init(GPIOB,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,INPUT_PIN_1 | INPUT_PIN_2); gpio_init(GPIOC,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,SWTICH_PIN); gpio_init(GPIOC,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,KEY_BEEP_PIN); //nvic_irq_enable(EXTI0_IRQn,0,0); //nvic_irq_enable(EXTI1_IRQn,0,0); nvic_irq_enable(EXTI5_9_IRQn,0,2); //gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_0); //gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_1); gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOC, GPIO_PIN_SOURCE_8); gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOC, GPIO_PIN_SOURCE_5); //exti_init(INPUT_EXIT_1,EXTI_INTERRUPT,EXTI_TRIG_BOTH); //exti_init(INPUT_EXIT_2,EXTI_INTERRUPT,EXTI_TRIG_BOTH); exti_init(SWITCH_EXTI,EXTI_INTERRUPT,EXTI_TRIG_BOTH); exti_init(KEY_BEEP_EXTI,EXTI_INTERRUPT,EXTI_TRIG_FALLING); //exti_interrupt_flag_clear(INPUT_EXIT_1); //exti_interrupt_flag_clear(INPUT_EXIT_2); exti_interrupt_flag_clear(SWITCH_EXTI); exti_interrupt_flag_clear(KEY_BEEP_EXTI); sts_data_t * data = get_sts(); data->read_switch_level = read_switch_level; data->get_input1_level = get_exti_input1; data->get_input2_level = get_exti_input2; data->exit_init_flag = 1; } uint8_t get_exti_switch(void) { if(gpio_input_bit_get(GPIOC,SWTICH_PIN)) { return 0; }else return 1; } static uint8_t get_exti_input1(void) { if(gpio_input_bit_get(GPIOB,INPUT_PIN_1)) { return 0; }else return 1; } static uint8_t get_exti_input2(void) { if(gpio_input_bit_get(GPIOB,INPUT_PIN_2)) { return 0; }else return 1; } static void read_switch_level() { sts_data_t * data = get_sts(); data->switch_status = get_exti_switch(); } int up_count = 0; //int down_count = 0; void EXTI0_IRQHandler(void) { #if 0 sts_data_t * data = get_sts(); if(RESET != exti_interrupt_flag_get(INPUT_EXIT_1)) { exti_interrupt_flag_clear(INPUT_EXIT_1); if(gpio_input_bit_get(GPIOB,INPUT_PIN_1) == SET) //rising { data->input_1_up_flag = 1; }else if(gpio_input_bit_get(GPIOB,INPUT_PIN_1)== RESET) //falling { data->input_1_down_flag = 1; data->m_data.input_status.input_status[INPUT_CHANNEL_1] = 1; } } #endif } void EXTI1_IRQHandler(void) { #if 0 sts_data_t * data = get_sts(); if(RESET != exti_interrupt_flag_get(INPUT_EXIT_2)) { exti_interrupt_flag_clear(INPUT_EXIT_2); if(gpio_input_bit_get(GPIOB,INPUT_PIN_2)== SET) //rising { data->input_2_up_flag = 1; }else if(gpio_input_bit_get(GPIOB,INPUT_PIN_2) == RESET) //falling { data->input_2_down_flag = 1; data->m_data.input_status.input_status[INPUT_CHANNEL_2] = 1; } } #endif } uint8_t value = 0; uint8_t chiose_1_flag = 0; uint8_t chiose_2_flag = 0; extern void beep_timer_start(int cou2,uint32_t inval); void EXTI5_9_IRQHandler(void) { sts_data_t * data = get_sts(); if(RESET != exti_interrupt_flag_get(SWITCH_EXTI)) { exti_interrupt_flag_clear(SWITCH_EXTI); for(int i = 0;i < 10;i++); value = get_exti_switch(); if(value == RESET) //rising { if(data->m_data.m_r.r_data.input_status.input_status[INPUT_CHANNEL_1]) { if(data->m_data.m_rw.rw_data.chiose_ch != INPUT_CHANNEL_1){ data->chiose_flag = 1; data->chiose_count_max = 500; data->chiose_counter = 0; beep_timer_start(3,500); //data->choise_input(INPUT_CHANNEL_1); } } }else //falling { if(data->m_data.m_r.r_data.input_status.input_status[INPUT_CHANNEL_2]) { if(data->m_data.m_rw.rw_data.chiose_ch != INPUT_CHANNEL_2){ data->chiose_flag = 2; data->chiose_count_max = 500; data->chiose_counter = 0; beep_timer_start(3,500); //data->choise_input(INPUT_CHANNEL_2); } } } } if(RESET != exti_interrupt_flag_get(KEY_BEEP_EXTI)) { exti_interrupt_flag_clear(KEY_BEEP_EXTI); for(int i = 0;i < 10;i++); if(gpio_input_bit_get(GPIOC,KEY_BEEP_PIN) == RESET) { data->beep_flag = 0; data->i_beep_flag[0].beep_waning = 0; data->i_beep_flag[1].beep_waning = 0; data->o_beep_flag.beep_waning = 0; beep_timer_stop(); data->clear_beep(); } } }