gd32f4xx_usart.h 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467
  1. /*!
  2. \file gd32f4xx_usart.h
  3. \brief definitions for the USART
  4. */
  5. /*
  6. Copyright (C) 2016 GigaDevice
  7. 2016-08-15, V1.0.0, firmware for GD32F4xx
  8. */
  9. #ifndef GD32F4XX_USART_H
  10. #define GD32F4XX_USART_H
  11. #include "gd32f4xx.h"
  12. /* USARTx(x=0,1) definitions */
  13. #define USART1 USART_BASE
  14. #define USART2 (USART_BASE+0x00000400U) /*!< USART2 base address */
  15. #define UART3 (USART_BASE+0x00000800U) /*!< UART3 base address */
  16. #define UART4 (USART_BASE+0x00000C00U) /*!< UART4 base address */
  17. #define UART6 (USART_BASE+0x00003400U) /*!< UART6 base address */
  18. #define UART7 (USART_BASE+0x00003800U) /*!< UART7 base address */
  19. #define USART0 (USART_BASE+0x0000CC00U) /*!< USART0 base address */
  20. #define USART5 (USART_BASE+0x0000D000U) /*!< USART5 base address */
  21. /* registers definitions */
  22. #define USART_STAT0(usartx) REG32((usartx) + 0x00U) /*!< USART status register 0 */
  23. #define USART_DATA(usartx) REG32((usartx) + 0x04U) /*!< USART data register */
  24. #define USART_BAUD(usartx) REG32((usartx) + 0x08U) /*!< USART baud rate register */
  25. #define USART_CTL0(usartx) REG32((usartx) + 0x0CU) /*!< USART control register 0 */
  26. #define USART_CTL1(usartx) REG32((usartx) + 0x10U) /*!< USART control register 1 */
  27. #define USART_CTL2(usartx) REG32((usartx) + 0x14U) /*!< USART control register 2 */
  28. #define USART_GP(usartx) REG32((usartx) + 0x18U) /*!< USART guard time and prescaler register */
  29. #define USART_CTL3(usartx) REG32((usartx) + 0x80U) /*!< USART control register 3 */
  30. #define USART_RT(usartx) REG32((usartx) + 0x84U) /*!< USART receiver timeout register */
  31. #define USART_STAT1(usartx) REG32((usartx) + 0x88U) /*!< USART status register 1 */
  32. #define USART_CHC(usartx) REG32((usartx) + 0xC0U) /*!< USART coherence control register */
  33. /* bits definitions */
  34. /* USARTx_STAT0 */
  35. #define USART_STAT0_PERR BIT(0) /*!< parity error flag */
  36. #define USART_STAT0_FERR BIT(1) /*!< frame error flag */
  37. #define USART_STAT0_NERR BIT(2) /*!< noise error flag */
  38. #define USART_STAT0_ORERR BIT(3) /*!< overrun error */
  39. #define USART_STAT0_IDLEF BIT(4) /*!< IDLE frame detected flag */
  40. #define USART_STAT0_RBNE BIT(5) /*!< read data buffer not empty */
  41. #define USART_STAT0_TC BIT(6) /*!< transmission complete */
  42. #define USART_STAT0_TBE BIT(7) /*!< transmit data buffer empty */
  43. #define USART_STAT0_LBDF BIT(8) /*!< LIN break detected flag */
  44. #define USART_STAT0_CTSF BIT(9) /*!< CTS change flag */
  45. /* USARTx_DATA */
  46. #define USART_DATA_DATA BITS(0,8) /*!< transmit or read data value */
  47. /* USARTx_BAUD */
  48. #define USART_BAUD_FRADIV BITS(0,3) /*!< fraction part of baud-rate divider */
  49. #define USART_BAUD_INTDIV BITS(4,15) /*!< integer part of baud-rate divider */
  50. /* USARTx_CTL0 */
  51. #define USART_CTL0_SBKCMD BIT(0) /*!< send break command */
  52. #define USART_CTL0_RWU BIT(1) /*!< receiver wakeup from mute mode */
  53. #define USART_CTL0_REN BIT(2) /*!< receiver enable */
  54. #define USART_CTL0_TEN BIT(3) /*!< transmitter enable */
  55. #define USART_CTL0_IDLEIE BIT(4) /*!< idle line detected interrupt enable */
  56. #define USART_CTL0_RBNEIE BIT(5) /*!< read data buffer not empty interrupt and overrun error interrupt enable */
  57. #define USART_CTL0_TCIE BIT(6) /*!< transmission complete interrupt enable */
  58. #define USART_CTL0_TBEIE BIT(7) /*!< transmitter buffer empty interrupt enable */
  59. #define USART_CTL0_PERRIE BIT(8) /*!< parity error interrupt enable */
  60. #define USART_CTL0_PM BIT(9) /*!< parity mode */
  61. #define USART_CTL0_PCEN BIT(10) /*!< parity check function enable */
  62. #define USART_CTL0_WM BIT(11) /*!< wakeup method in mute mode */
  63. #define USART_CTL0_WL BIT(12) /*!< word length */
  64. #define USART_CTL0_UEN BIT(13) /*!< USART enable */
  65. #define USART_CTL0_OVSMOD BIT(15) /*!< oversample mode */
  66. /* USARTx_CTL1 */
  67. #define USART_CTL1_ADDR BITS(0,3) /*!< address of USART */
  68. #define USART_CTL1_LBLEN BIT(5) /*!< LIN break frame length */
  69. #define USART_CTL1_LBDIE BIT(6) /*!< LIN break detected interrupt eanble */
  70. #define USART_CTL1_CLEN BIT(8) /*!< CK length */
  71. #define USART_CTL1_CPH BIT(9) /*!< CK phase */
  72. #define USART_CTL1_CPL BIT(10) /*!< CK polarity */
  73. #define USART_CTL1_CKEN BIT(11) /*!< CK pin enable */
  74. #define USART_CTL1_STB BITS(12,13) /*!< STOP bits length */
  75. #define USART_CTL1_LMEN BIT(14) /*!< LIN mode enable */
  76. /* USARTx_CTL2 */
  77. #define USART_CTL2_ERRIE BIT(0) /*!< error interrupt enable */
  78. #define USART_CTL2_IREN BIT(1) /*!< IrDA mode enable */
  79. #define USART_CTL2_IRLP BIT(2) /*!< IrDA low-power */
  80. #define USART_CTL2_HDEN BIT(3) /*!< half-duplex enable */
  81. #define USART_CTL2_NKEN BIT(4) /*!< NACK enable in smartcard mode */
  82. #define USART_CTL2_SCEN BIT(5) /*!< smartcard mode enable */
  83. #define USART_CTL2_DENR BIT(6) /*!< DMA request enable for reception */
  84. #define USART_CTL2_DENT BIT(7) /*!< DMA request enable for transmission */
  85. #define USART_CTL2_RTSEN BIT(8) /*!< RTS enable */
  86. #define USART_CTL2_CTSEN BIT(9) /*!< CTS enable */
  87. #define USART_CTL2_CTSIE BIT(10) /*!< CTS interrupt enable */
  88. #define USART_CTL2_OSB BIT(11) /*!< one sample bit method */
  89. /* USARTx_GP */
  90. #define USART_GP_PSC BITS(0,7) /*!< prescaler value for dividing the system clock */
  91. #define USART_GP_GUAT BITS(8,15) /*!< guard time value in smartcard mode */
  92. /* USARTx_CTL3 */
  93. #define USART_CTL3_RTEN BIT(0) /*!< receiver timeout enable */
  94. #define USART_CTL3_SCRTNUM BITS(1,3) /*!< smartcard auto-retry number */
  95. #define USART_CTL3_RTIE BIT(4) /*!< interrupt enable bit of receive timeout event */
  96. #define USART_CTL3_EBIE BIT(5) /*!< interrupt enable bit of end of block event */
  97. #define USART_CTL3_RINV BIT(8) /*!< RX pin level inversion */
  98. #define USART_CTL3_TINV BIT(9) /*!< TX pin level inversion */
  99. #define USART_CTL3_DINV BIT(10) /*!< data bit level inversion */
  100. #define USART_CTL3_MSBF BIT(11) /*!< most significant bit first */
  101. /* USARTx_RT */
  102. #define USART_RT_RT BITS(0,23) /*!< receiver timeout threshold */
  103. #define USART_RT_BL BITS(24,31) /*!< block length */
  104. /* USARTx_STAT1 */
  105. #define USART_STAT1_RTF BIT(11) /*!< receiver timeout flag */
  106. #define USART_STAT1_EBF BIT(12) /*!< end of block flag */
  107. #define USART_STAT1_BSY BIT(16) /*!< busy flag */
  108. /* USARTx_CHC */
  109. #define USART_CHC_HCM BIT(0) /*!< hardware flow control coherence mode */
  110. #define USART_CHC_PCM BIT(1) /*!< parity check coherence mode */
  111. #define USART_CHC_BCM BIT(2) /*!< break frame coherence mode */
  112. #define USART_CHC_EPERR BIT(8) /*!< early parity error flag */
  113. /* constants definitions */
  114. /* define the USART bit position and its register index offset */
  115. #define USART_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))
  116. #define USART_REG_VAL(usartx, offset) (REG32((usartx) + ((uint32_t)(offset) >> 6)))
  117. #define USART_BIT_POS(val) ((uint32_t)(val) & 0x1FU)
  118. /* register offset */
  119. #define STAT0_REG_OFFSET 0x00U /*!< STAT0 register offset */
  120. #define STAT1_REG_OFFSET 0x88U /*!< STAT1 register offset */
  121. #define CHC_REG_OFFSET 0xC0U /*!< CHC register offset */
  122. #define CTL0_REG_OFFSET 0x0CU /*!< CTL0 register offset */
  123. #define CTL1_REG_OFFSET 0x10U /*!< CTL1 register offset */
  124. #define CTL2_REG_OFFSET 0x14U /*!< CTL2 register offset */
  125. #define CTL3_REG_OFFSET 0x80U /*!< CTL2 register offset */
  126. /* USART flags */
  127. typedef enum
  128. {
  129. /* flags in STAT0 register */
  130. USART_FLAG_CTSF = USART_REGIDX_BIT(STAT0_REG_OFFSET, 9U), /*!< CTS change flag */
  131. USART_FLAG_LBDF = USART_REGIDX_BIT(STAT0_REG_OFFSET, 8U), /*!< LIN break detected flag */
  132. USART_FLAG_TBE = USART_REGIDX_BIT(STAT0_REG_OFFSET, 7U), /*!< transmit data buffer empty */
  133. USART_FLAG_TC = USART_REGIDX_BIT(STAT0_REG_OFFSET, 6U), /*!< transmission complete */
  134. USART_FLAG_RBNE = USART_REGIDX_BIT(STAT0_REG_OFFSET, 5U), /*!< read data buffer not empty */
  135. USART_FLAG_IDLEF = USART_REGIDX_BIT(STAT0_REG_OFFSET, 4U), /*!< IDLE frame detected flag */
  136. USART_FLAG_ORERR = USART_REGIDX_BIT(STAT0_REG_OFFSET, 3U), /*!< overrun error */
  137. USART_FLAG_NERR = USART_REGIDX_BIT(STAT0_REG_OFFSET, 2U), /*!< noise error flag */
  138. USART_FLAG_FERR = USART_REGIDX_BIT(STAT0_REG_OFFSET, 1U), /*!< frame error flag */
  139. USART_FLAG_PERR = USART_REGIDX_BIT(STAT0_REG_OFFSET, 0U), /*!< parity error flag */
  140. /* flags in STAT1 register */
  141. USART_FLAG_BSY = USART_REGIDX_BIT(STAT1_REG_OFFSET, 16U), /*!< busy flag */
  142. USART_FLAG_EBF = USART_REGIDX_BIT(STAT1_REG_OFFSET, 12U), /*!< end of block flag */
  143. USART_FLAG_RTF = USART_REGIDX_BIT(STAT1_REG_OFFSET, 11U), /*!< receiver timeout flag */
  144. /* flags in CHC register */
  145. USART_FLAG_EPERR = USART_REGIDX_BIT(CHC_REG_OFFSET, 8U), /*!< early parity error flag */
  146. }usart_flag_enum;
  147. /* USART interrupt flags */
  148. typedef enum
  149. {
  150. /* interrupt flags in CTL0 register */
  151. USART_INT_PERRIE = USART_REGIDX_BIT(CTL0_REG_OFFSET, 8U), /*!< parity error interrupt */
  152. USART_INT_TBEIE = USART_REGIDX_BIT(CTL0_REG_OFFSET, 7U), /*!< transmitter buffer empty interrupt */
  153. USART_INT_TCIE = USART_REGIDX_BIT(CTL0_REG_OFFSET, 6U), /*!< transmission complete interrupt */
  154. USART_INT_RBNEIE = USART_REGIDX_BIT(CTL0_REG_OFFSET, 5U), /*!< read data buffer not empty interrupt and overrun error interrupt */
  155. USART_INT_IDLEIE = USART_REGIDX_BIT(CTL0_REG_OFFSET, 4U), /*!< IDLE line detected interrupt */
  156. /* interrupt flags in CTL1 register */
  157. USART_INT_LBDIE = USART_REGIDX_BIT(CTL1_REG_OFFSET, 6U), /*!< LIN break detected interrupt */
  158. /* interrupt flags in CTL2 register */
  159. USART_INT_CTSIE = USART_REGIDX_BIT(CTL2_REG_OFFSET, 10U), /*!< CTS interrupt */
  160. USART_INT_ERRIE = USART_REGIDX_BIT(CTL2_REG_OFFSET, 0U), /*!< error interrupt */
  161. /* interrupt flags in CTL3 register */
  162. USART_INT_EBIE = USART_REGIDX_BIT(CTL3_REG_OFFSET, 5U), /*!< interrupt enable bit of end of block event */
  163. USART_INT_RTIE = USART_REGIDX_BIT(CTL3_REG_OFFSET, 4U), /*!< interrupt enable bit of receive timeout event */
  164. }usart_interrupt_flag_enum;
  165. /* USART invert configure */
  166. typedef enum
  167. {
  168. /* data bit level inversion */
  169. USART_DINV_ENABLE, /*!< data bit level inversion */
  170. USART_DINV_DISABLE, /*!< data bit level not inversion */
  171. /* TX pin level inversion */
  172. USART_TXPIN_ENABLE, /*!< TX pin level inversion */
  173. USART_TXPIN_DISABLE, /*!< TX pin level not inversion */
  174. /* RX pin level inversion */
  175. USART_RXPIN_ENABLE, /*!< RX pin level inversion */
  176. USART_RXPIN_DISABLE, /*!< RX pin level not inversion */
  177. }usart_invert_enum;
  178. /* USART receiver configure */
  179. #define CTL0_REN(regval) (BIT(2) & ((uint32_t)(regval) << 2))
  180. #define USART_RECEIVE_ENABLE CTL0_REN(1) /*!< enable receiver */
  181. #define USART_RECEIVE_DISABLE CTL0_REN(0) /*!< disable receiver */
  182. /* USART transmitter configure */
  183. #define CTL0_TEN(regval) (BIT(3) & ((uint32_t)(regval) << 3))
  184. #define USART_TRANSMIT_ENABLE CTL0_TEN(1) /*!< enable transmitter */
  185. #define USART_TRANSMIT_DISABLE CTL0_TEN(0) /*!< disable transmitter */
  186. /* USART parity bits definitions */
  187. #define CTL0_PM(regval) (BITS(9,10) & ((uint32_t)(regval) << 9))
  188. #define USART_PM_NONE CTL0_PM(0) /*!< no parity */
  189. #define USART_PM_ODD CTL0_PM(2) /*!< odd parity */
  190. #define USART_PM_EVEN CTL0_PM(3) /*!< even parity */
  191. /* USART wakeup method in mute mode */
  192. #define CTL0_WM(regval) (BIT(11) & ((uint32_t)(regval) << 11))
  193. #define USART_WM_IDLE CTL0_WM(0) /*!< idle Line */
  194. #define USART_WM_ADDR CTL0_WM(1) /*!< address mask */
  195. /* USART word length definitions */
  196. #define CTL0_WL(regval) (BIT(12) & ((uint32_t)(regval) << 12))
  197. #define USART_WL_8BIT CTL0_WL(0) /*!< 8 bits */
  198. #define USART_WL_9BIT CTL0_WL(1) /*!< 9 bits */
  199. /* USART oversampling mode definitions */
  200. #define CTL0_OVSMOD(regval) (BIT(15) & ((uint32_t)(regval) << 15))
  201. #define USART_OVSMOD_16 CTL0_OVSMOD(0) /*!< 16 bits */
  202. #define USART_OVSMOD_8 CTL0_OVSMOD(1) /*!< 8 bits */
  203. /* USART stop bits definitions */
  204. #define CTL1_STB(regval) (BITS(12,13) & ((uint32_t)(regval) << 12))
  205. #define USART_STB_1BIT CTL1_STB(0) /*!< 1 bit */
  206. #define USART_STB_0_5BIT CTL1_STB(1) /*!< 0.5 bit */
  207. #define USART_STB_2BIT CTL1_STB(2) /*!< 2 bits */
  208. #define USART_STB_1_5BIT CTL1_STB(3) /*!< 1.5 bits */
  209. /* USART LIN break frame length */
  210. #define CTL1_LBLEN(regval) (BIT(5) & ((uint32_t)(regval) << 5))
  211. #define USART_LBLEN_10B CTL1_LBLEN(0) /*!< 10 bits */
  212. #define USART_LBLEN_11B CTL1_LBLEN(1) /*!< 11 bits */
  213. /* USART CK length */
  214. #define CTL1_CLEN(regval) (BIT(8) & ((uint32_t)(regval) << 8))
  215. #define USART_CLEN_NONE CTL1_CLEN(0) /*!< there are 7 CK pulses for an 8 bit frame and 8 CK pulses for a 9 bit frame */
  216. #define USART_CLEN_EN CTL1_CLEN(1) /*!< there are 8 CK pulses for an 8 bit frame and 9 CK pulses for a 9 bit frame */
  217. /* USART clock phase */
  218. #define CTL1_CPH(regval) (BIT(9) & ((uint32_t)(regval) << 9))
  219. #define USART_CPH_1CK CTL1_CPH(0) /*!< first clock transition is the first data capture edge */
  220. #define USART_CPH_2CK CTL1_CPH(1) /*!< second clock transition is the first data capture edge */
  221. /* USART clock polarity */
  222. #define CTL1_CPL(regval) (BIT(10) & ((uint32_t)(regval) << 10))
  223. #define USART_CPL_LOW CTL1_CPL(0) /*!< steady low value on CK pin */
  224. #define USART_CPL_HIGH CTL1_CPL(1) /*!< steady high value on CK pin */
  225. /* USART DMA request for receive configure */
  226. #define CLT2_DENR(regval) (BIT(6) & ((uint32_t)(regval) << 6))
  227. #define USART_DENR_ENABLE CLT2_DENR(1) /*!< DMA request enable for reception */
  228. #define USART_DENR_DISABLE CLT2_DENR(0) /*!< DMA request disable for reception */
  229. /* USART DMA request for transmission configure */
  230. #define CLT2_DENT(regval) (BIT(7) & ((uint32_t)(regval) << 7))
  231. #define USART_DENT_ENABLE CLT2_DENT(1) /*!< DMA request enable for transmission */
  232. #define USART_DENT_DISABLE CLT2_DENT(0) /*!< DMA request disable for transmission */
  233. /* USART RTS configure */
  234. #define CLT2_RTSEN(regval) (BIT(8) & ((uint32_t)(regval) << 8))
  235. #define USART_RTS_ENABLE CLT2_RTSEN(1) /*!< RTS enable */
  236. #define USART_RTS_DISABLE CLT2_RTSEN(0) /*!< RTS disable */
  237. /* USART CTS configure */
  238. #define CLT2_CTSEN(regval) (BIT(9) & ((uint32_t)(regval) << 9))
  239. #define USART_CTS_ENABLE CLT2_CTSEN(1) /*!< CTS enable */
  240. #define USART_CTS_DISABLE CLT2_CTSEN(0) /*!< CTS disable */
  241. /* USART one sample bit method configure */
  242. #define CTL2_OSB(regval) (BIT(11) & ((uint32_t)(regval) << 11))
  243. #define USART_OSB_1bit CTL2_OSB(1) /*!< 1 bit */
  244. #define USART_OSB_3bit CTL2_OSB(0) /*!< 3 bits */
  245. /* USART IrDA low-power enable */
  246. #define CTL2_IRLP(regval) (BIT(2) & ((uint32_t)(regval) << 2))
  247. #define USART_IRLP_LOW CTL2_IRLP(1) /*!< low-power */
  248. #define USART_IRLP_NORMAL CTL2_IRLP(0) /*!< normal */
  249. /* USART data is transmitted/received with the LSB/MSB first */
  250. #define CTL3_MSBF(regval) (BIT(11) & ((uint32_t)(regval) << 11))
  251. #define USART_MSBF_LSB CTL3_MSBF(0) /*!< LSB first */
  252. #define USART_MSBF_MSB CTL3_MSBF(1) /*!< MSB first */
  253. /* break frame coherence mode */
  254. #define CHC_BCM(regval) (BIT(2) & ((uint32_t)(regval) << 2))
  255. #define USART_BCM_NONE CHC_BCM(0) /*!< no parity error is detected */
  256. #define USART_BCM_EN CHC_BCM(1) /*!< parity error is detected */
  257. /* USART parity check coherence mode */
  258. #define CHC_PCM(regval) (BIT(1) & ((uint32_t)(regval) << 1))
  259. #define USART_PCM_NONE CHC_PCM(0) /*!< not check parity */
  260. #define USART_PCM_EN CHC_PCM(1) /*!< check the parity */
  261. /* USART hardware flow control coherence mode */
  262. #define CHC_HCM(regval) (BIT(0) & ((uint32_t)(regval) << 0))
  263. #define USART_HCM_NONE CHC_HCM(0) /*!< nRTS signal equals to the rxne status register */
  264. #define USART_HCM_EN CHC_HCM(1) /*!< nRTS signal is set when the last data bit has been sampled */
  265. /* interrupt enable in USART_CTL0 */
  266. #define USART_INTEN_PERRIE ((uint32_t)0x10000100U) /*!< parity error interrupt */
  267. #define USART_INTEN_TBEIE ((uint32_t)0x10000080U) /*!< transmitter buffer empty interrupt */
  268. #define USART_INTEN_TCIE ((uint32_t)0x10000040U) /*!< transmission complete interrupt */
  269. #define USART_INTEN_RBNEIE ((uint32_t)0x10000020U) /*!< read data buffer not empty interrupt and overrun error interrupt */
  270. #define USART_INTEN_IDLEIE ((uint32_t)0x10000010U) /*!< IDLE line detected interrupt */
  271. /* interrupt enable flag in USART_CTL1 */
  272. #define USART_INTEN_LBDIE ((uint32_t)0x20000040U) /*!< LIN break detected interrupt */
  273. /* interrupt enable flag in USART_CTL2 */
  274. #define USART_INTEN_ERRIE ((uint32_t)0x40000001U) /*!< error interrupt */
  275. #define USART_INTEN_CTSIE ((uint32_t)0x40000400U) /*!< CTS interrupt*/
  276. /* interrupt enable flag in USART_CTL3 */
  277. #define USART_INTEN_RTIE ((uint32_t)0x80000010U) /*!< interrupt enable bit of receive timeout event */
  278. #define USART_INTEN_EBIE ((uint32_t)0x80000020U) /*!< interrupt enable bit of end of block event */
  279. #define USART_INTEN_MASK ((uint32_t)0x00000FFFU) /*!< USART interrupt mask */
  280. #define USART_INTS_CTL0 ((uint32_t)0x10000000U) /*!< interrupt in USART_CTL0 */
  281. #define USART_INTS_CTL1 ((uint32_t)0x20000000U) /*!< interrupt in USART_CTL1 */
  282. #define USART_INTS_CTL2 ((uint32_t)0x40000000U) /*!< interrupt in USART_CTL2 */
  283. #define USART_INTS_CTL3 ((uint32_t)0x80000000U) /*!< interrupt in USART_CTL3 */
  284. /* function declarations */
  285. /* initialization functions */
  286. /* reset USART */
  287. void usart_deinit(uint32_t usart_periph);
  288. /* configure usart baud rate value */
  289. void usart_baudrate_set(uint32_t usart_periph, uint32_t baudval);
  290. /* configure usart parity function */
  291. void usart_parity_config(uint32_t usart_periph, uint32_t paritycfg);
  292. /* configure usart word length */
  293. void usart_word_length_set(uint32_t usart_periph, uint32_t wlen);
  294. /* configure usart stop bit length */
  295. void usart_stop_bit_set(uint32_t usart_periph, uint32_t stblen);
  296. /* USART normal mode communication */
  297. /* enable usart */
  298. void usart_enable(uint32_t usart_periph);
  299. /* disable usart */
  300. void usart_disable(uint32_t usart_periph);
  301. /* configure USART transmitter */
  302. void usart_transmit_config(uint32_t usart_periph, uint32_t txconfig);
  303. /* configure USART receiver */
  304. void usart_receive_config(uint32_t usart_periph, uint32_t rxconfig);
  305. /* data is transmitted/received with the LSB/MSB first */
  306. void usart_data_first_config(uint32_t usart_periph, uint32_t msbf);
  307. /* configure USART inverted */
  308. void usart_invert_config(uint32_t usart_periph, usart_invert_enum invertpara);
  309. /* configure the USART oversample mode */
  310. void usart_oversample_config(uint32_t usart_periph, uint32_t oversamp);
  311. /* configure sample bit method */
  312. void usart_sample_bit_config(uint32_t usart_periph, uint32_t obsm);
  313. /* enable receiver timeout */
  314. void usart_receiver_timeout_enable(uint32_t usart_periph);
  315. /* disable receiver timeout */
  316. void usart_receiver_timeout_disable(uint32_t usart_periph);
  317. /* configure receiver timeout threshold */
  318. void usart_receiver_timeout_threshold_config(uint32_t usart_periph, uint32_t rtimeout);
  319. /* USART transmit data function */
  320. void usart_data_transmit(uint32_t usart_periph, uint32_t data);
  321. /* USART receive data function */
  322. uint16_t usart_data_receive(uint32_t usart_periph);
  323. /* multi-processor communication */
  324. /* configure address of the USART */
  325. void usart_address_config(uint32_t usart_periph, uint8_t addr);
  326. /* enable mute mode */
  327. void usart_mute_mode_enable(uint32_t usart_periph);
  328. /* disable mute mode */
  329. void usart_mute_mode_disable(uint32_t usart_periph);
  330. /* configure wakeup method in mute mode */
  331. void usart_mute_mode_wakeup_config(uint32_t usart_periph, uint32_t wmehtod);
  332. /* LIN mode communication */
  333. /* LIN mode enable */
  334. void usart_lin_mode_enable(uint32_t usart_periph);
  335. /* LIN mode disable */
  336. void usart_lin_mode_disable(uint32_t usart_periph);
  337. /* LIN break detection length */
  338. void usart_lin_break_dection_length_config(uint32_t usart_periph, uint32_t lblen);
  339. /* send break frame */
  340. void usart_send_break(uint32_t usart_periph);
  341. /* half-duplex communication */
  342. /* half-duplex enable */
  343. void usart_halfduplex_enable(uint32_t usart_periph);
  344. /* half-duplex disable */
  345. void usart_halfduplex_disable(uint32_t usart_periph);
  346. /* synchronous communication */
  347. /* clock enable */
  348. void usart_synchronous_clock_enable(uint32_t usart_periph);
  349. /* clock disable */
  350. void usart_synchronous_clock_disable(uint32_t usart_periph);
  351. /* configure usart synchronous mode parameters */
  352. void usart_synchronous_clock_config(uint32_t usart_periph, uint32_t clen, uint32_t cph, uint32_t cpl);
  353. /* smartcard communication */
  354. /* guard time value configure in smartcard mode */
  355. void usart_guard_time_config(uint32_t usart_periph,uint32_t gaut);
  356. /* smartcard mode enable */
  357. void usart_smartcard_mode_enable(uint32_t usart_periph);
  358. /* smartcard mode disable */
  359. void usart_smartcard_mode_disable(uint32_t usart_periph);
  360. /* NACK enable in smartcard mode */
  361. void usart_smartcard_mode_nack_enable(uint32_t usart_periph);
  362. /* NACK disable in smartcard mode */
  363. void usart_smartcard_mode_nack_disable(uint32_t usart_periph);
  364. /* smartcard auto-retry number configure */
  365. void usart_smartcard_autoretry_config(uint32_t usart_periph, uint32_t scrtnum);
  366. /* block length configure */
  367. void usart_block_length_config(uint32_t usart_periph, uint32_t bl);
  368. /* IrDA communication */
  369. /* enable IrDA mode */
  370. void usart_irda_mode_enable(uint32_t usart_periph);
  371. /* disable IrDA mode */
  372. void usart_irda_mode_disable(uint32_t usart_periph);
  373. /* configure the peripheral clock prescaler */
  374. void usart_prescaler_config(uint32_t usart_periph, uint32_t psc);
  375. /* configure IrDA low-power */
  376. void usart_irda_lowpower_config(uint32_t usart_periph, uint32_t irlp);
  377. /* hardware flow communication */
  378. /* configure hardware flow control RTS */
  379. void usart_hardware_flow_rts_config(uint32_t usart_periph, uint32_t rtsconfig);
  380. /* configure hardware flow control CTS */
  381. void usart_hardware_flow_cts_config(uint32_t usart_periph, uint32_t ctsconfig);
  382. /* coherence control */
  383. /* configure break frame coherence mode */
  384. void usart_break_frame_coherence_config(uint32_t usart_periph, uint32_t bcm);
  385. /* configure parity check coherence mode */
  386. void usart_parity_check_coherence_config(uint32_t usart_periph, uint32_t pcm);
  387. /* configure hardware flow control coherence mode */
  388. void usart_hardware_flow_coherence_config(uint32_t usart_periph, uint32_t hcm);
  389. /* configure USART DMA for reception */
  390. void usart_dma_receive_config(uint32_t usart_periph, uint32_t dmacmd);
  391. /* configure USART DMA for transmission */
  392. void usart_dma_transmit_config(uint32_t usart_periph, uint32_t dmacmd);
  393. /* flag functions */
  394. /* get flag in STAT0/STAT1/CHC register */
  395. FlagStatus usart_flag_get(uint32_t usart_periph, usart_flag_enum flag);
  396. /* clear flag in STAT0/STAT1/CHC register */
  397. void usart_flag_clear(uint32_t usart_periph, usart_flag_enum flag);
  398. /* interrupt functions */
  399. /* enable USART interrupt */
  400. void usart_interrupt_enable(uint32_t usart_periph, uint32_t int_flag);
  401. /* disable USART interrupt */
  402. void usart_interrupt_disable(uint32_t usart_periph, uint32_t int_flag);
  403. /* get USART interrupt enable flag */
  404. FlagStatus usart_interrupt_flag_get(uint32_t usart_periph, uint32_t int_flag);
  405. #endif /* GD32F4XX_USART_H */