| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- #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();
- }
- }
- }
|