gpio.c 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. #include "gpio.h"
  2. /* all pins used as gpio(input/output/irq) must be defined here */
  3. void gpio_init(void){
  4. rcu_periph_clock_enable(RCU_GPIOA);
  5. rcu_periph_clock_enable(RCU_GPIOB);
  6. rcu_periph_clock_enable(RCU_GPIOC);
  7. rcu_periph_clock_enable(RCU_GPIOF);
  8. #if (CONFIG_BOARD_TYPE==SHARK_BOARD_SP700)
  9. //hall 2 detect
  10. gpio_mode_input(GPIOC, GPIO_PUPD_NONE, GPIO_PIN_13);
  11. //hall 1 detect
  12. gpio_mode_input(GPIOC, GPIO_PUPD_NONE, GPIO_PIN_15);
  13. //IR uart0 enable
  14. gpio_mode_output(GPIOC, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_14);
  15. //IR uart2 enable
  16. gpio_mode_output(GPIOF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_0);
  17. //cs1180 power enable
  18. gpio_mode_output(GPIOB, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_12);
  19. //detect cs1180 ready
  20. gpio_mode_input(GPIOA, GPIO_PUPD_NONE, GPIO_PIN_0);
  21. //CS1180 cs
  22. gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
  23. cs1180_cs(1);
  24. gpio_mode_analog_input(GPIOA, GPIO_PIN_8);
  25. #elif (CONFIG_BOARD_TYPE==SHARK_BOARD_SP600)
  26. //rs485 INT ,this can be used detect rs485 in/out, then open rs485 power, and then detect GPIOF0
  27. gpio_mode_input(GPIOC, GPIO_PUPD_NONE, GPIO_PIN_13);
  28. //rs485 pwr enable
  29. gpio_mode_output(GPIOC, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_14);
  30. //rs485 in/out detect, only works when rs485 pwr on
  31. gpio_mode_input(GPIOF, GPIO_PUPD_NONE, GPIO_PIN_0);
  32. //cs1180 pwr enable
  33. gpio_mode_output(GPIOC, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_15);
  34. //detect cs1180 ready
  35. gpio_mode_input(GPIOB, GPIO_PUPD_NONE, GPIO_PIN_12);
  36. //CS1180 cs
  37. gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8);
  38. cs1180_cs(1);
  39. //LED 0,1,2
  40. gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_2|GPIO_PIN_3);
  41. gpio_mode_output(GPIOF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_6);
  42. //LED3,4
  43. gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_10|GPIO_PIN_9);
  44. #endif
  45. //temp senser enable
  46. gpio_mode_output(GPIOF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_1);
  47. //charger detect
  48. gpio_mode_input(GPIOB, GPIO_PUPD_NONE, GPIO_PIN_10);
  49. //aux 12v power enable
  50. gpio_mode_output(GPIOB, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_2);
  51. //aux 12v lock detect
  52. gpio_mode_input(GPIOB, GPIO_PUPD_NONE, GPIO_PIN_11);
  53. //DC-DC enable
  54. gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_11);
  55. //DC-DC power good indicat
  56. gpio_mode_input(GPIOF, GPIO_PUPD_NONE, GPIO_PIN_7);
  57. //ms5238 irq
  58. gpio_mode_input(GPIOA, GPIO_PUPD_NONE, GPIO_PIN_12);
  59. //ML5238 cs
  60. gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
  61. #if (CONFIG_BOARD_TYPE==SHARK_BOARD_SP600)
  62. RS485_PWR_ENABLE(1);
  63. #endif
  64. }
  65. void charger_detect_irq_enable(int enable){
  66. if (enable){
  67. syscfg_exti_line_config(EXTI_SOURCE_GPIOB, EXTI_SOURCE_PIN10);
  68. exti_init(EXTI_10, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  69. nvic_irq_enable(EXTI4_15_IRQn, 4U, 0U);
  70. exti_interrupt_flag_clear(EXTI_10);
  71. exti_interrupt_enable(EXTI_10);
  72. }else {
  73. //nvic_irq_disable(EXTI4_15_IRQn);
  74. exti_interrupt_disable(EXTI_10);
  75. exti_interrupt_flag_clear(EXTI_10);
  76. }
  77. }
  78. void ml5238_irq_enable(int enable){
  79. if (enable){
  80. syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN12);
  81. exti_init(EXTI_12, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  82. nvic_irq_enable(EXTI4_15_IRQn, 4U, 0U);
  83. exti_interrupt_flag_clear(EXTI_12);
  84. exti_interrupt_enable(EXTI_12);
  85. }else {
  86. //nvic_irq_disable(EXTI4_15_IRQn);
  87. exti_interrupt_disable(EXTI_12);
  88. exti_interrupt_flag_clear(EXTI_12);
  89. }
  90. }
  91. #if (CONFIG_BOARD_TYPE==SHARK_BOARD_SP700)
  92. void hall_1_detect_irq_enable(int enable){
  93. if (enable){
  94. syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN15);
  95. exti_init(EXTI_15, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  96. nvic_irq_enable(EXTI4_15_IRQn, 4U, 0U);
  97. exti_interrupt_flag_clear(EXTI_15);
  98. exti_interrupt_enable(EXTI_15);
  99. }else {
  100. //nvic_irq_disable(EXTI4_15_IRQn);
  101. exti_interrupt_disable(EXTI_15);
  102. exti_interrupt_flag_clear(EXTI_15);
  103. }
  104. }
  105. #else
  106. void hall_1_detect_irq_enable(int enable){
  107. }
  108. #endif
  109. void hall_2_detect_irq_enable(int enable){
  110. if (enable){
  111. syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN13);
  112. exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  113. nvic_irq_enable(EXTI4_15_IRQn, 4U, 0U);
  114. exti_interrupt_flag_clear(EXTI_13);
  115. exti_interrupt_enable(EXTI_13);
  116. }else {
  117. //nvic_irq_disable(EXTI4_15_IRQn);
  118. exti_interrupt_disable(EXTI_13);
  119. exti_interrupt_flag_clear(EXTI_13);
  120. }
  121. }
  122. void small_current_short_irq_enable(int enable){
  123. if (enable){
  124. syscfg_exti_line_config(EXTI_SOURCE_GPIOB, EXTI_SOURCE_PIN11);
  125. exti_init(EXTI_11, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  126. nvic_irq_enable(EXTI4_15_IRQn, 4U, 0U);
  127. exti_interrupt_flag_clear(EXTI_11);
  128. exti_interrupt_enable(EXTI_11);
  129. }else {
  130. //nvic_irq_disable(EXTI4_15_IRQn);
  131. exti_interrupt_disable(EXTI_11);
  132. exti_interrupt_flag_clear(EXTI_11);
  133. }
  134. }
  135. void dcdc_pwr_detect_irq_enable(int enable){
  136. if (enable){
  137. syscfg_exti_line_config(EXTI_SOURCE_GPIOF, EXTI_SOURCE_PIN7);
  138. exti_init(EXTI_7, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  139. nvic_irq_enable(EXTI4_15_IRQn, 4U, 0U);
  140. exti_interrupt_flag_clear(EXTI_7);
  141. exti_interrupt_enable(EXTI_7);
  142. }else {
  143. //nvic_irq_disable(EXTI4_15_IRQn);
  144. exti_interrupt_disable(EXTI_7);
  145. exti_interrupt_flag_clear(EXTI_7);
  146. }
  147. }