breaker.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "breaker.h"
  2. #include "gd32e230.h"
  3. #include "SysTick.h"
  4. #include "gd32e230_gpio.h"
  5. static breaker_channels_t b_chn;
  6. #define KEY_RCU RCU_GPIOB
  7. #define KEY_IO GPIOB
  8. #define KEY1 GPIO_PIN_14
  9. #define KEY2 GPIO_PIN_13
  10. #define KEY3 GPIO_PIN_12
  11. void breaker_init(void)
  12. {
  13. rcu_periph_clock_enable(RCU_GPIOA);
  14. gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_0);
  15. gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_1);
  16. gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_2);
  17. gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_3);
  18. gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_4);
  19. gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_5);
  20. // breaker id IO
  21. rcu_periph_clock_enable(KEY_RCU);
  22. gpio_mode_set(KEY_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY1);
  23. gpio_mode_set(KEY_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY2);
  24. gpio_mode_set(KEY_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY3);
  25. }
  26. U8 breaker_read_id(void)
  27. {
  28. U8 ret = 0;
  29. if(gpio_input_bit_get(KEY_IO,KEY1))
  30. ret |= 1 << 2;
  31. if(gpio_input_bit_get(KEY_IO,KEY2))
  32. ret |= 1 << 1;
  33. if(gpio_input_bit_get(KEY_IO,KEY3))
  34. ret |= 1 << 0;
  35. ret = (~ret) &0x07;
  36. return ret;
  37. }
  38. S8 breaker_chn_read(U16* statue,U8 chanel)
  39. {
  40. S8 ret = 0xFF;
  41. if(statue){
  42. switch(chanel)
  43. {
  44. case BREAKER_CHANNAL_1:
  45. *statue = gpio_input_bit_get(GPIOA,GPIO_PIN_0);
  46. ret = 0;
  47. break;
  48. case BREAKER_CHANNAL_2:
  49. *statue = gpio_input_bit_get(GPIOA,GPIO_PIN_1);
  50. ret = 0;
  51. break;
  52. case BREAKER_CHANNAL_3:
  53. *statue = gpio_input_bit_get(GPIOA,GPIO_PIN_2);
  54. ret = 0;
  55. break;
  56. case BREAKER_CHANNAL_4:
  57. *statue = gpio_input_bit_get(GPIOA,GPIO_PIN_3);
  58. ret = 0;
  59. break;
  60. case BREAKER_CHANNAL_5:
  61. *statue = gpio_input_bit_get(GPIOA,GPIO_PIN_4);
  62. ret = 0;
  63. break;
  64. case BREAKER_CHANNAL_6:
  65. *statue = gpio_input_bit_get(GPIOA,GPIO_PIN_5);
  66. ret = 0;
  67. break;
  68. default:
  69. break;
  70. }
  71. }
  72. return ret;
  73. }
  74. U16 get_channel_val(U8 channel)
  75. {
  76. U16 ret = 0;
  77. switch(channel)
  78. {
  79. case BREAKER_CHANNAL_1:
  80. case BREAKER_CHANNAL_2:
  81. case BREAKER_CHANNAL_3:
  82. case BREAKER_CHANNAL_4:
  83. case BREAKER_CHANNAL_5:
  84. case BREAKER_CHANNAL_6:
  85. ret = b_chn.channel[channel];
  86. break;
  87. }
  88. return ret;
  89. }
  90. breaker_channels_t *get_breakers(void)
  91. {
  92. return &b_chn;
  93. }