hv_drv_Uart.h 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. /*
  2. * @file hv_drv_uart.h
  3. * @brief Header file of misc module.
  4. *
  5. * @verbatim
  6. * ==============================================================================
  7. * ##### How to use #####
  8. * ==============================================================================
  9. * (+) Use ()
  10. *
  11. * @endverbatim
  12. * @author HiView SoC Software Team
  13. * @version 1.0.0
  14. * @date 2023-06-14
  15. */
  16. /** @file
  17. * @brief UART DRV APIs
  18. */
  19. #ifndef _HV_DRV_UART_H
  20. #define _HV_DRV_UART_H
  21. #include "hv_cal_Dma.h"
  22. /** @defgroup DRV_UART DRV_UART
  23. * hal uart functions
  24. * @{
  25. */
  26. /* Parity setting */
  27. typedef enum _UartParity
  28. {
  29. /* uart has no parity bit */
  30. UART_PARITY_NONE,
  31. /* uart has even parity bit */
  32. UART_PARITY_EVEN,
  33. /* uart has odd parity bit */
  34. UART_PARITY_ODD,
  35. } UartParity;
  36. /* Stop bit setting */
  37. typedef enum _UartStopBit
  38. {
  39. /* uart stop bit is 1 bit */
  40. UART_STOPBIT_1,
  41. /* uart stop bit is 1.5 bits or 2 bits */
  42. UART_STOPBIT_1_5_OR_2,
  43. } UartStopBit;
  44. /* Word length setting */
  45. typedef enum _UartWordLen
  46. {
  47. /* uart word length is 5 bits */
  48. UART_WORDLEN_5,
  49. /* uart word length is 6 bits */
  50. UART_WORDLEN_6,
  51. /* uart word length is 7 bits */
  52. UART_WORDLEN_7,
  53. /* uart word length is 8 bits */
  54. UART_WORDLEN_8,
  55. } UartWordLen;
  56. /* RX trigger */
  57. typedef enum _UartRxTrigger
  58. {
  59. /* 1 character in FIFO */
  60. UART_RX_FIFO_CHAR_1,
  61. /* FIFO 1/4 full */
  62. UART_RX_FIFO_QUARTER_FULL,
  63. /* FIFO 1/2 full */
  64. UART_RX_FIFO_HALF_FULL,
  65. /* FIFO 2 less than full */
  66. UART_RX_FIFO_FULL_2,
  67. } UartRxTrigger;
  68. /* TX trigger */
  69. typedef enum _UartTxTrigger
  70. {
  71. /* FIFO empty */
  72. UART_TX_FIFO_EMPTY,
  73. /* 2 characters in FIFO */
  74. UART_TX_FIFO_CHAR_2,
  75. /* FIFO 1/4 full */
  76. UART_TX_FIFO_QUARTER_FULL,
  77. /* FIFO 1/2 full */
  78. UART_TX_FIFO_HALF_FULL,
  79. } UartTxTrigger;
  80. /* UART error codes */
  81. typedef enum _UartError
  82. {
  83. /* No error */
  84. UART_ERROR_NONE = ((UINT32)0x00),
  85. /* Parity error */
  86. UART_ERROR_PE = ((UINT32)0x01),
  87. /* Receiver fifo error */
  88. UART_ERROR_RFE = ((UINT32)0x02),
  89. /* frame error */
  90. UART_ERROR_FE = ((UINT32)0x04),
  91. /* Overrun error */
  92. UART_ERROR_ORE = ((UINT32)0x08),
  93. /* DMA transfer error */
  94. UART_ERROR_DMA = ((UINT32)0x10),
  95. /* Break Interrupt */
  96. UART_ERROR_BI = ((UINT32)0x20),
  97. } UartError;
  98. /* HAL UART State structures definition */
  99. typedef enum _UartStateType
  100. {
  101. /* Peripheral is not initialized */
  102. UART_STATE_RESET = 0x00,
  103. /* Peripheral Initialized and ready for use */
  104. UART_STATE_READY = 0x01,
  105. /* an internal process is ongoing */
  106. UART_STATE_BUSY = 0x02,
  107. /* Data Transmission process is ongoing */
  108. UART_STATE_BUSY_TX = 0x12,
  109. /* Data Reception process is ongoing */
  110. UART_STATE_BUSY_RX = 0x22,
  111. /* Data Transmission and Reception process is ongoing */
  112. UART_STATE_BUSY_TX_RX = 0x32,
  113. /* Timeout state */
  114. UART_STATE_TIMEOUT = 0x03,
  115. /* Error */
  116. UART_STATE_ERROR = 0x04
  117. } UartStateType;
  118. /* UART port enum */
  119. typedef enum _UartPortIndex
  120. {
  121. UART_PORT_0 = 0,
  122. UART_PORT_1,
  123. UART_PORT_MAX
  124. } UartPortIndex;
  125. typedef enum _UartCallbackType
  126. {
  127. UART_INT_TX_COMPLETE,
  128. UART_INT_RX_COMPLETE,
  129. UART_DMA_TX_COMPLETE,
  130. UART_DMA_RX_COMPLETE,
  131. } UartCallbackType;
  132. typedef void (*UART_CALLBACK)(UartCallbackType enType, void *pArg, UCHAR8 ucSize);
  133. typedef struct _UartInitParam
  134. {
  135. UartPortIndex enPort;
  136. UINT32 uiBaudrate;
  137. UINT32 uiPriority;
  138. UartParity enParity;
  139. UartStopBit enStopbit;
  140. UartWordLen enWordlen;
  141. BOOL bFifoEnable;
  142. BOOL b9BitMode;
  143. BOOL bNewInterface;
  144. UartRxTrigger enRxFiFoTrig;
  145. UartTxTrigger enTxFiFoTrig;
  146. UART_CALLBACK fCallback;
  147. void *pCallbackArg;
  148. } UartInitParam;
  149. /* UART data structure */
  150. typedef struct _UartSelf UartSelf;
  151. void Hv_Drv_Uart_SetDmaTx(UartSelf *pstSelf, DmaSelf *pstHdmaTx);
  152. void Hv_Drv_Uart_SetDmaRx(UartSelf *pstSelf, DmaSelf *pstHdmaRx);
  153. /** Initialize uart
  154. * @param initParam pointer to uart configure parameters
  155. * @return uart structure pointer
  156. */
  157. UartSelf *Hv_Drv_Uart_Init(UartInitParam *pstInitParam);
  158. /** brief De-initialize uart
  159. * @param self uart pointer
  160. */
  161. void Hv_Drv_Uart_Cleanup(UartSelf *pstSelf);
  162. /** brief De-initialize uart
  163. * @param self uart pointer
  164. */
  165. void Hv_Drv_Uart_CleanFifo(UartSelf *pstSelf);
  166. /** Detection baudrate of uart
  167. * @param port uart port
  168. * @param baudrate detection baudrate value
  169. * @return result
  170. */
  171. Status Hv_Drv_Uart_BaudrateDetection(UartPortIndex enPort, UINT32 *puiBaudrate);
  172. /** Set baudrate of uart
  173. * @param self uart pointer
  174. * @param baudrate baudrate
  175. * @return result
  176. */
  177. Status Hv_Drv_Uart_SetBaudrate(UartSelf *pstSelf, UINT32 uiBaudrate);
  178. /** Set serial format of homebus
  179. * @param self uart pointer
  180. * @param parity parity
  181. * @param stopbit stop bit
  182. * @param wordlen word length
  183. * @return result
  184. */
  185. Status Hv_Drv_Uart_SetFormat(UartSelf *pstSelf, UartParity enParity, UartStopBit enStopbit, UartWordLen enWordlen);
  186. /** Receives an amount of data in polling mode
  187. * @param self uart pointer
  188. * @param data pointer to data buffer
  189. * @param size amount of data to be received
  190. * @param timeout timeout duration ms
  191. * @return result
  192. */
  193. Status Hv_Drv_Uart_Receive(UartSelf *pstSelf, UCHAR8 *pucData, USHORT16 usSize, UINT32 uiTimeout);
  194. /** enable uart receive int��
  195. * @param ucPort uart port
  196. * @return result
  197. */
  198. Status Hv_Drv_Uart_EnableReceive(UCHAR8 ucPort);
  199. /** Receives an amount of data in blocking mode
  200. * @param self uart pointer
  201. * @param data pointer to data buffer
  202. * @param size amount of data to be received
  203. * @return result
  204. */
  205. Status Hv_Drv_Uart_BlockReceive(UartSelf *pstSelf, UCHAR8 *pucData, USHORT16 usSize);
  206. /** Receives an amount of data in non blocking mode
  207. * @param self uart pointer
  208. * @param data pointer to data buffer
  209. * @param size amount of data to be received
  210. * @return result
  211. */
  212. Status Hv_Drv_Uart_IntReceive(UartSelf *pstSelf, UCHAR8 *pucData, USHORT16 usSize);
  213. /** Receives an amount of data in non blocking mode
  214. * @param self uart pointer
  215. * @param data pointer to data buffer
  216. * @param size amount of data to be received
  217. * @return result
  218. */
  219. Status Hv_Drv_Uart_DmaReceive(UartSelf *pstSelf, UCHAR8 *pucData, USHORT16 usSize);
  220. /** Get character by UART
  221. * @param self uart pointer
  222. * @param data pointer to data buffer
  223. * @return result
  224. */
  225. Status Hv_Drv_Uart_GetChar(UartSelf *pstSelf, UCHAR8 *pucData);
  226. /** Output address by UART with 9bit mode
  227. * @param self uart pointer
  228. * @param data device address
  229. * @return result
  230. */
  231. Status Hv_Drv_Uart_PutAddr(UartSelf *pstSelf, UCHAR8 ucAddr);
  232. /** Output character by UART
  233. * @param self uart pointer
  234. * @param data outputed character
  235. * @return result
  236. */
  237. Status Hv_Drv_Uart_PutChar(UartSelf *pstSelf, UCHAR8 ucData);
  238. /** Sends an amount of data in blocking mode
  239. * @param self uart pointer
  240. * @param data pointer to data buffer
  241. * @param size amount of data to be sent
  242. * @param timeout timeout duration ms
  243. * @return result
  244. */
  245. Status Hv_Drv_Uart_Transmit(UartSelf *pstSelf, const UCHAR8 *pucData, USHORT16 usSize, UINT32 uiTimeout);
  246. /** Sends an amount of data
  247. * @param ucPort uart port
  248. * @param data pointer to data buffer
  249. * @param size amount of data to be sent
  250. * @return result
  251. */
  252. Status Hv_Drv_Uart_Send(UCHAR8 ucPort, const UCHAR8 *pucData, USHORT16 usSize);
  253. /** Sends an amount of data in non blocking mode
  254. * @param self uart pointer
  255. * @param data pointer to data buffer
  256. * @param size amount of data to be sent
  257. * @return result
  258. */
  259. Status Hv_Drv_Uart_IntTransmit(UartSelf *pstSelf, const UCHAR8 *pucData, USHORT16 usSize);
  260. /** Sends an amount of data in non blocking mode
  261. * @param self uart pointer
  262. * @param data pointer to data buffer
  263. * @param size amount of data to be sent
  264. * @return result
  265. */
  266. Status Hv_Drv_Uart_DmaTransmit(UartSelf *pstSelf, const UCHAR8 *pucData, USHORT16 usSize);
  267. /** Get errorCode of uart
  268. * @param self uart pointer
  269. * @return errorCode result
  270. */
  271. UINT32 Hv_Drv_Uart_GetErrorCode(UartSelf *pstSelf);
  272. /** Get empty of uart
  273. * @param self uart pointer
  274. * @return result empty or not
  275. */
  276. BOOL Hv_Drv_Uart_IsEmpty(UartSelf *pstSelf);
  277. /**
  278. * @brief uart enable for log.
  279. * @param[in] bEnble: on/off
  280. */
  281. VOID Hv_Drv_EnableUart(BOOL bEnble);
  282. /** @} */
  283. #endif