uart.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. #include "uart.h"
  2. #include "board_cfg.h"
  3. #include "common.h"
  4. #include "gd32e23x.h"
  5. #include "Hlw8110.h"
  6. #include "stdbool.h"
  7. #define UART1_BUF_SIZE 10
  8. extern unsigned char u8_TxBuf[UART1_BUF_SIZE];
  9. extern unsigned char u8_RxBuf[UART1_BUF_SIZE];
  10. extern unsigned char u8_TX_Length;
  11. extern unsigned char u8_RX_Length;
  12. extern unsigned char u8_RX_Index;
  13. extern unsigned char B_Rx_Data_ING;
  14. extern unsigned char B_Rx_Finish;
  15. Rx_Data data={0};
  16. #define SEL_0_H gpio_bit_set(GPIOA,GPIO_PIN_6)
  17. #define SEL_0_L gpio_bit_reset(GPIOA,GPIO_PIN_6)
  18. #define SEL_1_H gpio_bit_set(GPIOA,GPIO_PIN_7)
  19. #define SEL_1_L gpio_bit_reset(GPIOA,GPIO_PIN_7)
  20. #define SEL_2_H gpio_bit_set(GPIOB,GPIO_PIN_0)
  21. #define SEL_2_L gpio_bit_reset(GPIOB,GPIO_PIN_0)
  22. void uart1_config(uint32_t bound)
  23. {
  24. nvic_irq_enable(USART1_IRQn, 2);
  25. rcu_periph_clock_enable(RCU_GPIOA);
  26. gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_2);
  27. gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_2);
  28. gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_2);
  29. gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_3);
  30. gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_3);
  31. gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_3);
  32. rcu_periph_clock_enable(RCU_USART1);
  33. usart_deinit(USART1);
  34. usart_baudrate_set(USART1, bound);
  35. usart_stop_bit_set(USART1,USART_STB_1BIT);
  36. usart_word_length_set(USART1,USART_WL_9BIT);
  37. usart_parity_config(USART1,USART_PM_EVEN);
  38. usart_receive_config(USART1, USART_RECEIVE_ENABLE);
  39. usart_transmit_config(USART1, USART_TRANSMIT_ENABLE);
  40. usart_enable(USART1);
  41. usart_interrupt_enable(USART1, USART_INT_RBNE);
  42. }
  43. void USART1_IRQHandler(void)
  44. {
  45. if(usart_flag_get(USART1, USART_FLAG_ORERR) == SET)
  46. {
  47. usart_flag_clear(USART1, USART_FLAG_ORERR);
  48. }
  49. if(usart_interrupt_flag_get(USART1, USART_INT_FLAG_TBE)!= RESET)
  50. {
  51. usart_interrupt_flag_clear(USART1, USART_INT_FLAG_TBE);
  52. }
  53. if(usart_interrupt_flag_get(USART1, USART_INT_FLAG_RBNE) != RESET)
  54. {
  55. usart_interrupt_flag_clear(USART1, USART_INT_FLAG_RBNE);
  56. if (u8_RX_Index < u8_RX_Length )
  57. {
  58. u8_RxBuf[u8_RX_Index] = usart_data_receive(USART1);
  59. u8_RX_Index++;
  60. B_Rx_Data_ING = 1;
  61. if(u8_RX_Index == u8_RX_Length)
  62. {
  63. B_Rx_Finish = TRUE;
  64. u8_RX_Index = 0;
  65. }
  66. }
  67. }
  68. }
  69. void Awaken_Hlw8110()
  70. {
  71. usart_data_transmit(USART1, 0x55);
  72. }
  73. void Start_Send_UartData(unsigned char len)
  74. {
  75. unsigned int i;
  76. for(i=0;i<len;i++)
  77. {
  78. usart_data_transmit(USART1, (uint8_t)u8_TxBuf[i]);
  79. while(usart_flag_get(USART1, USART_FLAG_TC) == RESET);
  80. }
  81. }
  82. void ch448f_config(void)
  83. {
  84. rcu_periph_clock_enable(RCU_GPIOA);
  85. rcu_periph_clock_enable(RCU_GPIOB);
  86. gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
  87. gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
  88. gpio_bit_reset(GPIOA, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
  89. gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
  90. gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
  91. gpio_bit_reset(GPIOB, GPIO_PIN_0);
  92. }
  93. void select_channel(uint8_t chx)
  94. {
  95. switch(chx)
  96. {
  97. #if SUPPORT_CHONGQING
  98. case 7:
  99. {
  100. SEL_0_H;
  101. SEL_1_H;
  102. SEL_2_L;
  103. }
  104. break;
  105. case 6:
  106. {
  107. SEL_0_L;
  108. SEL_1_H;
  109. SEL_2_L;
  110. }
  111. break;
  112. case 5:
  113. {
  114. SEL_0_H;
  115. SEL_1_L;
  116. SEL_2_L;
  117. }
  118. break;
  119. case 4:
  120. {
  121. SEL_0_L;
  122. SEL_1_L;
  123. SEL_2_L;
  124. }
  125. break;
  126. case 3:
  127. {
  128. SEL_0_H;
  129. SEL_1_H;
  130. SEL_2_H;
  131. }
  132. break;
  133. case 2:
  134. {
  135. SEL_0_L;
  136. SEL_1_H;
  137. SEL_2_H;
  138. }
  139. break;
  140. case 1:
  141. {
  142. SEL_0_H;
  143. SEL_1_L;
  144. SEL_2_H;
  145. }
  146. break;
  147. case 0:
  148. {
  149. SEL_0_L;
  150. SEL_1_L;
  151. SEL_2_H;
  152. }
  153. break;
  154. #else
  155. case 0:
  156. {
  157. SEL_0_H;
  158. SEL_1_H;
  159. SEL_2_L;
  160. }
  161. break;
  162. case 1:
  163. {
  164. SEL_0_L;
  165. SEL_1_H;
  166. SEL_2_L;
  167. }
  168. break;
  169. case 2:
  170. {
  171. SEL_0_H;
  172. SEL_1_L;
  173. SEL_2_L;
  174. }
  175. break;
  176. case 3:
  177. {
  178. SEL_0_L;
  179. SEL_1_L;
  180. SEL_2_L;
  181. }
  182. break;
  183. case 4:
  184. {
  185. SEL_0_H;
  186. SEL_1_H;
  187. SEL_2_H;
  188. }
  189. break;
  190. case 5:
  191. {
  192. SEL_0_L;
  193. SEL_1_H;
  194. SEL_2_H;
  195. }
  196. break;
  197. case 6:
  198. {
  199. SEL_0_H;
  200. SEL_1_L;
  201. SEL_2_H;
  202. }
  203. break;
  204. case 7:
  205. {
  206. SEL_0_L;
  207. SEL_1_L;
  208. SEL_2_H;
  209. }
  210. break;
  211. #endif
  212. default:
  213. break;
  214. }
  215. }