You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

276 lines
7.6 KiB

4 years ago
3 years ago
4 years ago
  1. /*********************************************************
  2. *Copyright (C), 2015, Shanghai Eastsoft Microelectronics Co., Ltd.
  3. *: lib_uart.c
  4. * : AE Team
  5. * : V1.01
  6. * : 2021/06/09
  7. * : UART模块库函数
  8. * :
  9. 使
  10. **********************************************************/
  11. #include "lib_uart.h"
  12. #include "system_ES8P5066.h"
  13. /*************************************
  14. UART_Init
  15. UART初始化
  16. UART0/UART1
  17. **************************************/
  18. void UART_Init(UART_TypeDef *UARTx, UART_InitStruType *UART_InitStruct)
  19. {
  20. float tmp;
  21. uint32_t baud;
  22. tmp = 0;
  23. if (UART_InitStruct->UART_ClockSet == UART_Clock_1)
  24. {
  25. tmp = (float)SystemCoreClock / (float)(16 * UART_InitStruct->UART_BaudRate);
  26. }
  27. else if (UART_InitStruct->UART_ClockSet == UART_Clock_2)
  28. {
  29. tmp = (float)SystemCoreClock / (float)(32 * UART_InitStruct->UART_BaudRate);
  30. }
  31. else if (UART_InitStruct->UART_ClockSet == UART_Clock_3)
  32. {
  33. tmp = (float)SystemCoreClock / (float)(64 * UART_InitStruct->UART_BaudRate);
  34. }
  35. else if (UART_InitStruct->UART_ClockSet == UART_Clock_4)
  36. {
  37. tmp = (float)SystemCoreClock / (float)(128 * UART_InitStruct->UART_BaudRate);
  38. }
  39. tmp = tmp < 1.0 ? 1.0 : tmp;
  40. baud = (uint32_t)(tmp * 16);
  41. UARTx->CON1.BCS = UART_InitStruct->UART_ClockSet;
  42. UARTx->BRR.Word = baud;
  43. UARTx->CON0.TXFS = UART_InitStruct->UART_StopBits;
  44. UARTx->CON0.TXMOD = UART_InitStruct->UART_TxMode;
  45. UARTx->CON0.TXP = UART_InitStruct->UART_TxPolar;
  46. UARTx->CON0.RXMOD = UART_InitStruct->UART_RxMode;
  47. UARTx->CON0.RXP = UART_InitStruct->UART_RxPolar;
  48. return;
  49. }
  50. /*************************************
  51. UART_AutoBaudConfig
  52. UART自动配置波特率并返回波特率
  53. UART0/UART1
  54. mode:
  55. 0
  56. **************************************/
  57. void UART_AutoBaudConfig(UART_TypeDef *UARTx, UART_AUTO_BAUD_MODE mode)
  58. {
  59. UARTx->CON1.BDM = mode;
  60. UARTx->CON0.BDEN = 1;
  61. }
  62. /*************************************
  63. UART_AutoBaudResult
  64. UART自动检测波特率的检测结果
  65. UART0/UART1
  66. 0
  67. **************************************/
  68. uint8_t UART_AutoBaudResult(UART_TypeDef *UARTx)
  69. {
  70. return UARTx->CON0.BDEN;
  71. }
  72. /*************************************
  73. UART_BaudFreeConfig
  74. UART空闲检测
  75. UART0/UART1
  76. mode:
  77. 0
  78. **************************************/
  79. void UART_BaudFreeConfig(UART_TypeDef *UARTx, UART_AUTO_BAUD_FREE_MODE mode)
  80. {
  81. UARTx->CON0.IDEN = 1; /* 使能空闲检测 */
  82. UARTx->CON1.IDM = mode;
  83. }
  84. /*************************************
  85. UART_ITConfig
  86. UART0/UART1
  87. 使/
  88. **************************************/
  89. void UART_ITConfig(UART_TypeDef *UARTx, UART_TYPE_IT UART_IT, TYPE_FUNCEN NewState)
  90. {
  91. if (NewState == Enable)
  92. UARTx->IE.Word |= (uint32_t)UART_IT;
  93. else
  94. UARTx->IE.Word &= ~(uint32_t)UART_IT;
  95. return;
  96. }
  97. /*************************************
  98. UART_TBIMConfig
  99. UART0/UART1
  100. **************************************/
  101. void UART_TBIMConfig(UART_TypeDef *UARTx, UART_TYPE_TRBIM Type)
  102. {
  103. UARTx->CON1.TBIM = Type;
  104. return;
  105. }
  106. /*************************************
  107. UART_RBIMConfig
  108. UART0/UART1
  109. **************************************/
  110. void UART_RBIMConfig(UART_TypeDef *UARTx, UART_TYPE_TRBIM Type)
  111. {
  112. UARTx->CON1.RBIM = Type;
  113. return;
  114. }
  115. /*************************************
  116. UART_SendByte
  117. UART0/UART1
  118. **************************************/
  119. void UART_SendByte(UART_TypeDef *UARTx, uint8_t data08)
  120. {
  121. UARTx->TBW.Byte[0] = data08;
  122. return;
  123. }
  124. /*************************************
  125. UART_SendHalfWord
  126. UART0/UART1
  127. **************************************/
  128. void UART_SendHalfWord(UART_TypeDef *UARTx, uint16_t data16)
  129. {
  130. UARTx->TBW.HalfWord[0] = data16;
  131. return;
  132. }
  133. /*************************************
  134. UART_SendWord
  135. UART0/UART1
  136. **************************************/
  137. void UART_SendWord(UART_TypeDef *UARTx, uint32_t data32)
  138. {
  139. UARTx->TBW.Word = data32;
  140. return;
  141. }
  142. /*************************************
  143. UART_RecByte
  144. UART0/UART1
  145. **************************************/
  146. uint8_t UART_RecByte(UART_TypeDef *UARTx)
  147. {
  148. return UARTx->RBR.Byte[0];
  149. }
  150. /*************************************
  151. UART_RecHalfWord
  152. UART0/UART1
  153. **************************************/
  154. uint16_t UART_RecHalfWord(UART_TypeDef *UARTx)
  155. {
  156. return UARTx->RBR.HalfWord[0];
  157. }
  158. /*************************************
  159. UART_RecWord
  160. UART0/UART1
  161. **************************************/
  162. uint32_t UART_RecWord(UART_TypeDef *UARTx)
  163. {
  164. return UARTx->RBR.Word;
  165. }
  166. /*************************************
  167. UART_GetStatus
  168. UART状态
  169. UART0/UART1
  170. SET/RESET
  171. **************************************/
  172. FlagStatus UART_GetStatus(UART_TypeDef *UARTx, UART_TYPE_STA UART_Flag)
  173. {
  174. FlagStatus bitstatus = RESET;
  175. if (UARTx->STA.Word & UART_Flag)
  176. bitstatus = SET;
  177. return bitstatus;
  178. }
  179. /*************************************
  180. UART_GetFlagStatus
  181. UART0/UART1
  182. SET/RESET
  183. **************************************/
  184. FlagStatus UART_GetFlagStatus(UART_TypeDef *UARTx, UART_TYPE_FLAG UART_Flag)
  185. {
  186. FlagStatus bitstatus = RESET;
  187. if (UARTx->IF.Word & UART_Flag)
  188. bitstatus = SET;
  189. return bitstatus;
  190. }
  191. /*************************************
  192. UART_GetITStatus
  193. 使
  194. UART0/UART1
  195. SET/RESET
  196. **************************************/
  197. ITStatus UART_GetITStatus(UART_TypeDef *UARTx, UART_TYPE_IT UART_IT)
  198. {
  199. ITStatus bitstatus = RESET;
  200. if (UARTx->IE.Word & UART_IT)
  201. bitstatus = SET;
  202. return bitstatus;
  203. }
  204. /*************************************
  205. UART_ClearITPendingBit
  206. UART0/UART1
  207. **************************************/
  208. void UART_ClearITPendingBit(UART_TypeDef *UARTx, UART_TYPE_FLAG UART_Flag)
  209. {
  210. UARTx->IF.Word = (uint32_t) UART_Flag;
  211. return;
  212. }