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.

214 lines
9.2 KiB

4 years ago
  1. /*********************************************************
  2. *Copyright (C), 2015, Shanghai Eastsoft Microelectronics Co., Ltd.
  3. *: lib_uart.h
  4. * : AE Team
  5. * : V1.01
  6. * : 2021/06/09
  7. * : UART模块库函数头文件
  8. * :
  9. 使
  10. **********************************************************/
  11. #ifndef __LIBUART_H__
  12. #define __LIBUART_H__
  13. #include "ES8P5066.h"
  14. #include "type.h"
  15. /* 停止位 */
  16. typedef enum
  17. {
  18. UART_StopBits_1 = 0x0, /* 1位停止位 */
  19. UART_StopBits_2 = 0x1, /* 2位停止位 */
  20. } UART_TYPE_TXFS;
  21. /* 数据格式 */
  22. typedef enum
  23. {
  24. UART_DataMode_7 = 0x4, /* 7位数据 */
  25. UART_DataMode_8 = 0x0, /* 8位数据 */
  26. UART_DataMode_9 = 0x2, /* 9位数据 */
  27. UART_DataMode_7Odd = 0xD, /* 7位数据+奇校验 */
  28. UART_DataMode_7Even = 0xC, /* 7位数据+偶校验 */
  29. UART_DataMode_7Add0 = 0xE, /* 7位数据+固定0 */
  30. UART_DataMode_7Add1 = 0xF, /* 7位数据+固定1 */
  31. UART_DataMode_8Odd = 0x9, /* 8位数据+奇校验 */
  32. UART_DataMode_8Even = 0x8, /* 8位数据+偶校验 */
  33. UART_DataMode_8Add0 = 0xA, /* 8位数据+固定0 */
  34. UART_DataMode_8Add1 = 0xB, /* 8位数据+固定1 */
  35. } UART_TYPE_DATAMOD;
  36. /* 端口极性 */
  37. typedef enum
  38. {
  39. UART_Polar_Normal = 0x0, /* 正极性 */
  40. UART_Polar_Opposite = 0x1, /* 负极性 */
  41. } UART_TYPE_RTXP;
  42. /* 时钟选择 */
  43. typedef enum
  44. {
  45. UART_Clock_1 = 0x1, /* PCLK */
  46. UART_Clock_2 = 0x2, /* PCLK / 2 */
  47. UART_Clock_3 = 0x3, /* PCLK / 4 */
  48. UART_Clock_4 = 0x4, /* PCLK / 8 */
  49. } UART_TYPE_BCS;
  50. /* 初始化结构体 */
  51. typedef struct
  52. {
  53. UART_TYPE_TXFS UART_StopBits; /* 停止位选择 */
  54. UART_TYPE_DATAMOD UART_TxMode; /* 发送数据格式 */
  55. UART_TYPE_RTXP UART_TxPolar; /* 发送端口极性 */
  56. UART_TYPE_DATAMOD UART_RxMode; /* 接收数据格式 */
  57. UART_TYPE_RTXP UART_RxPolar; /* 接收端口极性 */
  58. uint32_t UART_BaudRate; /* 波特率 */
  59. UART_TYPE_BCS UART_ClockSet; /* UART时钟选择 */
  60. } UART_InitStruType;
  61. /*自动波特率检测模式*/
  62. typedef enum
  63. {
  64. UART_AUTO_BAUD_MODE1 = 0x00, /* 自动波特率检测模式1,接收数据流以二进制1开始 */
  65. UART_AUTO_BAUD_MODE2 = 0x01, /* 自动波特率检测模式1,接收数据流以二进制10开始 */
  66. UART_AUTO_BAUD_MODE3 = 0x02, /* 自动波特率检测模式1,接收数据流以二进制1111_1110开始 */
  67. UART_AUTO_BAUD_MODE4 = 0x03, /* 自动波特率检测模式1,接收数据流以二进制1010_1010开始 */
  68. } UART_AUTO_BAUD_MODE;
  69. /*空闲检测模式*/
  70. typedef enum
  71. {
  72. UART_AUTO_BAUD_FREE_MODE1 = 0x00, /* 将检测连续 10 个比特位空闲 */
  73. UART_AUTO_BAUD_FREE_MODE2 = 0x01, /* 将检测连续 11 个比特位空闲 */
  74. UART_AUTO_BAUD_FREE_MODE3 = 0x02, /* 将检测连续 12 个比特位空闲 */
  75. UART_AUTO_BAUD_FREE_MODE4 = 0x03, /* 将检测连续 13 个比特位空闲 */
  76. } UART_AUTO_BAUD_FREE_MODE;
  77. /* Interrupt */
  78. typedef enum
  79. {
  80. UART_IT_TB = (1 << 0), /* 发送缓冲器空中断 */
  81. UART_IT_TC = (1 << 1), /* 发送完成中断 */
  82. UART_IT_TBWE = (1 << 8), /* 发送缓冲错误中断 */
  83. UART_IT_TBWO = (1 << 9), /* 发送缓冲溢出中断 */
  84. UART_IT_RB = (1 << 16), /* 接收缓冲器满中断 */
  85. UART_IT_ID = (1 << 17), /* 接收空闲帧中断 */
  86. UART_IT_RO = (1 << 24), /* 接收数据溢出中断 */
  87. UART_IT_FE = (1 << 25), /* 接收帧错误中断 */
  88. UART_IT_PE = (1 << 26), /* 接收校验错误中断 */
  89. UART_IT_BDE = (1 << 27), /* 波特率检测错误中断 */
  90. UART_IT_RBRE = (1 << 28), /* 读接收缓冲错误中断 */
  91. UART_IT_RBRO = (1 << 29), /* 读接收缓冲溢出中断 */
  92. } UART_TYPE_IT;
  93. /* Interrupt Flag */
  94. typedef enum
  95. {
  96. UART_FLAG_TB = (1 << 0), /* 发送缓冲器空中断 */
  97. UART_FLAG_TC = (1 << 1), /* 发送完成中断 */
  98. UART_FLAG_TBWE = (1 << 8), /* 发送缓冲错误中断 */
  99. UART_FLAG_TBWO = (1 << 9), /* 发送缓冲溢出中断 */
  100. UART_FLAG_RB = (1 << 16), /* 接收缓冲器满中断 */
  101. UART_FLAG_ID = (1 << 17), /* 接收空闲帧中断 */
  102. UART_FLAG_RO = (1 << 24), /* 接收数据溢出中断 */
  103. UART_FLAG_FE = (1 << 25), /* 接收帧错误中断 */
  104. UART_FLAG_PE = (1 << 26), /* 接收校验错误中断 */
  105. UART_FLAG_BDE = (1 << 27), /* 波特率检测错误中断 */
  106. UART_FLAG_RBRE = (1 << 28), /* 读接收缓冲错误中断 */
  107. UART_FLAG_RBRO = (1 << 29), /* 读接收缓冲溢出中断 */
  108. } UART_TYPE_FLAG;
  109. /* Interrupt Clear Flag */
  110. typedef enum
  111. {
  112. UART_CLR_TC = (1 << 1), /* 发送完成中断 */
  113. UART_CLR_TBWE = (1 << 8), /* 发送缓冲错误中断 */
  114. UART_CLR_TBWO = (1 << 9), /* 发送缓冲溢出中断 */
  115. UART_CLR_ID = (1 << 17), /* 接收空闲帧中断 */
  116. UART_CLR_RO = (1 << 24), /* 接收数据溢出中断 */
  117. UART_CLR_FE = (1 << 25), /* 接收帧错误中断 */
  118. UART_CLR_PE = (1 << 26), /* 接收校验错误中断 */
  119. UART_CLR_BDE = (1 << 27), /* 波特率检测错误中断 */
  120. UART_CLR_RBRE = (1 << 28), /* 读接收缓冲错误中断 */
  121. UART_CLR_RBRO = (1 << 29), /* 读接收缓冲溢出中断 */
  122. } UART_CLR_IF;
  123. /* Interrupt Mode */
  124. typedef enum
  125. {
  126. UART_TBIM_Byte = 0x0, /* 字节中断 */
  127. UART_TBIM_HalfWord = 0x1, /* 半字中断 */
  128. UART_TBIM_Word = 0x2, /* 字中断 */
  129. UART_TBIM_Full = 0x3, /* 全中断 */
  130. } UART_TYPE_TRBIM;
  131. /* Status */
  132. typedef enum
  133. {
  134. UART_STA_TBOV = (1 << 4), /* 发送缓冲器溢出状态位 */
  135. UART_STA_TXBUSY = (1 << 5), /* 发送状态位 */
  136. UART_STA_RBOV = (1 << 12), /* 接收缓冲器溢出状态位 */
  137. UART_STA_RXBUSY = (1 << 13), /* 接收状态位 */
  138. UART_STA_FER0 = (1 << 16), /* 当前读取BYTE0帧格式错误位 */
  139. UART_STA_PER0 = (1 << 17), /* 当前读取BYTE0校验错误位 */
  140. UART_STA_FER1 = (1 << 18), /* 当前读取BYTE1帧格式错误位 */
  141. UART_STA_PER1 = (1 << 19), /* 当前读取BYTE1校验错误位 */
  142. UART_STA_FER2 = (1 << 20), /* 当前读取BYTE2帧格式错误位 */
  143. UART_STA_PER2 = (1 << 21), /* 当前读取BYTE2校验错误位 */
  144. UART_STA_FER3 = (1 << 22), /* 当前读取BYTE3帧格式错误位 */
  145. UART_STA_PER3 = (1 << 23), /* 当前读取BYTE3校验错误位 */
  146. } UART_TYPE_STA;
  147. #define UART0_TxEnable() (UART0->CON0.TXEN = 1)
  148. #define UART1_TxEnable() (UART1->CON0.TXEN = 1)
  149. #define UART2_TxEnable() (UART2->CON0.TXEN = 1)
  150. #define UART0_TxDisable() (UART0->CON0.TXEN = 0)
  151. #define UART1_TxDisable() (UART1->CON0.TXEN = 0)
  152. #define UART2_TxDisable() (UART2->CON0.TXEN = 0)
  153. #define UART0_TxPause() (UART0->CON0.TXI = 1)
  154. #define UART1_TxPause() (UART1->CON0.TXI = 1)
  155. #define UART2_TxPause() (UART2->CON0.TXI = 1)
  156. #define UART0_TxCont() (UART0->CON0.TXI = 0)
  157. #define UART1_TxCont() (UART1->CON0.TXI = 0)
  158. #define UART2_TxCont() (UART2->CON0.TXI = 0)
  159. #define UART0_RxEnable() (UART0->CON0.RXEN = 1)
  160. #define UART1_RxEnable() (UART1->CON0.RXEN = 1)
  161. #define UART2_RxEnable() (UART2->CON0.RXEN = 1)
  162. #define UART0_RxDisable() (UART0->CON0.RXEN = 0)
  163. #define UART1_RxDisable() (UART1->CON0.RXEN = 0)
  164. #define UART2_RxDisable() (UART2->CON0.RXEN = 0)
  165. #define UART0_RxPause() (UART0->CON0.RXI = 1)
  166. #define UART1_RxPause() (UART1->CON0.RXI = 1)
  167. #define UART2_RxPause() (UART2->CON0.RXI = 1)
  168. #define UART0_RxCont() (UART0->CON0.RXI = 0)
  169. #define UART1_RxCont() (UART1->CON0.RXI = 0)
  170. #define UART2_RxCont() (UART2->CON0.RXI = 0)
  171. #define UART0_TxRst() (UART0->CON0.TRST = 1)
  172. #define UART1_TxRst() (UART1->CON0.TRST = 1)
  173. #define UART2_TxRst() (UART2->CON0.TRST = 1)
  174. #define UART0_RxRst() (UART0->CON0.RRST = 1)
  175. #define UART1_RxRst() (UART1->CON0.RRST = 1)
  176. #define UART2_RxRst() (UART2->CON0.RRST = 1)
  177. /* Function */
  178. void UART_Init(UART_TypeDef *UARTx, UART_InitStruType *UART_InitStruct);
  179. void UART_AutoBaudConfig(UART_TypeDef *UARTx, UART_AUTO_BAUD_MODE mode);
  180. void UART_BaudFreeConfig(UART_TypeDef *UARTx, UART_AUTO_BAUD_FREE_MODE mode);
  181. void UART_ITConfig(UART_TypeDef *UARTx, UART_TYPE_IT UART_IT, TYPE_FUNCEN NewState);
  182. void UART_TBIMConfig(UART_TypeDef *UARTx, UART_TYPE_TRBIM Type);
  183. void UART_RBIMConfig(UART_TypeDef *UARTx, UART_TYPE_TRBIM Type);
  184. void UART_SendByte(UART_TypeDef *UARTx, uint8_t data08);
  185. void UART_SendHalfWord(UART_TypeDef *UARTx, uint16_t data16);
  186. void UART_SendWord(UART_TypeDef *UARTx, uint32_t data32);
  187. uint8_t UART_AutoBaudResult(UART_TypeDef *UARTx);
  188. uint8_t UART_RecByte(UART_TypeDef *UARTx);
  189. uint16_t UART_RecHalfWord(UART_TypeDef *UARTx);
  190. uint32_t UART_RecWord(UART_TypeDef *UARTx);
  191. FlagStatus UART_GetStatus(UART_TypeDef *UARTx, UART_TYPE_STA UART_Flag);
  192. FlagStatus UART_GetFlagStatus(UART_TypeDef *UARTx, UART_TYPE_FLAG UART_Flag);
  193. ITStatus UART_GetITStatus(UART_TypeDef *UARTx, UART_TYPE_IT UART_Flag);
  194. void UART_ClearITPendingBit(UART_TypeDef *UARTx, UART_TYPE_FLAG UART_Flag);
  195. #endif