| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- #include "Exti.h"
- #include "gd32e230x_conf.h"
- #include "main.h"
- #define INPUT_PIN_1 GPIO_PIN_0
- #define INPUT_PIN_2 GPIO_PIN_1
- #define SWTICH_PIN GPIO_PIN_9
- #define EXIT_INPUT_PIN_1 EXTI_SOURCE_PIN0
- #define EXIT_INPUT_PIN_2 EXTI_SOURCE_PIN1
- #define SWITCH_INPUT_PIN EXTI_SOURCE_PIN9
- #define INPUT_EXIT_1 EXTI_0
- #define INPUT_EXIT_2 EXTI_1
- #define SWITCH_EXTI EXTI_9
- static void read_input_level(uint8_t channel);
- static void read_switch_level();
- void sts_exti_init(void)
- {
- rcu_periph_clock_enable(RCU_GPIOA);
- rcu_periph_clock_enable(RCU_GPIOB);
- rcu_periph_clock_enable(RCU_CFGCMP);
- //rcu_periph_clock_enable(RCU_AF);
-
- gpio_mode_set(GPIOA,GPIO_MODE_INPUT,GPIO_PUPD_NONE,INPUT_PIN_1);
- gpio_mode_set(GPIOA,GPIO_MODE_INPUT,GPIO_PUPD_NONE,INPUT_PIN_2);
- gpio_mode_set(GPIOB,GPIO_MODE_INPUT,GPIO_PUPD_NONE,SWTICH_PIN);
- // nvic_irq_enable(EXTI0_1_IRQn,0);
- nvic_irq_enable(EXTI4_15_IRQn,0);
- // syscfg_exti_line_config(EXTI_SOURCE_GPIOA,EXIT_INPUT_PIN_1);
- // syscfg_exti_line_config(EXTI_SOURCE_GPIOA,EXIT_INPUT_PIN_2);
- syscfg_exti_line_config(EXTI_SOURCE_GPIOB,SWITCH_INPUT_PIN);
- //
- // 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_interrupt_flag_clear(INPUT_EXIT_1);
- // exti_interrupt_flag_clear(INPUT_EXIT_2);
- exti_interrupt_flag_clear(SWITCH_EXTI);
-
- sts_data_t * data = get_sts();
-
- data->read_input_level = read_input_level;
- data->read_switch_level = read_switch_level;
-
- }
- uint8_t get_exti_in_1(void)
- {
- if(gpio_input_bit_get(GPIOA,INPUT_PIN_1))
- {
- return 1;
- }else
- return 0;
-
- }
- uint8_t get_exti_in_2(void)
- {
- if(gpio_input_bit_get(GPIOA,INPUT_PIN_2))
- {
- return 1;
- }else
- return 0;
- }
- static void read_input_level(uint8_t channel)
- {
- sts_data_t * data = get_sts();
- switch(channel)
- {
- case INPUT_CHANNEL_1:
- {
- data->m_data.input_status.input_status[INPUT_CHANNEL_1] = get_exti_in_1();
- }
- break;
- case INPUT_CHANNEL_2:
- {
- data->m_data.input_status.input_status[INPUT_CHANNEL_2] = get_exti_in_2();
- }
- break;
- default:
- break;
- }
- }
- uint8_t get_exti_switch(void)
- {
- if(gpio_input_bit_get(GPIOB,SWTICH_PIN))
- {
- return 1;
- }else
- return 0;
- }
- static void read_switch_level()
- {
- sts_data_t * data = get_sts();
- data->switch_status = get_exti_switch();
- }
- void EXTI0_1_IRQHandler(void)
- {
- sts_data_t * data = get_sts();
- if(RESET != exti_interrupt_flag_get(INPUT_EXIT_1))
- {
- exti_interrupt_flag_clear(INPUT_EXIT_1);
- if(get_exti_in_1() == SET) //rising
- {
- data->m_data.input_status.input_status[INPUT_CHANNEL_1] = 0;
- if(data->m_data.input_status.input_status[INPUT_CHANNEL_2])
- {
- data->choise_input(INPUT_CHANNEL_2);
- }
-
- }else //falling
- {
- data->m_data.input_status.input_status[INPUT_CHANNEL_1] = 1;
- }
-
- }
- if(RESET != exti_interrupt_flag_get(INPUT_EXIT_2))
- {
- if(get_exti_in_2() == SET) //rising
- {
- data->m_data.input_status.input_status[INPUT_CHANNEL_2] = 0;
- if(data->m_data.input_status.input_status[INPUT_CHANNEL_1])
- {
- data->choise_input(INPUT_CHANNEL_1);
- }
- }else //falling
- {
- data->m_data.input_status.input_status[INPUT_CHANNEL_2] = 1;
- }
- exti_interrupt_flag_clear(INPUT_EXIT_2);
- }
- }
- void EXTI4_15_IRQHandler(void)
- {
- sts_data_t * data = get_sts();
- if(RESET != exti_interrupt_flag_get(SWITCH_EXTI))
- {
- if(get_exti_switch() == SET) //rising
- {
- if(data->m_data.input_status.input_status[INPUT_CHANNEL_1])
- {
- if(data->m_data.md_choise.choise_ch != INPUT_CHANNEL_1)
- data->choise_input(INPUT_CHANNEL_1);
- }
- }else //falling
- {
- if(data->m_data.input_status.input_status[INPUT_CHANNEL_2])
- {
- if(data->m_data.md_choise.choise_ch != INPUT_CHANNEL_2)
- data->choise_input(INPUT_CHANNEL_2);
- }
- }
- exti_interrupt_flag_clear(SWITCH_EXTI);
- }
- }
|