Exti.c 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. #include "Exti.h"
  2. #include "gd32f30x_libopt.h"
  3. #include "main.h"
  4. #define INPUT_PIN_1 GPIO_PIN_0
  5. #define INPUT_PIN_2 GPIO_PIN_1
  6. #define SWTICH_PIN GPIO_PIN_8
  7. #define KEY_BEEP_PIN GPIO_PIN_5
  8. //#define EXIT_INPUT_PIN_1 EXTI_SOURCE_PIN0
  9. //#define EXIT_INPUT_PIN_2 EXTI_SOURCE_PIN1
  10. //#define SWITCH_INPUT_PIN EXTI_SOURCE_PIN8
  11. //#define EXIT_KEY_BEEP_PIN GPIO_PIN_5
  12. #define INPUT_EXIT_1 EXTI_0
  13. #define INPUT_EXIT_2 EXTI_1
  14. #define SWITCH_EXTI EXTI_8
  15. #define KEY_BEEP_EXTI EXTI_5
  16. static void read_switch_level();
  17. static uint8_t get_exti_input2(void);
  18. static uint8_t get_exti_input1(void);
  19. void sts_exti_init(void)
  20. {
  21. rcu_periph_clock_enable(RCU_GPIOB);
  22. rcu_periph_clock_enable(RCU_GPIOC);
  23. rcu_periph_clock_enable(RCU_AF);
  24. gpio_init(GPIOB,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,INPUT_PIN_1 | INPUT_PIN_2);
  25. gpio_init(GPIOC,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,SWTICH_PIN);
  26. gpio_init(GPIOC,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,KEY_BEEP_PIN);
  27. //nvic_irq_enable(EXTI0_IRQn,0,0);
  28. //nvic_irq_enable(EXTI1_IRQn,0,0);
  29. nvic_irq_enable(EXTI5_9_IRQn,0,2);
  30. //gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_0);
  31. //gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_1);
  32. gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOC, GPIO_PIN_SOURCE_8);
  33. gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOC, GPIO_PIN_SOURCE_5);
  34. //exti_init(INPUT_EXIT_1,EXTI_INTERRUPT,EXTI_TRIG_BOTH);
  35. //exti_init(INPUT_EXIT_2,EXTI_INTERRUPT,EXTI_TRIG_BOTH);
  36. exti_init(SWITCH_EXTI,EXTI_INTERRUPT,EXTI_TRIG_BOTH);
  37. exti_init(KEY_BEEP_EXTI,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
  38. //exti_interrupt_flag_clear(INPUT_EXIT_1);
  39. //exti_interrupt_flag_clear(INPUT_EXIT_2);
  40. exti_interrupt_flag_clear(SWITCH_EXTI);
  41. exti_interrupt_flag_clear(KEY_BEEP_EXTI);
  42. sts_data_t * data = get_sts();
  43. data->read_switch_level = read_switch_level;
  44. data->get_input1_level = get_exti_input1;
  45. data->get_input2_level = get_exti_input2;
  46. data->exit_init_flag = 1;
  47. }
  48. uint8_t get_exti_switch(void)
  49. {
  50. if(gpio_input_bit_get(GPIOC,SWTICH_PIN))
  51. {
  52. return 0;
  53. }else
  54. return 1;
  55. }
  56. static uint8_t get_exti_input1(void)
  57. {
  58. if(gpio_input_bit_get(GPIOB,INPUT_PIN_1))
  59. {
  60. return 0;
  61. }else
  62. return 1;
  63. }
  64. static uint8_t get_exti_input2(void)
  65. {
  66. if(gpio_input_bit_get(GPIOB,INPUT_PIN_2))
  67. {
  68. return 0;
  69. }else
  70. return 1;
  71. }
  72. static void read_switch_level()
  73. {
  74. sts_data_t * data = get_sts();
  75. data->switch_status = get_exti_switch();
  76. }
  77. int up_count = 0;
  78. //int down_count = 0;
  79. void EXTI0_IRQHandler(void)
  80. {
  81. #if 0
  82. sts_data_t * data = get_sts();
  83. if(RESET != exti_interrupt_flag_get(INPUT_EXIT_1))
  84. {
  85. exti_interrupt_flag_clear(INPUT_EXIT_1);
  86. if(gpio_input_bit_get(GPIOB,INPUT_PIN_1) == SET) //rising
  87. {
  88. data->input_1_up_flag = 1;
  89. }else if(gpio_input_bit_get(GPIOB,INPUT_PIN_1)== RESET) //falling
  90. {
  91. data->input_1_down_flag = 1;
  92. data->m_data.input_status.input_status[INPUT_CHANNEL_1] = 1;
  93. }
  94. }
  95. #endif
  96. }
  97. void EXTI1_IRQHandler(void)
  98. {
  99. #if 0
  100. sts_data_t * data = get_sts();
  101. if(RESET != exti_interrupt_flag_get(INPUT_EXIT_2))
  102. {
  103. exti_interrupt_flag_clear(INPUT_EXIT_2);
  104. if(gpio_input_bit_get(GPIOB,INPUT_PIN_2)== SET) //rising
  105. {
  106. data->input_2_up_flag = 1;
  107. }else if(gpio_input_bit_get(GPIOB,INPUT_PIN_2) == RESET) //falling
  108. {
  109. data->input_2_down_flag = 1;
  110. data->m_data.input_status.input_status[INPUT_CHANNEL_2] = 1;
  111. }
  112. }
  113. #endif
  114. }
  115. uint8_t value = 0;
  116. uint8_t chiose_1_flag = 0;
  117. uint8_t chiose_2_flag = 0;
  118. extern void beep_timer_start(int cou2,uint32_t inval);
  119. void EXTI5_9_IRQHandler(void)
  120. {
  121. sts_data_t * data = get_sts();
  122. if(RESET != exti_interrupt_flag_get(SWITCH_EXTI))
  123. {
  124. exti_interrupt_flag_clear(SWITCH_EXTI);
  125. for(int i = 0;i < 10;i++);
  126. value = get_exti_switch();
  127. if(value == RESET) //rising
  128. {
  129. if(data->m_data.m_r.r_data.input_status.input_status[INPUT_CHANNEL_1])
  130. {
  131. if(data->m_data.m_rw.rw_data.chiose_ch != INPUT_CHANNEL_1){
  132. data->chiose_flag = 1;
  133. data->chiose_count_max = 500;
  134. data->chiose_counter = 0;
  135. beep_timer_start(3,500);
  136. //data->choise_input(INPUT_CHANNEL_1);
  137. }
  138. }
  139. }else //falling
  140. {
  141. if(data->m_data.m_r.r_data.input_status.input_status[INPUT_CHANNEL_2])
  142. {
  143. if(data->m_data.m_rw.rw_data.chiose_ch != INPUT_CHANNEL_2){
  144. data->chiose_flag = 2;
  145. data->chiose_count_max = 500;
  146. data->chiose_counter = 0;
  147. beep_timer_start(3,500);
  148. //data->choise_input(INPUT_CHANNEL_2);
  149. }
  150. }
  151. }
  152. }
  153. if(RESET != exti_interrupt_flag_get(KEY_BEEP_EXTI))
  154. {
  155. exti_interrupt_flag_clear(KEY_BEEP_EXTI);
  156. for(int i = 0;i < 10;i++);
  157. if(gpio_input_bit_get(GPIOC,KEY_BEEP_PIN) == RESET)
  158. {
  159. data->beep_flag = 0;
  160. data->i_beep_flag[0].beep_waning = 0;
  161. data->i_beep_flag[1].beep_waning = 0;
  162. data->o_beep_flag.beep_waning = 0;
  163. beep_timer_stop();
  164. data->clear_beep();
  165. }
  166. }
  167. }