lib_uart.h 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /**
  2. ******************************************************************************
  3. * @file lib_uart.h
  4. * @author Application Team
  5. * @version V1.1.0
  6. * @date 2019-10-28
  7. * @brief UART library.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. ******************************************************************************
  12. */
  13. #ifndef __LIB_UART_H
  14. #define __LIB_UART_H
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18. #include "target.h"
  19. //UART Init struct
  20. typedef struct
  21. {
  22. uint32_t Mode;
  23. uint32_t Parity;
  24. uint32_t FirstBit;
  25. uint32_t Baudrate;
  26. } UART_InitType;
  27. //Mode
  28. #define UART_MODE_RX (0x1U << UART_CTRL_RXEN_Pos)
  29. #define UART_MODE_TX (0x1U << UART_CTRL_TXEN_Pos)
  30. #define UART_MODE_OFF 0
  31. #define UART_MODE_Msk (UART_MODE_RX | UART_MODE_TX)
  32. //Parity
  33. #define UART_PARITY_EVEN (0x1U << UART_CTRL2_PMODE_Pos)
  34. #define UART_PARITY_ODD (0x3U << UART_CTRL2_PMODE_Pos)
  35. #define UART_PARITY_0 (0x5U << UART_CTRL2_PMODE_Pos)
  36. #define UART_PARITY_1 (0x7U << UART_CTRL2_PMODE_Pos)
  37. #define UART_PARITY_NONE (0x0U << UART_CTRL2_PMODE_Pos)
  38. //FirstBit
  39. #define UART_FIRSTBIT_LSB 0
  40. #define UART_FIRSTBIT_MSB (0x1U << UART_CTRL2_MSB_Pos)
  41. //UART Configration Information struct
  42. typedef struct
  43. {
  44. uint32_t Mode_Transmit :1; //1: TX Enable; 0: TX Disable
  45. uint32_t Mode_Receive :1; //1: RX Enable; 0: RX Disable
  46. uint32_t Baudrate; //The value of current budrate
  47. uint8_t Parity; //0:1+8+1 mode; 1: Even parity; 3:Odd parity; 5: parity bit=0; 7: parity bit=1;
  48. uint8_t FirstBit; //0: LSB transmit first; 1: MSB transmit first
  49. } UART_ConfigINFOType;
  50. //status
  51. #define UART_FLAG_DMATXDONE (0x1U << UART_STATE_DMATXDONE_Pos)
  52. #define UART_FLAG_RXPARITY (0x1U << UART_STATE_RXPSTS_Pos)
  53. #define UART_FLAG_TXDONE (0x1U << UART_STATE_TXDONE_Pos)
  54. #define UART_FLAG_RXPE (0x1U << UART_STATE_RXPE_Pos)
  55. #define UART_FLAG_RXOV (0x1U << UART_STATE_RXOV_Pos)
  56. #define UART_FLAG_TXOV (0x1U << UART_STATE_TXOV_Pos)
  57. #define UART_FLAG_RXFULL (0x1U << UART_STATE_RXFULL_Pos)
  58. #define UART_FLAG_RCMsk (UART_FLAG_DMATXDONE \
  59. |UART_FLAG_TXDONE \
  60. |UART_FLAG_RXPE \
  61. |UART_FLAG_RXOV \
  62. |UART_FLAG_RXFULL \
  63. |UART_FLAG_TXOV)
  64. //interrupt
  65. #define UART_INT_TXDONE (0x1U << UART_CTRL_TXDONEIE_Pos)
  66. #define UART_INT_RXPE (0x1U << UART_CTRL_RXPEIE_Pos)
  67. #define UART_INT_RXOV (0x1U << UART_CTRL_RXOVIE_Pos)
  68. #define UART_INT_TXOV (0x1U << UART_CTRL_TXOVIE_Pos)
  69. #define UART_INT_RX (0x1U << UART_CTRL_RXIE_Pos)
  70. #define UART_INT_Msk (UART_INT_TXDONE \
  71. |UART_INT_RXPE \
  72. |UART_INT_RXOV \
  73. |UART_INT_TXOV \
  74. |UART_INT_RX)
  75. //INTStatus
  76. #define UART_INTSTS_TXDONE (0x1U << UART_INTSTS_TXDONEIF_Pos)
  77. #define UART_INTSTS_RXPE (0x1U << UART_INTSTS_RXPEIF_Pos)
  78. #define UART_INTSTS_RXOV (0x1U << UART_INTSTS_RXOVIF_Pos)
  79. #define UART_INTSTS_TXOV (0x1U << UART_INTSTS_TXOVIF_Pos)
  80. #define UART_INTSTS_RX (0x1U << UART_INTSTS_RXIF_Pos)
  81. #define UART_INTSTS_Msk (UART_INTSTS_TXDONE \
  82. |UART_INTSTS_RXPE \
  83. |UART_INTSTS_RXOV \
  84. |UART_INTSTS_TXOV \
  85. |UART_INTSTS_RX)
  86. /* Private macros ------------------------------------------------------------*/
  87. #define IS_UART_MODE(__MODE__) (((((__MODE__) & UART_MODE_Msk) != 0U) && (((__MODE__) & ~UART_MODE_Msk) == 0U)))
  88. #define IS_UART_PARITY(__PARITY__) (((__PARITY__) == UART_PARITY_EVEN) ||\
  89. ((__PARITY__) == UART_PARITY_ODD) ||\
  90. ((__PARITY__) == UART_PARITY_0) ||\
  91. ((__PARITY__) == UART_PARITY_1) ||\
  92. ((__PARITY__) == UART_PARITY_NONE))
  93. #define IS_UART_FIRSTBIT(__FIRSTBIT__) (((__FIRSTBIT__) == UART_FIRSTBIT_LSB) ||\
  94. ((__FIRSTBIT__) == UART_FIRSTBIT_MSB))
  95. #define IS_UART_BAUDRATE(__BAUDRATE__) ((300UL <= (__BAUDRATE__)) &&\
  96. ((__BAUDRATE__) <= 819200UL))
  97. #define IS_UART_FLAGR(__FLAGR__) (((__FLAGR__) == UART_FLAG_DMATXDONE) ||\
  98. ((__FLAGR__) == UART_FLAG_RXPARITY) ||\
  99. ((__FLAGR__) == UART_FLAG_TXDONE) ||\
  100. ((__FLAGR__) == UART_FLAG_RXPE) ||\
  101. ((__FLAGR__) == UART_FLAG_RXOV) ||\
  102. ((__FLAGR__) == UART_FLAG_TXOV) ||\
  103. ((__FLAGR__) == UART_FLAG_RXFULL))
  104. #define IS_UART_FLAGC(__FLAGC__) ((((__FLAGC__) & UART_FLAG_RCMsk) != 0U) &&\
  105. (((__FLAGC__) & ~UART_FLAG_RCMsk) == 0U))
  106. #define IS_UART_INT(__INT__) ((((__INT__) & UART_INT_Msk) != 0U) &&\
  107. (((__INT__) & ~UART_INT_Msk) == 0U))
  108. #define IS_UART_INTFLAGR(__INTFLAGR__) (((__INTFLAGR__) == UART_INTSTS_TXDONE) ||\
  109. ((__INTFLAGR__) == UART_INTSTS_RXPE) ||\
  110. ((__INTFLAGR__) == UART_INTSTS_RXOV) ||\
  111. ((__INTFLAGR__) == UART_INTSTS_TXOV) ||\
  112. ((__INTFLAGR__) == UART_INTSTS_RX))
  113. #define IS_UART_INTFLAGC(__INTFLAGC__) ((((__INTFLAGC__) & UART_INTSTS_Msk) != 0U) &&\
  114. (((__INTFLAGC__) & ~UART_INTSTS_Msk) == 0U))
  115. /****************************** UART Instances ********************************/
  116. #define IS_UART_ALL_INSTANCE(INSTANCE) (((INSTANCE) == UART0) || \
  117. ((INSTANCE) == UART1) || \
  118. ((INSTANCE) == UART2) || \
  119. ((INSTANCE) == UART3) || \
  120. ((INSTANCE) == UART4) || \
  121. ((INSTANCE) == UART5))
  122. /* Exported Functions ------------------------------------------------------- */
  123. /* UART Exported Functions Group1:
  124. Initialization and functions --------------*/
  125. void UART_DeInit(UART_Type *UARTx);
  126. void UART_Init(UART_Type *UARTx, UART_InitType *InitStruct);
  127. void UART_StructInit(UART_InitType *InitStruct);
  128. /* UART Exported Functions Group2:
  129. (Interrupt) Flag --------------------------*/
  130. uint8_t UART_GetFlag(UART_Type *UARTx, uint32_t FlagMask);
  131. void UART_ClearFlag(UART_Type *UARTx, uint32_t FlagMask);
  132. void UART_INTConfig(UART_Type *UARTx, uint32_t INTMask, uint8_t NewState);
  133. uint8_t UART_GetINTStatus(UART_Type *UARTx, uint32_t INTMask);
  134. void UART_ClearINTStatus(UART_Type *UARTx, uint32_t INTMask);
  135. /* UART Exported Functions Group3:
  136. Transfer datas ----------------------------*/
  137. void UART_SendData(UART_Type *UARTx, uint8_t ch);
  138. uint8_t UART_ReceiveData(UART_Type *UARTx);
  139. /* UART Exported Functions Group4:
  140. MISC Configuration ------------------------*/
  141. void UART_BaudrateConfig(UART_Type *UARTx, uint32_t BaudRate);
  142. void UART_Cmd(UART_Type *UARTx, uint32_t Mode, uint32_t NewState);
  143. void UART_GetConfigINFO(UART_Type *UARTx, UART_ConfigINFOType *ConfigInfo);
  144. #ifdef __cplusplus
  145. }
  146. #endif
  147. #endif /* __LIB_UART_H */
  148. /*********************************** END OF FILE ******************************/