| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- #include "key_io.h"
- #include "gd32e23x_libopt.h"
- #include "board_cfg.h"
- #define KEY_IO_TEST_RCU RCU_GPIOB
- #define KEY_IO_RST_RCU RCU_GPIOC
- #define KEY_IO_DETECTION_RCU RCU_GPIOA
- #if SUPPORT_DOUBLE_FIRE
- #define KEY_IO_DETECTION_2_RCU RCU_GPIOB
- #define KEY_IO_DETECTION_2 GPIOB
- #define KEY_DETECTION_2 GPIO_PIN_3
- uint8_t key_detection_2 = 0;
- extern uint16_t detection_count_2;
- #endif
- #define KEY_IO_RST GPIOC
- #define KEY_IO_TEST GPIOB
- #define KEY_IO_DETECTION GPIOA
- #define KEY_RST GPIO_PIN_14
- #define KEY_TEST GPIO_PIN_2
- #define KEY_DETECTION GPIO_PIN_11
- #define DERECTION_EXIT_RCU EXTI_SOURCE_GPIOA
- #define DERECTION_EXIT_PIN KEY_DETECTION
- #define DERECTION_EXIT_SOURCE EXTI_SOURCE_PIN11
- #define DERECTION_EXIT_EXIT EXTI_11
- #if SUPPORT_DOUBLE_FIRE
- #define DERECTION_EXIT_RCU_2 EXTI_SOURCE_GPIOB
- #define DERECTION_EXIT_PIN_2 KEY_DETECTION_2
- #define DERECTION_EXIT_SOURCE_2 EXTI_SOURCE_PIN3
- #define DERECTION_EXIT_EXIT_2 EXTI_3
- #endif
- extern uint16_t detection_count;
- uint8_t key_detection = 0;
- static void ConfigDetection(void);
- void key_io_init(void * value)
- {
- (void)(value);
- rcu_periph_clock_enable(KEY_IO_TEST_RCU);
- rcu_periph_clock_enable(KEY_IO_RST_RCU);
-
- gpio_mode_set(KEY_IO_RST, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_RST);
- gpio_mode_set(KEY_IO_TEST, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST);
-
-
- ConfigDetection();
- }
- static void ConfigDetection(void)
- {
- rcu_periph_clock_enable(RCU_CFGCMP);
- rcu_periph_clock_enable(KEY_IO_DETECTION_RCU);
- gpio_mode_set(KEY_IO_DETECTION, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_DETECTION);
- nvic_irq_enable(EXTI4_15_IRQn,3);
- syscfg_exti_line_config(DERECTION_EXIT_RCU,DERECTION_EXIT_SOURCE);
- exti_init(DERECTION_EXIT_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
- exti_interrupt_flag_clear(DERECTION_EXIT_EXIT);
-
- #if SUPPORT_DOUBLE_FIRE
- rcu_periph_clock_enable(KEY_IO_DETECTION_2_RCU);
- gpio_mode_set(KEY_IO_DETECTION_2, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_DETECTION_2);
- nvic_irq_enable(EXTI2_3_IRQn,3);
- syscfg_exti_line_config(DERECTION_EXIT_RCU_2,DERECTION_EXIT_SOURCE_2);
- exti_init(DERECTION_EXIT_EXIT_2,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
- exti_interrupt_flag_clear(DERECTION_EXIT_EXIT_2);
- #endif
- }
- void EXTI4_15_IRQHandler(void){
-
- if(RESET != exti_interrupt_flag_get(DERECTION_EXIT_EXIT))
- {
- key_detection = 1;
- detection_count = 0;
- exti_interrupt_flag_clear(DERECTION_EXIT_EXIT);
- }
- }
- #if SUPPORT_DOUBLE_FIRE
- void EXTI2_3_IRQHandler(void){
- if(RESET != exti_interrupt_flag_get(DERECTION_EXIT_EXIT_2))
- {
- key_detection_2 = 1;
- detection_count_2 = 0;
- exti_interrupt_flag_clear(DERECTION_EXIT_EXIT_2);
- }
- }
- #endif
- bool get_rst()
- {
- FlagStatus status = SET;
- bool ret = false;
- uint32_t count = 100;
- if((status = gpio_input_bit_get(KEY_IO_RST,KEY_RST)) == RESET)
- {
- while(count--);
- if((status = gpio_input_bit_get(KEY_IO_RST,KEY_RST)) == RESET)
- {
- ret = true;
- }
- }
- return ret;
- }
- bool get_test()
- {
- FlagStatus status = SET;
- bool ret = false;
- uint32_t count = 100;
- if((status = gpio_input_bit_get(KEY_IO_TEST,KEY_TEST)) == RESET)
- {
- while(count--);
- if((status = gpio_input_bit_get(KEY_IO_TEST,KEY_TEST)) == RESET)
- {
- ret = true;
- }
- }
- return ret;
- }
- uint8_t get_detection()
- {
- // FlagStatus status = SET;
- // bool ret = false;
- // if((status = gpio_input_bit_get(KEY_IO_IO,KEY_DETECTION)) == RESET)
- // ret = true;
- uint8_t value = 0;
- #if SUPPORT_DOUBLE_FIRE
- value |= (key_detection_2 ? (1<<1):(0<<1));
- #endif
- value |= (key_detection ? (1<<0):(0<<0));
- return value;
- }
|