key_io.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include "key_io.h"
  2. #include "gd32e23x_libopt.h"
  3. #define KEY_IO_TEST_RCU RCU_GPIOB
  4. #define KEY_IO_RST_RCU RCU_GPIOC
  5. #define KEY_IO_DETECTION_RCU RCU_GPIOA
  6. #define KEY_IO_RST GPIOC
  7. #define KEY_IO_TEST GPIOB
  8. #define KEY_IO_DETECTION GPIOA
  9. #define KEY_RST GPIO_PIN_14
  10. #define KEY_TEST GPIO_PIN_2
  11. #define KEY_DETECTION GPIO_PIN_11
  12. #define DERECTION_EXIT_RCU EXTI_SOURCE_GPIOA
  13. #define DERECTION_EXIT_PIN KEY_DETECTION
  14. #define DERECTION_EXIT_SOURCE EXTI_SOURCE_PIN11
  15. #define DERECTION_EXIT_EXIT EXTI_11
  16. extern uint16_t detection_count;
  17. uint8_t key_detection = 0;
  18. static void ConfigDetection(void);
  19. void key_io_init(void * value)
  20. {
  21. (void)(value);
  22. rcu_periph_clock_enable(KEY_IO_TEST_RCU);
  23. rcu_periph_clock_enable(KEY_IO_RST_RCU);
  24. gpio_mode_set(KEY_IO_RST, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_RST);
  25. gpio_mode_set(KEY_IO_TEST, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST);
  26. //ConfigDetection();
  27. }
  28. static void ConfigDetection(void)
  29. {
  30. rcu_periph_clock_enable(RCU_CFGCMP);
  31. rcu_periph_clock_enable(KEY_IO_DETECTION_RCU);
  32. gpio_mode_set(KEY_IO_DETECTION, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_DETECTION);
  33. nvic_irq_enable(EXTI4_15_IRQn,2);
  34. syscfg_exti_line_config(DERECTION_EXIT_RCU,DERECTION_EXIT_SOURCE);
  35. exti_init(DERECTION_EXIT_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
  36. exti_interrupt_flag_clear(DERECTION_EXIT_EXIT);
  37. }
  38. void EXTI4_15_IRQHandler(void){
  39. if(RESET != exti_interrupt_flag_get(DERECTION_EXIT_EXIT))
  40. {
  41. key_detection = 1;
  42. detection_count = 0;
  43. exti_interrupt_flag_clear(DERECTION_EXIT_EXIT);
  44. }
  45. }
  46. bool get_rst()
  47. {
  48. FlagStatus status = SET;
  49. bool ret = false;
  50. uint32_t count = 100;
  51. if((status = gpio_input_bit_get(KEY_IO_RST,KEY_RST)) == RESET)
  52. {
  53. while(count--);
  54. if((status = gpio_input_bit_get(KEY_IO_RST,KEY_RST)) == RESET)
  55. {
  56. ret = true;
  57. }
  58. }
  59. return ret;
  60. }
  61. bool get_test()
  62. {
  63. FlagStatus status = SET;
  64. bool ret = false;
  65. uint32_t count = 100;
  66. if((status = gpio_input_bit_get(KEY_IO_TEST,KEY_TEST)) == RESET)
  67. {
  68. while(count--);
  69. if((status = gpio_input_bit_get(KEY_IO_TEST,KEY_TEST)) == RESET)
  70. {
  71. ret = true;
  72. }
  73. }
  74. return ret;
  75. }
  76. uint8_t get_detection()
  77. {
  78. // FlagStatus status = SET;
  79. // bool ret = false;
  80. // if((status = gpio_input_bit_get(KEY_IO_IO,KEY_DETECTION)) == RESET)
  81. // ret = true;
  82. return key_detection;
  83. }