tae32f53xx_ll_uart.h 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873
  1. /**
  2. ******************************************************************************
  3. * @file tae32f53xx_ll_uart.h
  4. * @author MCD Application Team
  5. * @brief Header file for UART LL module.
  6. *
  7. ******************************************************************************
  8. * @attention
  9. *
  10. * <h2><center>&copy; Copyright (c) 2020 Tai-Action.
  11. * All rights reserved.</center></h2>
  12. *
  13. * This software is licensed by Tai-Action under BSD 3-Clause license,
  14. * the "License"; You may not use this file except in compliance with the
  15. * License. You may obtain a copy of the License at:
  16. * opensource.org/licenses/BSD-3-Clause
  17. *
  18. ******************************************************************************
  19. */
  20. /* Define to prevent recursive inclusion -------------------------------------*/
  21. #ifndef _TAE32F53XX_LL_UART_H_
  22. #define _TAE32F53XX_LL_UART_H_
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif /* __cplusplus */
  26. /* Includes ------------------------------------------------------------------*/
  27. #include "tae32f53xx_ll_def.h"
  28. #ifdef LL_DMA_MODULE_ENABLED
  29. #include "tae32f53xx_ll_dma.h"
  30. #endif
  31. /** @addtogroup TAE32F53xx_LL_Driver
  32. * @{
  33. */
  34. /** @addtogroup UART_LL
  35. * @{
  36. */
  37. /* Exported types ------------------------------------------------------------*/
  38. /** @defgroup UART_LL_Exported_Types UART LL Exported Types
  39. * @brief UART LL Exported Types
  40. * @{
  41. */
  42. /**
  43. * @brief UART interrupt ID type definition
  44. */
  45. typedef enum {
  46. UART_INT_ID_MODEM_STA = 0x0, /*!< modem status */
  47. UART_INT_ID_NO_INT_PENDING = 0x1, /*!< no interrupt pending */
  48. UART_INT_ID_TX_EMPTY = 0x2, /*!< THR register empty */
  49. UART_INT_ID_RX_AVL = 0x4, /*!< received data available */
  50. UART_INT_ID_RX_LINE_STA = 0x6, /*!< receiver line status */
  51. UART_INT_ID_BUSY_DET = 0x7, /*!< busy detect */
  52. UART_INT_ID_CHAR_TIMEOUT = 0xc, /*!< character timeout */
  53. } UART_IntIdETypeDef;
  54. /**
  55. * @brief UART data length type definition
  56. */
  57. typedef enum {
  58. UART_DAT_LEN_5b = 0, /*!< Data length 5bits */
  59. UART_DAT_LEN_6b = 1, /*!< Data length 6bits */
  60. UART_DAT_LEN_7b = 2, /*!< Data length 7bits */
  61. UART_DAT_LEN_8b = 3, /*!< Data length 8bits */
  62. UART_DAT_LEN_9b = 4, /*!< Data length 9bits */
  63. } UART_DatLenETypeDef;
  64. /**
  65. * @brief UART stop length type definition
  66. */
  67. typedef enum {
  68. UART_STOP_LEN_1b, /*!< Stop length 1bit */
  69. UART_STOP_LEN_1b5, /*!< Stop length 1.5bit */
  70. UART_STOP_LEN_2b, /*!< Stop length 2bits */
  71. } UART_StopLenETypeDef;
  72. /**
  73. * @brief UART parity type definition
  74. */
  75. typedef enum {
  76. UART_PARITY_NO, /*!< Parity no */
  77. UART_PARITY_ODD, /*!< Parity odd */
  78. UART_PARITY_EVEN, /*!< Parity even */
  79. } UART_ParityETypeDef;
  80. /**
  81. * @brief UART tx empty trigger level type definition
  82. */
  83. typedef enum {
  84. UART_TX_EMPTY_TRI_LVL_EMPTY = UART_TX_FIFO_TRIG_EMPTY, /*!< tx empty trigger level empty */
  85. UART_TX_EMPTY_TRI_LVL_2CAHR = UART_TX_FIFO_TRIG_2CHAR, /*!< tx empty trigger level 2char */
  86. UART_TX_EMPTY_TRI_LVL_QUARTER = UART_TX_FIFO_TRIG_QUARTER, /*!< tx empty trigger level quarter */
  87. UART_TX_EMPTY_TRI_LVL_HALF = UART_TX_FIFO_TRIG_HALF, /*!< tx empty trigger level half */
  88. } UART_TxEmptyTriLvlETypeDef;
  89. /**
  90. * @brief UART rx available trigger level type definition
  91. */
  92. typedef enum {
  93. UART_RX_AVL_TRI_LVL_1CHAR = UART_RX_FIFO_TRIG_1CHAR, /*!< rx available trigger level 1char */
  94. UART_RX_AVL_TRI_LVL_QUARTER = UART_RX_FIFO_TRIG_QUARTER, /*!< rx available trigger level quarter */
  95. UART_RX_AVL_TRI_LVL_HALF = UART_RX_FIFO_TRIG_HALF, /*!< rx available trigger level half */
  96. UART_RX_AVL_TRI_LVL_FULL_LESS_2 = UART_RX_FIFO_TRIG_2LESS_FULL, /*!< rx available trigger level full less 2 */
  97. } UART_RxAvlTriLvlETypeDef;
  98. /**
  99. * @brief UART DE polarity type definition
  100. */
  101. typedef enum {
  102. UART_DE_POL_ACT_LOW, /*!< DE polarity active low */
  103. UART_DE_POL_ACT_HIGH, /*!< DE polarity active high */
  104. } UART_DePolETypeDef;
  105. /**
  106. * @brief UART Init Structure definition
  107. */
  108. typedef struct __UART_InitTypeDef {
  109. uint32_t baudrate; /*!< baudrate */
  110. UART_DatLenETypeDef dat_len; /*!< data length */
  111. UART_StopLenETypeDef stop_len; /*!< stop length */
  112. UART_ParityETypeDef parity; /*!< parity */
  113. UART_TxEmptyTriLvlETypeDef tx_tl; /*!< tx empty trigger level */
  114. UART_RxAvlTriLvlETypeDef rx_tl; /*!< rx available trigger level */
  115. bool U9BAddrMatchMode_Enable; /*!< 9_bit addr match enable */
  116. uint8_t U9BRxAddress; /*!< 9_bit Receive addr */
  117. } UART_InitTypeDef;
  118. /**
  119. * @brief UART RS485 Mode Config Structure definition
  120. */
  121. typedef struct __UART_Rs485CfgTypeDef {
  122. bool de_en; /*!< DE Singal Enable control */
  123. uint8_t de_assert_time; /*!< Driver enable assertion time */
  124. uint8_t de_deassert_time; /*!< Driver enable de-assertion time */
  125. UART_DePolETypeDef de_polarity; /*!< DE Singal Polarity */
  126. } UART_Rs485CfgTypeDef;
  127. /**
  128. * @brief UART DMA Status
  129. */
  130. typedef enum {
  131. UART_DMA_STATE_RESET = 0, /*!< DMA State Reset: not yet initialized or disabled */
  132. UART_DMA_STATE_READY, /*!< DMA State Ready: initialized and ready for use */
  133. UART_DMA_STATE_BUSY, /*!< DMA State Busy: process is ongoing */
  134. UART_DMA_STATE_ERROR, /*!< DMA State Error: process is Error */
  135. UART_DMA_STATE_FINISH, /*!< DMA State Finish: process has been finished */
  136. } UART_DMAStatusTypeDef;
  137. /**
  138. * @brief I2C frame definition
  139. */
  140. typedef struct __UART_FrameTypeDef {
  141. UART_TypeDef *Instance; /*!< UART Reg base address */
  142. uint8_t *buf; /*!< buffer pointer */
  143. uint16_t buf_len; /*!< buffer length */
  144. #ifdef LL_DMA_MODULE_ENABLED
  145. DMA_ChannelETypeDef dma_tx_ch; /*!< UART Tx DMA Channel */
  146. DMA_ChannelETypeDef dma_rx_ch; /*!< UART Rx DMA Channel */
  147. #endif
  148. UART_DMAStatusTypeDef TXdma_status; /*!< UART DMA status */
  149. UART_DMAStatusTypeDef RXdma_status; /*!< UART DMA status */
  150. } UART_DMAHandleTypeDef;
  151. /**
  152. * @}
  153. */
  154. /* Exported constants --------------------------------------------------------*/
  155. /* Exported macro ------------------------------------------------------------*/
  156. /** @defgroup UART_LL_Exported_Macros UART LL Exported Macros
  157. * @brief UART LL Exported Macros
  158. * @{
  159. */
  160. /**
  161. * @brief RX buffer 8bits read
  162. * @param __UART__ Specifies UART peripheral
  163. * @return 8bits read value
  164. */
  165. #define __LL_UART_RxBuf8bits_Read(__UART__) (READ_BIT((__UART__)->RBR, UART_RBR_LSB_8bits_Msk))
  166. /**
  167. * @brief RX buffer 9bits read
  168. * @param __UART__ Specifies UART peripheral
  169. * @return 9bits read value
  170. */
  171. #define __LL_UART_RxBuf9bits_Read(__UART__) (READ_BIT((__UART__)->RBR, UART_RBR_9bits_Msk))
  172. /**
  173. * @brief TX buffer 8bits write
  174. * @param __UART__ Specifies UART peripheral
  175. * @param val write value
  176. * @return None
  177. */
  178. #define __LL_UART_TxBuf8bits_Write(__UART__, val) \
  179. MODIFY_REG((__UART__)->THR, UART_THR_LSB_8bits_Msk, (((val) & 0xffUL) << UART_THR_LSB_8bits_Pos))
  180. /**
  181. * @brief TX buffer 9bits write
  182. * @param __UART__ Specifies UART peripheral
  183. * @param val write value
  184. * @return None
  185. */
  186. #define __LL_UART_TxBuf9bits_Write(__UART__, val) \
  187. MODIFY_REG((__UART__)->THR, UART_THR_9bits_Msk, (((val) & 0x1ffUL) << UART_THR_LSB_8bits_Pos))
  188. /**
  189. * @brief divisor latch low wirte
  190. * @param __UART__ Specifies UART peripheral
  191. * @param val wirte value
  192. * @return None
  193. */
  194. #define __LL_UART_DivLatchLow_Write(__UART__, val) WRITE_REG((__UART__)->DLL, (val & UART_DLL_DLL_Msk))
  195. /**
  196. * @brief divisor latch high wirte
  197. * @param __UART__ Specifies UART peripheral
  198. * @param val wirte value
  199. * @return None
  200. */
  201. #define __LL_UART_DivLatchHigh_Write(__UART__, val) WRITE_REG((__UART__)->DLH, (val & UART_DLH_DLH_Msk))
  202. /**
  203. * @brief programmable THRE interrupt enable
  204. * @param __UART__ Specifies UART peripheral
  205. * @return None
  206. */
  207. #define __LL_UART_THRE_INT_En(__UART__) SET_BIT((__UART__)->IER, UART_IER_PTIME_Msk)
  208. /**
  209. * @brief programmable THRE interrupt disable
  210. * @param __UART__ Specifies UART peripheral
  211. * @return None
  212. */
  213. #define __LL_UART_THRE_INT_Dis(__UART__) CLEAR_BIT((__UART__)->IER, UART_IER_PTIME_Msk)
  214. /**
  215. * @brief modem status interrupt enable
  216. * @param __UART__ Specifies UART peripheral
  217. * @return None
  218. */
  219. #define __LL_UART_ModemSta_INT_En(__UART__) SET_BIT((__UART__)->IER, UART_IER_EDSSI_Msk)
  220. /**
  221. * @brief modem status interrupt disable
  222. * @param __UART__ Specifies UART peripheral
  223. * @return None
  224. */
  225. #define __LL_UART_ModemSta_INT_Dis(__UART__) CLEAR_BIT((__UART__)->IER, UART_IER_EDSSI_Msk)
  226. /**
  227. * @brief RX line status interrupt enable
  228. * @param __UART__ Specifies UART peripheral
  229. * @return None
  230. */
  231. #define __LL_UART_RxLineSta_INT_En(__UART__) SET_BIT((__UART__)->IER, UART_IER_ELSI_Msk)
  232. /**
  233. * @brief RX line status interrupt disable
  234. * @param __UART__ Specifies UART peripheral
  235. * @return None
  236. */
  237. #define __LL_UART_RxLineSta_INT_Dis(__UART__) CLEAR_BIT((__UART__)->IER, UART_IER_ELSI_Msk)
  238. /**
  239. * @brief TX holding register empty interrupt enable
  240. * @param __UART__ Specifies UART peripheral
  241. * @return None
  242. */
  243. #define __LL_UART_TxHoldEmpyt_INT_En(__UART__) SET_BIT((__UART__)->IER, UART_IER_ETBEI_Msk)
  244. /**
  245. * @brief TX holding register empty interrupt disable
  246. * @param __UART__ Specifies UART peripheral
  247. * @return None
  248. */
  249. #define __LL_UART_TxHoldEmpyt_INT_Dis(__UART__) CLEAR_BIT((__UART__)->IER, UART_IER_ETBEI_Msk)
  250. /**
  251. * @brief RX data available interrupt enable
  252. * @param __UART__ Specifies UART peripheral
  253. * @return None
  254. */
  255. #define __LL_UART_RxDatAvl_INT_En(__UART__) SET_BIT((__UART__)->IER, UART_IER_ERBFI_Msk)
  256. /**
  257. * @brief RX data available interrupt disable
  258. * @param __UART__ Specifies UART peripheral
  259. * @return None
  260. */
  261. #define __LL_UART_RxDatAvl_INT_Dis(__UART__) CLEAR_BIT((__UART__)->IER, UART_IER_ERBFI_Msk)
  262. /**
  263. * @brief Judge is FIFOs enable or not
  264. * @param __UART__ Specifies UART peripheral
  265. * @retval 0 isn't FIFOs enable
  266. * @retval 3 is FIFOs enable
  267. */
  268. #define __LL_UART_IsFIFOsEn(__UART__) (READ_BIT((__UART__)->IIR, UART_IIR_FIFOSE_Msk) >> UART_IIR_FIFOSE_Pos)
  269. /**
  270. * @brief Interrupt ID get
  271. * @param __UART__ Specifies UART peripheral
  272. * @return Interrupt ID
  273. */
  274. #define __LL_UART_INT_ID_Get(__UART__) (READ_BIT((__UART__)->IIR, UART_IIR_IID_Msk) >> UART_IIR_IID_Pos)
  275. /**
  276. * @brief FCR register write
  277. * @param __UART__ Specifies UART peripheral
  278. * @param val write val
  279. * @return None
  280. */
  281. #define __LL_UART_FCR_Write(__UART__, val) WRITE_REG((__UART__)->FCR, val)
  282. /**
  283. * @brief Divisor latch access set
  284. * @param __UART__ Specifies UART peripheral
  285. * @return None
  286. */
  287. #define __LL_UART_DivLatchAccess_Set(__UART__) SET_BIT((__UART__)->LCR, UART_LCR_DLAB_Msk)
  288. /**
  289. * @brief Divisor latch access clear
  290. * @param __UART__ Specifies UART peripheral
  291. * @return None
  292. */
  293. #define __LL_UART_DivLatchAccess_Clr(__UART__) CLEAR_BIT((__UART__)->LCR, UART_LCR_DLAB_Msk)
  294. /**
  295. * @brief Break control set
  296. * @param __UART__ Specifies UART peripheral
  297. * @return None
  298. */
  299. #define __LL_UART_BreakCtrl_Set(__UART__) SET_BIT((__UART__)->LCR, UART_LCR_BC_Msk)
  300. /**
  301. * @brief Break control clear
  302. * @param __UART__ Specifies UART peripheral
  303. * @return None
  304. */
  305. #define __LL_UART_BreakCtrl_Clr(__UART__) CLEAR_BIT((__UART__)->LCR, UART_LCR_BC_Msk)
  306. /**
  307. * @brief Stick parity set
  308. * @param __UART__ Specifies UART peripheral
  309. * @return None
  310. */
  311. #define __LL_UART_StickParity_Set(__UART__) SET_BIT((__UART__)->LCR, UART_LCR_Stick_Parity_Msk)
  312. /**
  313. * @brief Stick parity clear
  314. * @param __UART__ Specifies UART peripheral
  315. * @return None
  316. */
  317. #define __LL_UART_StickParity_Clr(__UART__) CLEAR_BIT((__UART__)->LCR, UART_LCR_Stick_Parity_Msk)
  318. /**
  319. * @brief Even parity set
  320. * @param __UART__ Specifies UART peripheral
  321. * @return None
  322. */
  323. #define __LL_UART_EvenParity_Set(__UART__) SET_BIT((__UART__)->LCR, UART_LCR_EPS_Msk)
  324. /**
  325. * @brief Even parity clear
  326. * @param __UART__ Specifies UART peripheral
  327. * @return None
  328. */
  329. #define __LL_UART_EvenParity_Clr(__UART__) CLEAR_BIT((__UART__)->LCR, UART_LCR_EPS_Msk)
  330. /**
  331. * @brief Parity enable
  332. * @param __UART__ Specifies UART peripheral
  333. * @return None
  334. */
  335. #define __LL_UART_Parity_En(__UART__) SET_BIT((__UART__)->LCR, UART_LCR_PEN_Msk)
  336. /**
  337. * @brief Parity disable
  338. * @param __UART__ Specifies UART peripheral
  339. * @return None
  340. */
  341. #define __LL_UART_Parity_Dis(__UART__) CLEAR_BIT((__UART__)->LCR, UART_LCR_PEN_Msk)
  342. /**
  343. * @brief Judge parity is enable or not
  344. * @param __UART__ Specifies UART peripheral
  345. * @retval 0 Parity isn't enable
  346. * @retval 1 Parity is enable
  347. */
  348. #define __LL_UART_IsParityEn(__UART__) (READ_BIT((__UART__)->LCR, UART_LCR_PEN_Msk) >> UART_LCR_PEN_Pos)
  349. /**
  350. * @brief Stop 1bit set
  351. * @param __UART__ Specifies UART peripheral
  352. * @return None
  353. */
  354. #define __LL_UART_Stop1Bit_Set(__UART__) CLEAR_BIT((__UART__)->LCR, UART_LCR_STOP_Msk)
  355. /**
  356. * @brief Stop 2bits set
  357. * @param __UART__ Specifies UART peripheral
  358. * @return None
  359. */
  360. #define __LL_UART_Stop2bits_Set(__UART__) SET_BIT((__UART__)->LCR, UART_LCR_STOP_Msk)
  361. /**
  362. * @brief Data length select
  363. * @param __UART__ Specifies UART peripheral
  364. * @param val select value
  365. * @return None
  366. */
  367. #define __LL_UART_DatLen_Sel(__UART__, val) MODIFY_REG((__UART__)->LCR, UART_LCR_DLS_Msk, ((val & 0x3UL) << UART_LCR_DLS_Pos))
  368. /**
  369. * @brief Judge is character address or not
  370. * @param __UART__ Specifies UART peripheral
  371. * @retval 0 isn't character address
  372. * @retval 1 is character address
  373. */
  374. #define __LL_UART_IsCharacterAddr(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_ADDR_RCVD_Msk) >> UART_LSR_ADDR_RCVD_Pos)
  375. /**
  376. * @brief Judge is RX FIFO error or not
  377. * @param __UART__ Specifies UART peripheral
  378. * @retval 0 isn't RX FIFO error
  379. * @retval 1 is RX FIFO error
  380. */
  381. #define __LL_UART_IsRxFIFOErr(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_RFE_Msk) >> UART_LSR_RFE_Pos)
  382. /**
  383. * @brief Judge is TX empty or not
  384. * @param __UART__ Specifies UART peripheral
  385. * @retval 0 isn't TX empty
  386. * @retval 1 is TX empty
  387. */
  388. #define __LL_UART_IsTxEmpty(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_TEMT_Msk) >> UART_LSR_TEMT_Pos)
  389. /**
  390. * @brief Judge is TX hold register empty or not
  391. * @param __UART__ Specifies UART peripheral
  392. * @retval 0 isn't TX hold register empty
  393. * @retval 1 is TX hold register empty
  394. */
  395. #define __LL_UART_IsTxHoldRegEmpty(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_THRE_Msk) >> UART_LSR_THRE_Pos)
  396. /**
  397. * @brief Judge is break interrupt or not
  398. * @param __UART__ Specifies UART peripheral
  399. * @retval 0 isn't break interrupt
  400. * @retval 1 is break interrupt
  401. */
  402. #define __LL_UART_IsBreakInt(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_BI_Msk) >> UART_LSR_BI_Pos)
  403. /**
  404. * @brief Judge is frame error or not
  405. * @param __UART__ Specifies UART peripheral
  406. * @retval 0 isn't frame error
  407. * @retval 1 is frame error
  408. */
  409. #define __LL_UART_IsFrameErr(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_FE_Msk) >> UART_LSR_FE_Pos)
  410. /**
  411. * @brief Judge is parity error or not
  412. * @param __UART__ Specifies UART peripheral
  413. * @retval 0 isn't parity error
  414. * @retval 1 is parity error
  415. */
  416. #define __LL_UART_IsParityErr(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_PE_Msk) >> UART_LSR_PE_Pos)
  417. /**
  418. * @brief Judge is overrun error or not
  419. * @param __UART__ Specifies UART peripheral
  420. * @retval 0 isn't overrun error
  421. * @retval 1 is overrun error
  422. */
  423. #define __LL_UART_IsOverrunErr(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_OE_Msk) >> UART_LSR_OE_Pos)
  424. /**
  425. * @brief Judge is data ready or not
  426. * @param __UART__ Specifies UART peripheral
  427. * @retval 0 isn't data ready
  428. * @retval 1 is data ready
  429. */
  430. #define __LL_UART_IsDatReady(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_DR_Msk) >> UART_LSR_DR_Pos)
  431. /**
  432. * @brief Line status get
  433. * @param __UART__ Specifies UART peripheral
  434. * @return Line status
  435. */
  436. #define __LL_UART_LineSta_Get(__UART__) READ_BIT((__UART__)->LSR, UART_LSR_ALL_BIT_Msk)
  437. /**
  438. * @brief Judge is RXFIFO full or not
  439. * @param __UART__ Specifies UART peripheral
  440. * @retval 0 isn't RXFIFO full
  441. * @retval 1 is RXFIFO full
  442. */
  443. #define __LL_UART_IsRxFIFOFull(__UART__) (READ_BIT((__UART__)->USR, UART_USR_RFF_Msk) >> UART_USR_RFF_Pos)
  444. /**
  445. * @brief Judge is RXFIFO not empty or not
  446. * @param __UART__ Specifies UART peripheral
  447. * @retval 0 RXFIFO is empty
  448. * @retval 1 RXFIFO is not empty
  449. */
  450. #define __LL_UART_IsRxFIFONotEmpty(__UART__) (READ_BIT((__UART__)->USR, UART_USR_RFNE_Msk) >> UART_USR_RFNE_Pos)
  451. /**
  452. * @brief Judge is TXFIFO empty or not
  453. * @param __UART__ Specifies UART peripheral
  454. * @retval 0 TXFIFO is not empty
  455. * @retval 1 TXFIFO is empty
  456. */
  457. #define __LL_UART_IsTxFIFOEmpty(__UART__) (READ_BIT((__UART__)->USR, UART_USR_TFE_Msk) >> UART_USR_TFE_Pos)
  458. /**
  459. * @brief Judge is TXFIFO not full or not
  460. * @param __UART__ Specifies UART peripheral
  461. * @retval 0 TXFIFO is full
  462. * @retval 1 TXFIFO is not full
  463. */
  464. #define __LL_UART_IsTxFIFONotFull(__UART__) (READ_BIT((__UART__)->USR, UART_USR_TFNF_Msk) >> UART_USR_TFNF_Pos)
  465. /**
  466. * @brief TXFIFO level get
  467. * @param __UART__ Specifies UART peripheral
  468. * @return TXFIFO level
  469. */
  470. #define __LL_UART_TxFIFOLevel_Get(__UART__) (READ_BIT((__UART__)->TFL, UART_TFL_TFL_Msk) >> UART_TFL_TFL_Pos)
  471. /**
  472. * @brief RXFIFO level get
  473. * @param __UART__ Specifies UART peripheral
  474. * @return RXFIFO level
  475. */
  476. #define __LL_UART_RxFIFOLevel_Get(__UART__) (READ_BIT((__UART__)->RFL, UART_RFL_RFL_Msk) >> UART_RFL_RFL_Pos)
  477. /**
  478. * @brief TX halt enable
  479. * @param __UART__ Specifies UART peripheral
  480. * @return None
  481. */
  482. #define __LL_UART_TxHalt_En(__UART__) SET_BIT((__UART__)->HTX, UART_HTX_HTX_Msk)
  483. /**
  484. * @brief TX halt disable
  485. * @param __UART__ Specifies UART peripheral
  486. * @return None
  487. */
  488. #define __LL_UART_TxHalt_Dis(__UART__) CLEAR_BIT((__UART__)->HTX, UART_HTX_HTX_Msk)
  489. /**
  490. * @brief TX mode set
  491. * @param __UART__ Specifies UART peripheral
  492. * @param mode tx mode
  493. * @return None
  494. */
  495. #define __LL_UART_TxMode_Set(__UART__, mode) MODIFY_REG((__UART__)->TCR, UART_TCR_XFER_MODE_Msk, mode)
  496. /**
  497. * @brief DE signal active high set
  498. * @param __UART__ Specifies UART peripheral
  499. * @return None
  500. */
  501. #define __LL_UART_DE_ActHigh_Set(__UART__) SET_BIT((__UART__)->TCR, UART_TCR_DE_POL_Msk)
  502. /**
  503. * @brief DE signal active low set
  504. * @param __UART__ Specifies UART peripheral
  505. * @return None
  506. */
  507. #define __LL_UART_DE_ActLow_Set(__UART__) CLEAR_BIT((__UART__)->TCR, UART_TCR_DE_POL_Msk)
  508. /**
  509. * @brief RE signal active high set
  510. * @param __UART__ Specifies UART peripheral
  511. * @return None
  512. */
  513. #define __LL_UART_RE_ActHigh_Set(__UART__) SET_BIT((__UART__)->TCR, UART_TCR_RE_POL_Msk)
  514. /**
  515. * @brief RE signal active low set
  516. * @param __UART__ Specifies UART peripheral
  517. * @return None
  518. */
  519. #define __LL_UART_RE_ActLow_Set(__UART__) CLEAR_BIT((__UART__)->TCR, UART_TCR_RE_POL_Msk)
  520. /**
  521. * @brief RS485 mode enable
  522. * @param __UART__ Specifies UART peripheral
  523. * @return None
  524. */
  525. #define __LL_UART_RS485Mode_En(__UART__) SET_BIT((__UART__)->TCR, UART_TCR_RS485_EN_Msk)
  526. /**
  527. * @brief RS485 mode disable
  528. * @param __UART__ Specifies UART peripheral
  529. * @return None
  530. */
  531. #define __LL_UART_RS485Mode_Dis(__UART__) CLEAR_BIT((__UART__)->TCR, UART_TCR_RS485_EN_Msk)
  532. /**
  533. * @brief DE enable
  534. * @param __UART__ Specifies UART peripheral
  535. * @return None
  536. */
  537. #define __LL_UART_DE_En(__UART__) SET_BIT((__UART__)->DE_EN, UART_DE_EN_DE_EN_Msk)
  538. /**
  539. * @brief DE disable
  540. * @param __UART__ Specifies UART peripheral
  541. * @return None
  542. */
  543. #define __LL_UART_DE_Dis(__UART__) CLEAR_BIT((__UART__)->DE_EN, UART_DE_EN_DE_EN_Msk)
  544. /**
  545. * @brief RE enable
  546. * @param __UART__ Specifies UART peripheral
  547. * @return None
  548. */
  549. #define __LL_UART_RE_En(__UART__) SET_BIT((__UART__)->RE_EN, UART_RE_EN_RE_EN_Msk)
  550. /**
  551. * @brief DE deassertion time set
  552. * @param __UART__ Specifies UART peripheral
  553. * @param val set value
  554. * @return None
  555. */
  556. #define __LL_UART_DE_DeAssertTime_Set(__UART__, val) \
  557. MODIFY_REG((__UART__)->DET, UART_DET_DE_DEASSERT_TIME_Msk, ((val & 0xffUL) << UART_DET_DE_DEASSERT_TIME_Pos))
  558. /**
  559. * @brief DE assertion time set
  560. * @param __UART__ Specifies UART peripheral
  561. * @param val set value
  562. * @return None
  563. */
  564. #define __LL_UART_DE_AssertTime_Set(__UART__, val) \
  565. MODIFY_REG((__UART__)->DET, UART_DET_DE_ASSERT_TIME_Msk, ((val & 0xffUL) << UART_DET_DE_ASSERT_TIME_Pos))
  566. /**
  567. * @brief RE to DE turn around time set
  568. * @param __UART__ Specifies UART peripheral
  569. * @param val set value
  570. * @return None
  571. */
  572. #define __LL_UART_REtoDE_TurnAroundTime_Set(__UART__, val) \
  573. MODIFY_REG((__UART__)->TAT, UART_TAT_RE_TO_DE_TIME_Msk, ((val & 0xffffUL) << UART_TAT_RE_TO_DE_TIME_Pos))
  574. /**
  575. * @brief DE to RE turn around time set
  576. * @param __UART__ Specifies UART peripheral
  577. * @param val set value
  578. * @return None
  579. */
  580. #define __LL_UART_DEtoRE_TurnAroundTime_Set(__UART__, val) \
  581. MODIFY_REG((__UART__)->TAT, UART_TAT_DE_TO_RE_TIME_Msk, ((val & 0xffffUL) << UART_TAT_DE_TO_RE_TIME_Pos))
  582. /**
  583. * @brief Divisor latch fraction set
  584. * @param __UART__ Specifies UART peripheral
  585. * @param val set value
  586. * @return None
  587. */
  588. #define __LL_UART_DivLatchFrac_Set(__UART__, val) MODIFY_REG((__UART__)->DLF, UART_DLF_DLF_Msk, ((val & 0xfUL) << UART_DLF_DLF_Pos))
  589. /**
  590. * @brief RAR set
  591. * @param __UART__ Specifies UART peripheral
  592. * @param addr set address
  593. * @return None
  594. */
  595. #define __LL_UART_RAR_Set(__UART__, addr) MODIFY_REG((__UART__)->RAR, UART_RAR_RAR_Msk, ((addr & 0xffUL) << UART_RAR_RAR_Pos))
  596. /**
  597. * @brief TAR set
  598. * @param __UART__ Specifies UART peripheral
  599. * @param addr set address
  600. * @return None
  601. */
  602. #define __LL_UART_TAR_Set(__UART__, addr) MODIFY_REG((__UART__)->TAR, UART_TAR_TAR_Msk, ((addr & 0xffUL) << UART_TAR_TAR_Pos))
  603. /**
  604. * @brief TX mode 9bits set
  605. * @param __UART__ Specifies UART peripheral
  606. * @return None
  607. */
  608. #define __LL_UART_TxMode9bits_Set(__UART__) SET_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_TRANSMIT_MODE_Msk)
  609. /**
  610. * @brief TX mode 8bits set
  611. * @param __UART__ Specifies UART peripheral
  612. * @return None
  613. */
  614. #define __LL_UART_TxMode8bits_Set(__UART__) CLEAR_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_TRANSMIT_MODE_Msk)
  615. /**
  616. * @brief TX mode status get
  617. * @param __UART__ Specifies UART peripheral
  618. * @retval 0 TX mode is 8bits
  619. * @retval 1 TX mode is 9bits
  620. */
  621. #define __LL_UART_TxModeSta_Get(__UART__) \
  622. (READ_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_TRANSMIT_MODE_Msk) >> UART_LCR_EXT_TRANSMIT_MODE_Pos)
  623. /**
  624. * @brief Send address set
  625. * @param __UART__ Specifies UART peripheral
  626. * @return None
  627. */
  628. #define __LL_UART_SendAddr_Start(__UART__) SET_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_SEND_ADDR_Msk)
  629. /**
  630. * @brief Send data set
  631. * @param __UART__ Specifies UART peripheral
  632. * @return None
  633. */
  634. #define __LL_UART_SendDat_Start(__UART__) CLEAR_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_SEND_ADDR_Msk)
  635. /**
  636. * @brief Address match mode enable
  637. * @param __UART__ Specifies UART peripheral
  638. * @return None
  639. */
  640. #define __LL_UART_AddrMatchMode_En(__UART__) SET_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_ADDR_MATCH_Msk)
  641. /**
  642. * @brief Address match mode disable
  643. * @param __UART__ Specifies UART peripheral
  644. * @return None
  645. */
  646. #define __LL_UART_AddrMatchMode_Dis(__UART__) CLEAR_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_ADDR_MATCH_Msk)
  647. /**
  648. * @brief Data length extension 9bits enable
  649. * @param __UART__ Specifies UART peripheral
  650. * @return None
  651. */
  652. #define __LL_UART_DatLen9bitsExt_En(__UART__) SET_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_DLS_E_Msk)
  653. /**
  654. * @brief Data length extension 9bits disable
  655. * @param __UART__ Specifies UART peripheral
  656. * @return None
  657. */
  658. #define __LL_UART_DatLen9bitsExt_Dis(__UART__) CLEAR_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_DLS_E_Msk)
  659. /**
  660. * @brief Judge data length extension 9bits is enable or not
  661. * @param __UART__ Specifies UART peripheral
  662. * @retval 0 Data length extension 9bits isn't enable
  663. * @retval 1 Data length extension 9bits is enable
  664. */
  665. #define __LL_UART_IsDatLen9bitsEn(__UART__) (READ_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_DLS_E_Msk) >> UART_LCR_EXT_DLS_E_Pos)
  666. /**
  667. * @}
  668. */
  669. /* Exported functions --------------------------------------------------------*/
  670. /** @addtogroup UART_LL_Exported_Functions
  671. * @{
  672. */
  673. /** @addtogroup UART_LL_Exported_Functions_Group1
  674. * @{
  675. */
  676. LL_StatusETypeDef LL_UART_Init(UART_TypeDef *Instance, UART_InitTypeDef *Init);
  677. LL_StatusETypeDef LL_UART_DeInit(UART_TypeDef *Instance);
  678. void LL_UART_MspInit(UART_TypeDef *Instance);
  679. void LL_UART_MspDeInit(UART_TypeDef *Instance);
  680. /**
  681. * @}
  682. */
  683. /** @addtogroup UART_LL_Exported_Functions_Group2
  684. * @{
  685. */
  686. LL_StatusETypeDef LL_UART_Transmit_CPU(UART_TypeDef *Instance, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  687. LL_StatusETypeDef LL_UART_Receive_CPU(UART_TypeDef *Instance, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  688. LL_StatusETypeDef LL_UART_Transmit_IT(UART_TypeDef *Instance);
  689. LL_StatusETypeDef LL_UART_Receive_IT(UART_TypeDef *Instance);
  690. #ifdef LL_DMA_MODULE_ENABLED
  691. LL_StatusETypeDef LL_UART_Transmit_DMA(UART_TypeDef *Instance, DMA_UserCfgTypeDef *dma_user_cfg,
  692. UART_DMAHandleTypeDef *huart, uint32_t Timeout);
  693. LL_StatusETypeDef LL_UART_Receive_DMA(UART_TypeDef *Instance, DMA_UserCfgTypeDef *dma_user_cfg,
  694. UART_DMAHandleTypeDef *huart, uint32_t Timeout);
  695. #endif
  696. /**
  697. * @}
  698. */
  699. /** @addtogroup UART_LL_Exported_Functions_Group3
  700. * @{
  701. */
  702. LL_StatusETypeDef LL_Uart_9bit_SendAddress(UART_TypeDef *Instance, uint8_t TxAddr);
  703. LL_StatusETypeDef LL_UART_RS485Cfg(UART_TypeDef *Instance, UART_Rs485CfgTypeDef *cfg);
  704. uint8_t LL_UART_TxFIFOLVL_GET(UART_TypeDef *Instance);
  705. uint8_t LL_UART_RxFIFOLVL_GET(UART_TypeDef *Instance);
  706. /**
  707. * @}
  708. */
  709. /** @addtogroup UART_LL_Exported_Functions_Interrupt
  710. * @{
  711. */
  712. void LL_UART_IRQHandler(UART_TypeDef *Instance);
  713. void LL_UART_ModemStaCallback(UART_TypeDef *Instance);
  714. void LL_UART_TxEmptyCallback(UART_TypeDef *Instance);
  715. void LL_UART_RxAvailableCallback(UART_TypeDef *Instance);
  716. void LL_UART_RxLineStaCallback(UART_TypeDef *Instance);
  717. void LL_UART_BusyDetCallback(UART_TypeDef *Instance);
  718. void LL_UART_CharTimeOutCallback(UART_TypeDef *Instance);
  719. void LL_UART_BreakErrCallback(UART_TypeDef *Instance);
  720. void LL_UART_FrameErrCallback(UART_TypeDef *Instance);
  721. void LL_UART_ParityErrCallback(UART_TypeDef *Instance);
  722. void LL_UART_RxOverrunErrCallback(UART_TypeDef *Instance);
  723. /**
  724. * @}
  725. */
  726. /**
  727. * @}
  728. */
  729. /* Private types -------------------------------------------------------------*/
  730. /* Private variables ---------------------------------------------------------*/
  731. /* Private constants ---------------------------------------------------------*/
  732. /* Private macros ------------------------------------------------------------*/
  733. /* Private functions ---------------------------------------------------------*/
  734. /**
  735. * @}
  736. */
  737. /**
  738. * @}
  739. */
  740. #ifdef __cplusplus
  741. }
  742. #endif /* __cplusplus */
  743. #endif /* _TAE32F53XX_LL_UART_H_ */
  744. /************************* (C) COPYRIGHT Tai-Action *****END OF FILE***********/