nu_uart.h 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777
  1. /**************************************************************************//**
  2. * @file uart.h
  3. * @version V1.00
  4. * @brief N9H30 UART driver header file
  5. *
  6. * SPDX-License-Identifier: Apache-2.0
  7. * @copyright (C) 2015 Nuvoton Technology Corp. All rights reserved.
  8. *****************************************************************************/
  9. #ifndef __NU_UART_H__
  10. #define __NU_UART_H__
  11. #include "N9H30.h"
  12. #ifdef __cplusplus
  13. extern "C"
  14. {
  15. #endif
  16. /** @addtogroup N9H30_Device_Driver N9H30 Device Driver
  17. @{
  18. */
  19. /** @addtogroup N9H30_UART_Driver UART Driver
  20. @{
  21. */
  22. /*-----------------------------------------*/
  23. /* marco, type and constant definitions */
  24. /*-----------------------------------------*/
  25. /// @cond HIDDEN_SYMBOLS
  26. #define UART_NUM 11
  27. #define UARTOFFSET 0x100
  28. /// @endcond HIDDEN_SYMBOLS
  29. /** @addtogroup N9H30_UART_EXPORTED_CONSTANTS UART Exported Constants
  30. @{
  31. */
  32. #define UARTWRITESIZE 100 /*!< UART max. write size */
  33. #define UARTINTMODE 1 /*!< UART interrupt mode */
  34. #define UARTPOLLMODE 0 /*!< UART polling mode */
  35. #define DISABLEALLIER 0 /*!< Disable all interrupt */
  36. /*---------------------------------------------------------------------------------------------------------*/
  37. /* UART channel number */
  38. /*---------------------------------------------------------------------------------------------------------*/
  39. #define ALLCHANNEL 11 /*!< UART ALL channel */
  40. /*---------------------------------------------------------------------------------------------------------*/
  41. /* UA_FCR constants definitions */
  42. /*---------------------------------------------------------------------------------------------------------*/
  43. #define UART_FCR_RFITL_1BYTE (0x0 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 1 bit */
  44. #define UART_FCR_RFITL_4BYTES (0x1 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 4 bits */
  45. #define UART_FCR_RFITL_8BYTES (0x2 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 8 bits */
  46. #define UART_FCR_RFITL_14BYTES (0x3 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 14 bits */
  47. #define UART_FCR_RFITL_30BYTES (0x4 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 30 bits */
  48. #define UART_FCR_RFITL_46BYTES (0x5 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 46 bits */
  49. #define UART_FCR_RFITL_62BYTES (0x6 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 62 bits */
  50. #define UART_FCR_RTS_TRI_LEV_1BYTE (0x0 << UART_FCR_RTS_TRI_LEV_Pos) /*!< UA_FCR setting to set RTS Trigger Level to 1 bit */
  51. #define UART_FCR_RTS_TRI_LEV_4BYTES (0x1 << UART_FCR_RTS_TRI_LEV_Pos) /*!< UA_FCR setting to set RTS Trigger Level to 4 bits */
  52. #define UART_FCR_RTS_TRI_LEV_8BYTES (0x2 << UART_FCR_RTS_TRI_LEV_Pos) /*!< UA_FCR setting to set RTS Trigger Level to 8 bits */
  53. #define UART_FCR_RTS_TRI_LEV_14BYTES (0x3 << UART_FCR_RTS_TRI_LEV_Pos) /*!< UA_FCR setting to set RTS Trigger Level to 14 bits */
  54. #define UART_FCR_RTS_TRI_LEV_30BYTES (0x4 << UART_FCR_RTS_TRI_LEV_Pos) /*!< UA_FCR setting to set RTS Trigger Level to 30 bits */
  55. #define UART_FCR_RTS_TRI_LEV_46BYTES (0x5 << UART_FCR_RTS_TRI_LEV_Pos) /*!< UA_FCR setting to set RTS Trigger Level to 46 bits */
  56. #define UART_FCR_RTS_TRI_LEV_62BYTES (0x6 << UART_FCR_RTS_TRI_LEV_Pos) /*!< UA_FCR setting to set RTS Trigger Level to 62 bits */
  57. /*---------------------------------------------------------------------------------------------------------*/
  58. /* UA_LCR constants definitions */
  59. /*---------------------------------------------------------------------------------------------------------*/
  60. #define UART_WORD_LEN_5 (0) /*!< UA_LCR setting to set UART word length to 5 bits */
  61. #define UART_WORD_LEN_6 (1) /*!< UA_LCR setting to set UART word length to 6 bits */
  62. #define UART_WORD_LEN_7 (2) /*!< UA_LCR setting to set UART word length to 7 bits */
  63. #define UART_WORD_LEN_8 (3) /*!< UA_LCR setting to set UART word length to 8 bits */
  64. #define UART_PARITY_NONE (0x0 << UART_LCR_PBE_Pos) /*!< UA_LCR setting to set UART as no parity */
  65. #define UART_PARITY_ODD (0x1 << UART_LCR_PBE_Pos) /*!< UA_LCR setting to set UART as odd parity */
  66. #define UART_PARITY_EVEN (0x3 << UART_LCR_PBE_Pos) /*!< UA_LCR setting to set UART as even parity */
  67. #define UART_PARITY_STICK (0x8 << UART_LCR_PBE_Pos) /*!< UA_LCR setting to set UART as stick parity */
  68. #define UART_STOP_BIT_1 (0x0 << UART_LCR_NSB_Pos) /*!< UA_LCR setting for one stop bit */
  69. #define UART_STOP_BIT_1_5 (0x1 << UART_LCR_NSB_Pos) /*!< UA_LCR setting for 1.5 stop bit when 5-bit word length */
  70. #define UART_STOP_BIT_2 (0x1 << UART_LCR_NSB_Pos) /*!< UA_LCR setting for two stop bit when 6, 7, 8-bit word length */
  71. /*---------------------------------------------------------------------------------------------------------*/
  72. /* UART RTS LEVEL TRIGGER constants definitions */
  73. /*---------------------------------------------------------------------------------------------------------*/
  74. #define UART_RTS_IS_HIGH_LEV_TRG (0x1 << UART_MCR_LEV_RTS_Pos) /*!< Set RTS is High Level Tigger */
  75. #define UART_RTS_IS_LOW_LEV_TRG (0x0 << UART_MCR_LEV_RTS_Pos) /*!< Set RTS is Low Level Tigger */
  76. /*---------------------------------------------------------------------------------------------------------*/
  77. /* UART CTS LEVEL TRIGGER constants definitions */
  78. /*---------------------------------------------------------------------------------------------------------*/
  79. #define UART_CTS_IS_HIGH_LEV_TRG (0x1 << UART_MSR_LEV_CTS_Pos) /*!< Set CTS is High Level Trigger */
  80. #define UART_CTS_IS_LOW_LEV_TRG (0x0 << UART_MSR_LEV_CTS_Pos) /*!< Set CTS is Low Level Trigger */
  81. /*---------------------------------------------------------------------------------------------------------*/
  82. /* UA_FUNC_SEL constants definitions */
  83. /*---------------------------------------------------------------------------------------------------------*/
  84. #define UART_FUNC_SEL_UART (0x0 << UART_FUN_SEL_FUN_SEL_Pos) /*!< UA_FUNC_SEL setting to set UART Function (Default) */
  85. #define UART_FUNC_SEL_LIN (0x1 << UART_FUN_SEL_FUN_SEL_Pos) /*!< UA_FUNC_SEL setting to set LIN Funciton */
  86. #define UART_FUNC_SEL_IrDA (0x2 << UART_FUN_SEL_FUN_SEL_Pos) /*!< UA_FUNC_SEL setting to set IrDA Function */
  87. #define UART_FUNC_SEL_RS485 (0x3 << UART_FUN_SEL_FUN_SEL_Pos) /*!< UA_FUNC_SEL setting to set RS485 Function */
  88. /*---------------------------------------------------------------------------------------------------------*/
  89. /* UA_LIN_CTL constants definitions */
  90. /*---------------------------------------------------------------------------------------------------------*/
  91. #define UART_LIN_CTL_LINS_EN (0x1UL << UART_LIN_CTL_LINS_EN_Pos) /*!< UA_LIN_CTL setting to set LIN Slave Mode Enable */
  92. #define UART_LIN_CTL_LINS_HDET_EN (0x1UL << UART_LIN_CTL_LINS_HDET_EN_Pos) /*!< UA_LIN_CTL setting to set LIN Slave Header Detection Enable */
  93. #define UART_LIN_CTL_LINS_ARS_EN (0x1UL << UART_LIN_CTL_LINS_ARS_EN_Pos) /*!< UA_LIN_CTL setting to set LIN Slave Automatic Resynchronization Mode Enable */
  94. #define UART_LIN_CTL_LINS_DUM_EN (0x1UL << UART_LIN_CTL_LINS_DUM_EN_Pos) /*!< UA_LIN_CTL setting to set LIN Slave Divider Update Method Enable */
  95. #define UART_LIN_CTL_LIN_WAKE_EN (0x1UL << UART_LIN_CTL_LIN_WAKE_EN_Pos) /*!< UA_LIN_CTL setting to set LIN Wake-Up Mode Enable */
  96. #define UART_LIN_CTL_LIN_SHD (0x1UL << UART_LIN_CTL_LIN_SHD_Pos) /*!< UA_LIN_CTL setting to set LIN TX Send Header Enable */
  97. #define UART_LIN_CTL_LIN_IDPEN (0x1UL << UART_LIN_CTL_LIN_IDPEN_Pos) /*!< UA_LIN_CTL setting to set LIN ID Parity Enable */
  98. #define UART_LIN_CTL_LIN_BKDET_ENN (0x1UL << UART_LIN_CTL_LIN_BKDET_EN_Pos) /*!< UA_LIN_CTL setting to set LIN Break Detection Enable */
  99. #define UART_LIN_CTL_LIN_RX_DIS (0x1UL << UART_LIN_CTL_LIN_RX_DIS_Pos) /*!< UA_LIN_CTL setting to set LIN Receiver Disable */
  100. #define UART_LIN_CTL_BIT_ERR_EN (0x1UL << UART_LIN_CTL_BIT_ERR_EN_Pos) /*!< UA_LIN_CTL setting to set Bit Error Detect Enable */
  101. #define UART_LIN_CTL_LIN_BKFL(x) (((x)-1) << UART_LIN_CTL_LIN_BKFL_Pos) /*!< UA_LIN_CTL setting to set LIN Break Field Length, x = 10 ~ 15, default value is 12 */
  102. #define UART_LIN_CTL_LIN_BS_LEN(x) (((x)-1) << UART_LIN_CTL_LIN_BS_LEN_Pos)/*!< UA_LIN_CTL setting to set LIN Break/Sync Delimiter Length, x = 1 ~ 4 */
  103. #define UART_LIN_CTL_LIN_HEAD_SEL_BREAK (0x0UL << UART_LIN_CTL_LIN_HEAD_SEL_Pos) /*!< UA_LIN_CTL setting to set LIN Header Select to break field */
  104. #define UART_LIN_CTL_LIN_HEAD_SEL_BREAK_SYNC (0x1UL << UART_LIN_CTL_LIN_HEAD_SEL_Pos) /*!< UA_LIN_CTL setting to set LIN Header Select to break field and sync field */
  105. #define UART_LIN_CTL_LIN_HEAD_SEL_BREAK_SYNC_ID (0x2UL << UART_LIN_CTL_LIN_HEAD_SEL_Pos) /*!< UA_LIN_CTL setting to set LIN Header Select to break field, sync field and ID field*/
  106. #define UART_LIN_CTL_LIN_LIN_PID(x) ((x) << UART_LIN_CTL_LIN_PID_Pos) /*!< UA_LIN_CTL setting to set LIN PID value */
  107. /*---------------------------------------------------------------------------------------------------------*/
  108. /* BAUD constants definitions */
  109. /*---------------------------------------------------------------------------------------------------------*/
  110. #define UART_BAUD_MODE0 (0) /*!< Set UART Baudrate Mode is Mode0 */
  111. #define UART_BAUD_MODE2 (UART_BAUD_DIV_X_EN_Msk | UART_BAUD_DIV_X_ONE_Msk) /*!< Set UART Baudrate Mode is Mode2 */
  112. /* UART THR Bit Field Definitions */
  113. #define UART_THR_THR_Pos 0 /*!< UART THR: THR Position */
  114. #define UART_THR_THR_Msk (0xFFul << UART_THR_THR_Pos) /*!< UART THR: THR Mask */
  115. /* UART RBR Bit Field Definitions */
  116. #define UART_RBR_RBR_Pos 0 /*!< UART RBR: RBR Posistion */
  117. #define UART_RBR_RBR_Msk (0xFFul << UART_RBR_RBR_Pos) /*!< UART RBR: RBR Mask */
  118. /* UART IER Bit Field Definitions */
  119. #define UART_IER_DMA_RX_EN_Pos 15 /*!< UART IER: RX DMA Enable Posistion */
  120. #define UART_IER_DMA_RX_EN_Msk (1ul << UART_IER_DMA_RX_EN_Pos) /*!< UART IER: RX DMA Enable Mask */
  121. #define UART_IER_DMA_TX_EN_Pos 14 /*!< UART IER: TX DMA Enable Posistion */
  122. #define UART_IER_DMA_TX_EN_Msk (1ul << UART_IER_DMA_TX_EN_Pos) /*!< UART IER: TX DMA Enable Mask */
  123. #define UART_IER_AUTO_CTS_EN_Pos 13 /*!< UART IER: AUTO_CTS_EN Posistion */
  124. #define UART_IER_AUTO_CTS_EN_Msk (1ul << UART_IER_AUTO_CTS_EN_Pos) /*!< UART IER: AUTO_CTS_EN Mask */
  125. #define UART_IER_AUTO_RTS_EN_Pos 12 /*!< UART IER: AUTO_RTS_EN Posistion */
  126. #define UART_IER_AUTO_RTS_EN_Msk (1ul << UART_IER_AUTO_RTS_EN_Pos) /*!< UART IER: AUTO_RTS_EN Mask */
  127. #define UART_IER_TIME_OUT_EN_Pos 11 /*!< UART IER: TIME_OUT_EN Posistion */
  128. #define UART_IER_TIME_OUT_EN_Msk (1ul << UART_IER_TIME_OUT_EN_Pos) /*!< UART IER: TIME_OUT_EN Mask */
  129. #define UART_IER_LIN_RX_BRK_IEN_Pos 8 /*!< UART IER: LIN_RX_BRK_IEN Posistion */
  130. #define UART_IER_LIN_RX_BRK_IEN_Msk (1ul << UART_IER_LIN_RX_BRK_IEN_Pos) /*!< UART IER: LIN_RX_BRK_IEN Mask */
  131. #define UART_IER_WAKE_EN_Pos 6 /*!< UART IER: WAKE_EN Posistion */
  132. #define UART_IER_WAKE_EN_Msk (1ul << UART_IER_WAKE_EN_Pos) /*!< UART IER: WAKE_EN Mask */
  133. #define UART_IER_BUF_ERR_IEN_Pos 5 /*!< UART IER: BUF_ERR_IEN Posistion */
  134. #define UART_IER_BUF_ERR_IEN_Msk (1ul << UART_IER_BUF_ERR_IEN_Pos) /*!< UART IER: BUF_ERR_IEN Mask */
  135. #define UART_IER_RTO_IEN_Pos 4 /*!< UART IER: RTO_IEN Posistion */
  136. #define UART_IER_RTO_IEN_Msk (1ul << UART_IER_RTO_IEN_Pos) /*!< UART IER: RTO_IEN Mask */
  137. #define UART_IER_MODEM_IEN_Pos 3 /*!< UART IER: MODEM_IEN Posistion */
  138. #define UART_IER_MODEM_IEN_Msk (1ul << UART_IER_MODEM_IEN_Pos) /*!< UART IER: MODEM_IEN Mask */
  139. #define UART_IER_RLS_IEN_Pos 2 /*!< UART IER: RLS_IEN Posistion */
  140. #define UART_IER_RLS_IEN_Msk (1ul << UART_IER_RLS_IEN_Pos) /*!< UART IER: RLS_IEN Mask */
  141. #define UART_IER_THRE_IEN_Pos 1 /*!< UART IER: THRE_IEN Posistion */
  142. #define UART_IER_THRE_IEN_Msk (1ul << UART_IER_THRE_IEN_Pos) /*!< UART IER: THRE_IEN Mask */
  143. #define UART_IER_RDA_IEN_Pos 0 /*!< UART IER: RDA_IEN Position */
  144. #define UART_IER_RDA_IEN_Msk (1ul << UART_IER_RDA_IEN_Pos) /*!< UART IER: RDA_IEN Mask */
  145. /* UART FCR Bit Field Definitions */
  146. #define UART_FCR_RTS_TRI_LEV_Pos 16 /*!< UART FCR: RTS_TRI_LEV Position */
  147. #define UART_FCR_RTS_TRI_LEV_Msk (0xFul << UART_FCR_RTS_TRI_LEV_Pos) /*!< UART FCR: RTS_TRI_LEV Mask */
  148. #define UART_FCR_RX_DIS_Pos 8 /*!< UART FCR: RX_DIS Position */
  149. #define UART_FCR_RX_DIS_Msk (1ul << UART_FCR_RX_DIS_Pos) /*!< UART FCR: RX_DIS Mask */
  150. #define UART_FCR_RFITL_Pos 4 /*!< UART FCR: RFITL Position */
  151. #define UART_FCR_RFITL_Msk (0xFul << UART_FCR_RFITL_Pos) /*!< UART FCR: RFITL Mask */
  152. #define UART_FCR_TFR_Pos 2 /*!< UART FCR: TFR Position */
  153. #define UART_FCR_TFR_Msk (1ul << UART_FCR_TFR_Pos) /*!< UART FCR: TFR Mask */
  154. #define UART_FCR_RFR_Pos 1 /*!< UART FCR: RFR Position */
  155. #define UART_FCR_RFR_Msk (1ul << UART_FCR_RFR_Pos) /*!< UART FCR: RFR Mask */
  156. /* UART LCR Bit Field Definitions */
  157. #define UART_LCR_BCB_Pos 6 /*!< UART LCR: BCB Position */
  158. #define UART_LCR_BCB_Msk (1ul << UART_LCR_BCB_Pos) /*!< UART LCR: BCB Mask */
  159. #define UART_LCR_SPE_Pos 5 /*!< UART LCR: SPE Position */
  160. #define UART_LCR_SPE_Msk (1ul << UART_LCR_SPE_Pos) /*!< UART LCR: SPE Mask */
  161. #define UART_LCR_EPE_Pos 4 /*!< UART LCR: EPE Position */
  162. #define UART_LCR_EPE_Msk (1ul << UART_LCR_EPE_Pos) /*!< UART LCR: EPE Mask */
  163. #define UART_LCR_PBE_Pos 3 /*!< UART LCR: PBE Position */
  164. #define UART_LCR_PBE_Msk (1ul << UART_LCR_PBE_Pos) /*!< UART LCR: PBE Mask */
  165. #define UART_LCR_NSB_Pos 2 /*!< UART LCR: NSB Position */
  166. #define UART_LCR_NSB_Msk (1ul << UART_LCR_NSB_Pos) /*!< UART LCR: NSB Mask */
  167. #define UART_LCR_WLS_Pos 0 /*!< UART LCR: WLS Position */
  168. #define UART_LCR_WLS_Msk (0x3ul << UART_LCR_WLS_Pos) /*!< UART LCR: WLS Mask */
  169. /* UART MCR Bit Field Definitions */
  170. #define UART_MCR_RTS_ST_Pos 13 /*!< UART MCR: RTS_ST Position */
  171. #define UART_MCR_RTS_ST_Msk (1ul << UART_MCR_RTS_ST_Pos) /*!< UART MCR: RTS_ST Mask */
  172. #define UART_MCR_LEV_RTS_Pos 9 /*!< UART MCR: LEV_RTS Position */
  173. #define UART_MCR_LEV_RTS_Msk (1ul << UART_MCR_LEV_RTS_Pos) /*!< UART MCR: LEV_RTS Mask */
  174. #define UART_MCR_RTS_Pos 1 /*!< UART MCR: RTS Position */
  175. #define UART_MCR_RTS_Msk (1ul << UART_MCR_RTS_Pos) /*!< UART MCR: RTS Mask */
  176. /* UART MSR Bit Field Definitions */
  177. #define UART_MSR_LEV_CTS_Pos 8 /*!< UART MSR: LEV_CTS Position */
  178. #define UART_MSR_LEV_CTS_Msk (1ul << UART_MSR_LEV_CTS_Pos) /*!< UART MSR: LEV_CTS Mask */
  179. #define UART_MSR_CTS_ST_Pos 4 /*!< UART MSR: CTS_ST Position */
  180. #define UART_MSR_CTS_ST_Msk (1ul << UART_MSR_CTS_ST_Pos) /*!< UART MSR: CTS_ST Mask */
  181. #define UART_MSR_DCTSF_Pos 0 /*!< UART MSR: DCTST Position */
  182. #define UART_MSR_DCTSF_Msk (1ul << UART_MSR_DCTSF_Pos) /*!< UART MSR: DCTST Mask */
  183. /* UART FSR Bit Field Definitions */
  184. #define UART_FSR_TE_FLAG_Pos 28 /*!< UART FSR: TE_FLAG Position */
  185. #define UART_FSR_TE_FLAG_Msk (1ul << UART_FSR_TE_FLAG_Pos) /*!< UART FSR: TE_FLAG Mask */
  186. #define UART_FSR_TX_OVER_IF_Pos 24 /*!< UART FSR: TX_OVER_IF Position */
  187. #define UART_FSR_TX_OVER_IF_Msk (1ul << UART_FSR_TX_OVER_IF_Pos) /*!< UART FSR: TX_OVER_IF Mask */
  188. #define UART_FSR_TX_FULL_Pos 23 /*!< UART FSR: TX_FULL Position */
  189. #define UART_FSR_TX_FULL_Msk (1ul << UART_FSR_TX_FULL_Pos) /*!< UART FSR: TX_FULL Mask */
  190. #define UART_FSR_TX_EMPTY_Pos 22 /*!< UART FSR: TX_EMPTY Position */
  191. #define UART_FSR_TX_EMPTY_Msk (1ul << UART_FSR_TX_EMPTY_Pos) /*!< UART FSR: TX_EMPTY Mask */
  192. #define UART_FSR_TX_POINTER_Pos 16 /*!< UART FSR: TX_POINTER Position */
  193. #define UART_FSR_TX_POINTER_Msk (0x3Ful << UART_FSR_TX_POINTER_Pos) /*!< UART FSR: TX_POINTER Mask */
  194. #define UART_FSR_RX_FULL_Pos 15 /*!< UART FSR: RX_FULL Position */
  195. #define UART_FSR_RX_FULL_Msk (1ul << UART_FSR_RX_FULL_Pos) /*!< UART FSR: RX_FULL Mask */
  196. #define UART_FSR_RX_EMPTY_Pos 14 /*!< UART FSR: RX_EMPTY Position */
  197. #define UART_FSR_RX_EMPTY_Msk (1ul << UART_FSR_RX_EMPTY_Pos) /*!< UART FSR: RX_EMPTY Mask */
  198. #define UART_FSR_RX_POINTER_Pos 8 /*!< UART FSR: RX_POINTERS Position */
  199. #define UART_FSR_RX_POINTER_Msk (0x3Ful << UART_FSR_RX_POINTER_Pos) /*!< UART FSR: RX_POINTER Mask */
  200. #define UART_FSR_BIF_Pos 6 /*!< UART FSR: BIF Position */
  201. #define UART_FSR_BIF_Msk (1ul << UART_FSR_BIF_Pos) /*!< UART FSR: BIF Mask */
  202. #define UART_FSR_FEF_Pos 5 /*!< UART FSR: FEF Position */
  203. #define UART_FSR_FEF_Msk (1ul << UART_FSR_FEF_Pos) /*!< UART FSR: FEF Mask */
  204. #define UART_FSR_PEF_Pos 4 /*!< UART FSR: PEF Position */
  205. #define UART_FSR_PEF_Msk (1ul << UART_FSR_PEF_Pos) /*!< UART FSR: PEF Mask */
  206. #define UART_FSR_RS485_ADD_DETF_Pos 3 /*!< UART FSR: RS485_ADD_DETF Position */
  207. #define UART_FSR_RS485_ADD_DETF_Msk (1ul << UART_FSR_RS485_ADD_DETF_Pos) /*!< UART FSR: RS485_ADD_DETF Mask */
  208. #define UART_FSR_RX_OVER_IF_Pos 0 /*!< UART FSR: RX_OVER_IF Position */
  209. #define UART_FSR_RX_OVER_IF_Msk (1ul << UART_FSR_RX_OVER_IF_Pos) /*!< UART FSR: RX_OVER_IF Mask */
  210. /* UART ISR Bit Field Definitions */
  211. #define UART_ISR_LIN_RX_BREAK_INT_Pos 15 /*!< UART ISR: LIN_RX_BREAK_INT Position */
  212. #define UART_ISR_LIN_RX_BREAK_INT_Msk (1ul << UART_ISR_LIN_RX_BREAK_INT_Pos) /*!< UART ISR: LIN_RX_BREAK_INT Mask */
  213. #define UART_ISR_BUF_ERR_INT_Pos 13 /*!< UART ISR: BUF_ERR_INT Position */
  214. #define UART_ISR_BUF_ERR_INT_Msk (1ul << UART_ISR_BUF_ERR_INT_Pos) /*!< UART ISR: BUF_ERR_INT Mask */
  215. #define UART_ISR_TOUT_INT_Pos 12 /*!< UART ISR: TOUT_INT Position */
  216. #define UART_ISR_TOUT_INT_Msk (1ul << UART_ISR_TOUT_INT_Pos) /*!< UART ISR: TOUT_INT Mask */
  217. #define UART_ISR_MODEM_INT_Pos 11 /*!< UART ISR: MODEM_INT Position */
  218. #define UART_ISR_MODEM_INT_Msk (1ul << UART_ISR_MODEM_INT_Pos) /*!< UART ISR: MODEM_INT Mask */
  219. #define UART_ISR_RLS_INT_Pos 10 /*!< UART ISR: RLS_INT Position */
  220. #define UART_ISR_RLS_INT_Msk (1ul << UART_ISR_RLS_INT_Pos) /*!< UART ISR: RLS_INT Mask */
  221. #define UART_ISR_THRE_INT_Pos 9 /*!< UART ISR: THRE_INT Position */
  222. #define UART_ISR_THRE_INT_Msk (1ul << UART_ISR_THRE_INT_Pos) /*!< UART ISR: THRE_INT Mask */
  223. #define UART_ISR_RDA_INT_Pos 8 /*!< UART ISR: RDA_INT Position */
  224. #define UART_ISR_RDA_INT_Msk (1ul << UART_ISR_RDA_INT_Pos) /*!< UART ISR: RDA_INT Mask */
  225. #define UART_ISR_LIN_RX_BREAK_IF_Pos 7 /*!< UART ISR: LIN RX BREAK IF Position */
  226. #define UART_ISR_LIN_RX_BREAK_IF_Msk (1ul << UART_ISR_LIN_RX_BREAK_IF_Pos) /*!< UART ISR: LIN RX BREAK IF Mask */
  227. #define UART_ISR_BUF_ERR_IF_Pos 5 /*!< UART ISR: BUF_ERR_IF Position */
  228. #define UART_ISR_BUF_ERR_IF_Msk (1ul << UART_ISR_BUF_ERR_IF_Pos) /*!< UART ISR: BUF_ERR_IF Mask */
  229. #define UART_ISR_TOUT_IF_Pos 4 /*!< UART ISR: TOUT_IF Position */
  230. #define UART_ISR_TOUT_IF_Msk (1ul << UART_ISR_TOUT_IF_Pos) /*!< UART ISR: TOUT_IF Mask */
  231. #define UART_ISR_MODEM_IF_Pos 3 /*!< UART ISR: MODEM_IF Position */
  232. #define UART_ISR_MODEM_IF_Msk (1ul << UART_ISR_MODEM_IF_Pos) /*!< UART ISR: MODEM_IF Mask */
  233. #define UART_ISR_RLS_IF_Pos 2 /*!< UART ISR: RLS_IF Position */
  234. #define UART_ISR_RLS_IF_Msk (1ul << UART_ISR_RLS_IF_Pos) /*!< UART ISR: RLS_IF Mask */
  235. #define UART_ISR_THRE_IF_Pos 1 /*!< UART ISR: THRE_IF Position */
  236. #define UART_ISR_THRE_IF_Msk (1ul << UART_ISR_THRE_IF_Pos) /*!< UART ISR: THRE_IF Mask */
  237. #define UART_ISR_RDA_IF_Pos 0 /*!< UART ISR: RDA_IF Position */
  238. #define UART_ISR_RDA_IF_Msk (1ul << UART_ISR_RDA_IF_Pos) /*!< UART ISR: RDA_IF Mask */
  239. /* UART TOR Bit Field Definitions */
  240. #define UART_TOR_DLY_Pos 8 /*!< UART TOR: DLY Position */
  241. #define UART_TOR_DLY_Msk (0xFFul << UART_TOR_DLY_Pos) /*!< UART TOR: DLY Mask */
  242. #define UART_TOR_TOIC_Pos 0 /*!< UART TOR: TOIC Position */
  243. #define UART_TOR_TOIC_Msk (0xFFul << UART_TOR_TOIC_Pos) /*!< UART TOR: TOIC Mask */
  244. /* UART BAUD Bit Field Definitions */
  245. #define UART_BAUD_DIV_X_EN_Pos 29 /*!< UART BARD: DIV_X_EN Position */
  246. #define UART_BAUD_DIV_X_EN_Msk (1ul << UART_BAUD_DIV_X_EN_Pos) /*!< UART BARD: DIV_X_EN Mask */
  247. #define UART_BAUD_DIV_X_ONE_Pos 28 /*!< UART BARD: DIV_X_ONE Position */
  248. #define UART_BAUD_DIV_X_ONE_Msk (1ul << UART_BAUD_DIV_X_ONE_Pos) /*!< UART BARD: DIV_X_ONE Mask */
  249. #define UART_BAUD_DIVIDER_X_Pos 24 /*!< UART BARD: DIVIDER_X Position */
  250. #define UART_BAUD_DIVIDER_X_Msk (0xFul << UART_BAUD_DIVIDER_X_Pos) /*!< UART BARD: DIVIDER_X Mask */
  251. #define UART_BAUD_BRD_Pos 0 /*!< UART BARD: BRD Position */
  252. #define UART_BAUD_BRD_Msk (0xFFFFul << UART_BAUD_BRD_Pos) /*!< UART BARD: BRD Mask */
  253. /* UART IRCR Bit Field Definitions */
  254. #define UART_IRCR_INV_RX_Pos 6 /*!< UART IRCR: INV_RX Position */
  255. #define UART_IRCR_INV_RX_Msk (1ul << UART_IRCR_INV_RX_Pos) /*!< UART IRCR: INV_RX Mask */
  256. #define UART_IRCR_INV_TX_Pos 5 /*!< UART IRCR: INV_TX Position */
  257. #define UART_IRCR_INV_TX_Msk (1ul << UART_IRCR_INV_TX_Pos) /*!< UART IRCR: INV_TX Mask */
  258. #define UART_IRCR_TX_SELECT_Pos 1 /*!< UART IRCR: TX_SELECT Position */
  259. #define UART_IRCR_TX_SELECT_Msk (1ul << UART_IRCR_TX_SELECT_Pos) /*!< UART IRCR: TX_SELECT Mask */
  260. /* UART ALT_CSR Bit Field Definitions */
  261. #define UART_ALT_CSR_ADDR_MATCH_Pos 24 /*!< UART ALT_CSR: ADDR_MATCH Position */
  262. #define UART_ALT_CSR_ADDR_MATCH_Msk (0xFFul << UART_ALT_CSR_ADDR_MATCH_Pos) /*!< UART ALT_CSR: ADDR_MATCH Mask */
  263. #define UART_ALT_CSR_RS485_ADD_EN_Pos 15 /*!< UART ALT_CSR: RS485_ADD_EN Position */
  264. #define UART_ALT_CSR_RS485_ADD_EN_Msk (1ul << UART_ALT_CSR_RS485_ADD_EN_Pos) /*!< UART ALT_CSR: RS485_ADD_EN Mask */
  265. #define UART_ALT_CSR_RS485_AUD_Pos 10 /*!< UART ALT_CSR: RS485_AUD Position */
  266. #define UART_ALT_CSR_RS485_AUD_Msk (1ul << UART_ALT_CSR_RS485_AUD_Pos) /*!< UART ALT_CSR: RS485_AUD Mask */
  267. #define UART_ALT_CSR_RS485_AAD_Pos 9 /*!< UART ALT_CSR: RS485_AAD Position */
  268. #define UART_ALT_CSR_RS485_AAD_Msk (1ul << UART_ALT_CSR_RS485_AAD_Pos) /*!< UART ALT_CSR: RS485_AAD Mask */
  269. #define UART_ALT_CSR_RS485_NMM_Pos 8 /*!< UART ALT_CSR: RS485_NMM Position */
  270. #define UART_ALT_CSR_RS485_NMM_Msk (1ul << UART_ALT_CSR_RS485_NMM_Pos) /*!< UART ALT_CSR: RS485_NMM Mask */
  271. #define UART_ALT_CSR_LIN_TX_EN_Pos 7 /*!< UART ALT_CSR: LIN TX Break Mode Enable Position */
  272. #define UART_ALT_CSR_LIN_TX_EN_Msk (1ul << UART_ALT_CSR_LIN_TX_EN_Pos) /*!< UART ALT_CSR: LIN TX Break Mode Enable Mask */
  273. #define UART_ALT_CSR_LIN_RX_EN_Pos 6 /*!< UART ALT_CSR: LIN RX Enable Position */
  274. #define UART_ALT_CSR_LIN_RX_EN_Msk (1ul << UART_ALT_CSR_LIN_RX_EN_Pos) /*!< UART ALT_CSR: LIN RX Enable Mask */
  275. #define UART_ALT_CSR_UA_LIN_BKFL_Pos 0 /*!< UART ALT_CSR: UART LIN Break Field Length Position */
  276. #define UART_ALT_CSR_UA_LIN_BKFL_Msk (0xFul << UART_ALT_CSR_UA_LIN_BKFL_Pos) /*!< UART ALT_CSR: UART LIN Break Field Length Mask */
  277. /* UART FUN_SEL Bit Field Definitions */
  278. #define UART_FUN_SEL_FUN_SEL_Pos 0 /*!< UART FUN_SEL: FUN_SEL Position */
  279. #define UART_FUN_SEL_FUN_SEL_Msk (0x3ul << UART_FUN_SEL_FUN_SEL_Pos) /*!< UART FUN_SEL: FUN_SEL Mask */
  280. /* UART LIN_CTL Bit Field Definitions */
  281. #define UART_LIN_CTL_LIN_PID_Pos 24 /*!< UART LIN_CTL: LIN_PID Position */
  282. #define UART_LIN_CTL_LIN_PID_Msk (0xFFul << UART_LIN_CTL_LIN_PID_Pos) /*!< UART LIN_CTL: LIN_PID Mask */
  283. #define UART_LIN_CTL_LIN_HEAD_SEL_Pos 22 /*!< UART LIN_CTL: LIN_HEAD_SEL Position */
  284. #define UART_LIN_CTL_LIN_HEAD_SEL_Msk (0x3ul << UART_LIN_CTL_LIN_HEAD_SEL_Pos) /*!< UART LIN_CTL: LIN_HEAD_SEL Mask */
  285. #define UART_LIN_CTL_LIN_BS_LEN_Pos 20 /*!< UART LIN_CTL: LIN_BS_LEN Position */
  286. #define UART_LIN_CTL_LIN_BS_LEN_Msk (0x3ul << UART_LIN_CTL_LIN_BS_LEN_Pos) /*!< UART LIN_CTL: LIN_BS_LEN Mask */
  287. #define UART_LIN_CTL_LIN_BKFL_Pos 16 /*!< UART LIN_CTL: LIN_BKFL Position */
  288. #define UART_LIN_CTL_LIN_BKFL_Msk (0xFul << UART_LIN_CTL_LIN_BKFL_Pos) /*!< UART LIN_CTL: LIN_BKFL Mask */
  289. #define UART_LIN_CTL_BIT_ERR_EN_Pos 12 /*!< UART LIN_CTL: BIT_ERR_EN Position */
  290. #define UART_LIN_CTL_BIT_ERR_EN_Msk (1ul << UART_LIN_CTL_BIT_ERR_EN_Pos) /*!< UART LIN_CTL: BIT_ERR_EN Mask */
  291. #define UART_LIN_CTL_LIN_RX_DIS_Pos 11 /*!< UART LIN_CTL: LIN_RX_DIS Position */
  292. #define UART_LIN_CTL_LIN_RX_DIS_Msk (1ul << UART_LIN_CTL_LIN_RX_DIS_Pos) /*!< UART LIN_CTL: LIN_RX_DIS Mask */
  293. #define UART_LIN_CTL_LIN_BKDET_EN_Pos 10 /*!< UART LIN_CTL: LIN_BKDET_EN Position */
  294. #define UART_LIN_CTL_LIN_BKDET_EN_Msk (1ul << UART_LIN_CTL_LIN_BKDET_EN_Pos) /*!< UART LIN_CTL: LIN_BKDET_EN Mask */
  295. #define UART_LIN_CTL_LIN_IDPEN_Pos 9 /*!< UART LIN_CTL: LIN_IDPEN Position */
  296. #define UART_LIN_CTL_LIN_IDPEN_Msk (1ul << UART_LIN_CTL_LIN_IDPEN_Pos) /*!< UART LIN_CTL: LIN_IDPEN Mask */
  297. #define UART_LIN_CTL_LIN_SHD_Pos 8 /*!< UART LIN_CTL: LIN_SHD Position */
  298. #define UART_LIN_CTL_LIN_SHD_Msk (1ul << UART_LIN_CTL_LIN_SHD_Pos) /*!< UART LIN_CTL: LIN_SHD Mask */
  299. #define UART_LIN_CTL_LIN_WAKE_EN_Pos 4 /*!< UART LIN_CTL: LIN_WAKE_EN Position */
  300. #define UART_LIN_CTL_LIN_WAKE_EN_Msk (1ul << UART_LIN_CTL_LIN_WAKE_EN_Pos) /*!< UART LIN_CTL: LIN_WAKE_EN Mask */
  301. #define UART_LIN_CTL_LINS_DUM_EN_Pos 3 /*!< UART LIN_CTL: LINS_DUM_EN Position */
  302. #define UART_LIN_CTL_LINS_DUM_EN_Msk (1ul << UART_LIN_CTL_LINS_DUM_EN_Pos) /*!< UART LIN_CTL: LINS_DUM_EN Mask */
  303. #define UART_LIN_CTL_LINS_ARS_EN_Pos 2 /*!< UART LIN_CTL: LINS_ARS_EN Position */
  304. #define UART_LIN_CTL_LINS_ARS_EN_Msk (1ul << UART_LIN_CTL_LINS_ARS_EN_Pos) /*!< UART LIN_CTL: LINS_ARS_EN Mask */
  305. #define UART_LIN_CTL_LINS_HDET_EN_Pos 1 /*!< UART LIN_CTL: LINS_HDET_EN Position */
  306. #define UART_LIN_CTL_LINS_HDET_EN_Msk (1ul << UART_LIN_CTL_LINS_HDET_EN_Pos) /*!< UART LIN_CTL: LINS_HDET_EN Mask */
  307. #define UART_LIN_CTL_LINS_EN_Pos 0 /*!< UART LIN_CTL: LINS_EN Position */
  308. #define UART_LIN_CTL_LINS_EN_Msk (1ul << UART_LIN_CTL_LINS_EN_Pos) /*!< UART LIN_CTL: LINS_EN Mask */
  309. /* UART LIN_SR Bit Field Definitions */
  310. #define UART_LIN_SR_LINS_SYNC_F_Pos 3 /*!< UART LIN_SR: LINS_SYNC_F Position */
  311. #define UART_LIN_SR_LINS_SYNC_F_Msk (1ul << UART_LIN_SR_LINS_SYNC_F_Pos) /*!< UART LIN_SR: LINS_SYNC_F Mask */
  312. #define UART_LIN_SR_LINS_IDPERR_F_Pos 2 /*!< UART LIN_SR: LINS_IDPERR_F Position */
  313. #define UART_LIN_SR_LINS_IDPERR_F_Msk (1ul << UART_LIN_SR_LINS_IDPERR_F_Pos) /*!< UART LIN_SR: LINS_IDPERR_F Mask */
  314. #define UART_LIN_SR_LINS_HERR_F_Pos 1 /*!< UART LIN_SR: LINS_HERR_F Position */
  315. #define UART_LIN_SR_LINS_HERR_F_Msk (1ul << UART_LIN_SR_LINS_HERR_F_Pos) /*!< UART LIN_SR: LINS_HERR_F Mask */
  316. #define UART_LIN_SR_LINS_HDET_F_Pos 0 /*!< UART LIN_SR: LINS_HDET_F Position */
  317. #define UART_LIN_SR_LINS_HDET_F_Msk (1ul << UART_LIN_SR_LINS_HDET_F_Pos) /*!< UART LIN_SR: LINS_HDET_F Mask */
  318. /* UART DEBUG Bit Field Definitions */
  319. #define UART_DEBUG_ERR_DIVIA_F_Pos 0 /*!< UART DEBUG: ERR_DIVIA_F Position */
  320. #define UART_DEBUG_ERR_DIVIA_F_Msk (1ul << UART_DEBUG_ERR_DIVIA_F_Pos) /*!< UART DEBUG: ERR_DIVIA_F Mask */
  321. #define UART_DEBUG_ERR_HETIME_OUT_F_Pos 1 /*!< UART DEBUG: ERR_HETIME_OUT_F Position */
  322. #define UART_DEBUG_ERR_HETIME_OUT_F_Msk (1ul << UART_DEBUG_ERR_HETIME_OUT_F_Pos) /*!< UART DEBUG: ERR_HETIME_OUT_F Mask */
  323. #define UART_DEBUG_ERR_HEFE_F_Pos 2 /*!< UART DEBUG: ERR_HEFE_F Position */
  324. #define UART_DEBUG_ERR_HEFE_F_Msk (1ul << UART_DEBUG_ERR_HEFE_F_Pos) /*!< UART DEBUG: ERR_HEFE_F Mask */
  325. #define UART_DEBUG_ERR_SYNC_F_Pos 3 /*!< UART DEBUG: ERR_SYNC_F Position */
  326. #define UART_DEBUG_ERR_SYNC_F_Msk (1ul << UART_DEBUG_ERR_SYNC_F_Pos) /*!< UART DEBUG: ERR_SYNC_F Mask */
  327. /* UART SC_CTL Bit Field Definitions */
  328. #define UART_SC_CTL_RX_ERETRY_Pos 0 /*!< UART SC_CTL: RX_ERETRY Position */
  329. #define UART_SC_CTL_RX_ERETRY_Msk (7ul << UART_SC_CTL_RX_ERETRY_Pos) /*!< UART SC_CTL: RX_ERETRY Mask */
  330. #define UART_SC_CTL_RX_ERETRY_EN_Pos 3 /*!< UART SC_CTL: RX_ERETRY_EN Position */
  331. #define UART_SC_CTL_RX_ERETRY_EN_Msk (1ul << UART_SC_CTL_RX_ERETRY_EN_Pos) /*!< UART SC_CTL: RX_ERETRY_EN Mask */
  332. #define UART_SC_CTL_TX_ERETRY_Pos 4 /*!< UART SC_CTL: TX_ERETRY Position */
  333. #define UART_SC_CTL_TX_ERETRY_Msk (7ul << UART_SC_CTL_TX_ERETRY_Pos) /*!< UART SC_CTL: TX_ERETRY Mask */
  334. #define UART_SC_CTL_TX_ERETRY_EN_Pos 7 /*!< UART SC_CTL: TX_ERETRY_EN Position */
  335. #define UART_SC_CTL_TX_ERETRY_EN_Msk (1ul << UART_SC_CTL_TX_ERETRY_EN_Pos) /*!< UART SC_CTL: TX_ERETRY_EN Mask */
  336. /* UART SC_FSR Bit Field Definitions */
  337. #define UART_SC_FSR_RX_OVER_ERETRY_Pos 0 /*!< UART SC_FSR: RX_OVER_ERETRY Position */
  338. #define UART_SC_FSR_RX_OVER_ERETRY_Msk (1ul << UART_SC_FSR_RX_OVER_ERETRY_Pos) /*!< UART SC_FSR: RX_OVER_ERETRY Mask */
  339. #define UART_SC_FSR_TX_OVER_ERETRY_Pos 1 /*!< UART SC_FSR: TX_OVER_ERETRY Position */
  340. #define UART_SC_FSR_TX_OVER_ERETRY_Msk (1ul << UART_SC_FSR_TX_OVER_ERETRY_Pos) /*!< UART SC_FSR: TX_OVER_ERETRY Mask */
  341. #define UART_SC_FSR_RX_ERETRY_F_Pos 8 /*!< UART SC_FSR: RX_ERETRY_F Position */
  342. #define UART_SC_FSR_RX_ERETRY_F_Msk (1ul << UART_SC_FSR_RX_ERETRY_F_Pos) /*!< UART SC_FSR: RX_ERETRY_F Mask */
  343. #define UART_SC_FSR_TX_ERETRY_F_Pos 9 /*!< UART SC_FSR: TX_ERETRY_F Position */
  344. #define UART_SC_FSR_TX_ERETRY_F_Msk (1ul << UART_SC_FSR_TX_ERETRY_F_Pos) /*!< UART SC_FSR: TX_ERETRY_F Mask */
  345. /* Enable/Disable IrDA Mode */
  346. #define ENABLEIrDA 1 /*!< Enable IrDA */
  347. #define DISABLEIrDA 0 /*!< Disable IrDA */
  348. /* define IrDA Direction */
  349. #define IrDA_TX 0 /*!< Set IrDA Tx direction*/
  350. #define IrDA_RX 1 /*!< Set IrDA Rx direction*/
  351. /* define RTS signal */
  352. #define UART_RTS_HIGH 1 /*!< Set RTS high*/
  353. #define UART_RTS_LOW 0 /*!< Set RTS low*/
  354. /* define IOCTL command of UART operation mode, interrupt or pooling mode */
  355. #define UART_IOC_SETTXMODE 1 /*!< Set Tx Mode */
  356. #define UART_IOC_SETRXMODE 2 /*!< Set Tx Mode */
  357. #define UART_IOC_GETRECCHARINFO 3 /*!< Get receive character */
  358. #define UART_IOC_SETUARTPARAMETER 4 /*!< Config UART */
  359. //#define UART_IOC_PERFORMBLUETOOTH 5
  360. #define UART_IOC_PERFORMIrDA 6 /*!< Config IrDA */
  361. #define UART_IOC_GETUARTREGISTERVALUE 7 /*!< Get UART register value*/
  362. #define UART_IOC_GETERRNO 8 /*!< Get rrror code */
  363. //#define UART_IOC_SETMODEMLOOPBACK 9
  364. //#define UART_IOC_GETDSRSTATE 10
  365. //#define UART_IOC_SETDTRSIGNAL 11
  366. #define UART_IOC_SETINTERRUPT 12 /*!< Set interrupt */
  367. #define UART_IOC_SETBREAKCONTROL 13 /*!< Set break */
  368. #define UART_IOC_GETBIISTATE 14 /*!< Get break status */
  369. #define UART_IOC_GETCTSSTATE 15 /*!< Get CTS status */
  370. #define UART_IOC_SETRTSSIGNAL 16 /*!< Set RTS signal */
  371. #define UART_IOC_SETMODEMINTERRUPT 17 /*!< Set modem interrupt */
  372. #define UART_IOC_ENABLEHWFLOWCONTROL 18 /*!< Enable H/W flow control */
  373. #define UART_IOC_DISABLEHWFLOWCONTROL 19 /*!< Disable H/W flow control */
  374. //#define UART_IOC_ENABLESWFLOWCONTROL 20 /*!< Enable S/W flow control */
  375. //#define UART_IOC_DISABLESWFLOWCONTROL 21 /*!< Disable S/W flow control */
  376. //#define UART_IOC_SETUART1FULLMODEM 22
  377. //#define UART_IOC_SETUART1HIGHSPEED 23
  378. #define UART_IOC_FLUSH_TX_BUFFER 24 /*!< Flush Tx buffer */
  379. #define UART_IOC_FLUSH_RX_BUFFER 25 /*!< Flus Rx buffer */
  380. #define UART_IOC_SET_RS485_MODE 26 /*!< Select RS485 Mode */
  381. #define UART_IOC_SEND_RS485_ADDRESS 27 /*!< Send RS485 Address*/
  382. #define UART_IOC_SET_RS485_RXOFF 28 /*!< Select RS485 Mode */
  383. #define UART_IOC_SET_ALTCTL_REG 29 /*!< Set ALT_CTL register */
  384. #define UART_IOC_GET_ALTCTL_REG 30 /*!< Get ALT_CTL register */
  385. #define UART_IOC_SET_LIN_MODE 31 /*!< Select LIN Mode */
  386. /* Enable/Disable Modem interrupt */
  387. #define UART_ENABLE_MODEM_INT 0 /*!< Enable Modem interrupt */
  388. #define UART_DISABLE_MODEM_INT 1 /*!< Disable Modem interrupt */
  389. /* These error code can get from UART_IOC_GETERRNO */
  390. #define UART_ERR_PARITY_INVALID -1 /*!< Parity invalid */
  391. #define UART_ERR_DATA_BITS_INVALID -2 /*!< Data bits invalid */
  392. #define UART_ERR_STOP_BITS_INVALID -3 /*!< Stop bit invalid */
  393. #define UART_ERR_TRIGGERLEVEL_INVALID -4 /*!< Trigger level invalid */
  394. #define UART_ERR_CHANNEL_INVALID -5 /*!< UART channel invalid */
  395. #define UART_ERR_ALLOC_MEMORY_FAIL -6 /*!< Allocate memory error */
  396. //#define UART_ERR_CLOCK_SOURCE_INVALID -7 /*!< Clock Source invalid */
  397. //#define UART_ERR_BAUDRATE_INVALID -8 /*!< Baudrate invalid */
  398. //#define UART_ERR_CONFIGURE_BT_FAIL -9
  399. #define UART_ERR_IrDA_COMMAND_INVALID -10 /*!< IrDA mode invalid */
  400. #define UART_ERR_TX_BUF_NOT_ENOUGH -11 /*!< Tx buffer not enough */
  401. #define UART_ERR_OPERATE_MODE_INVALID -12 /*!< Operation mode invalid */
  402. #define UART_ERR_SET_BAUDRATE_FAIL -13 /*!< Set baudrate fail */
  403. /* These are the error code actually returns to user application */
  404. #define UART_ERR_ID 0xFFFF1700 /*!< UART library ID */
  405. #define UART_ENOTTY (1 | UART_ERR_ID) /*!< Command not support */
  406. #define UART_ENODEV (2 | UART_ERR_ID) /*!< Interface number out of range */
  407. #define UART_EIO (3 | UART_ERR_ID) /*!< Read/Write error */
  408. /*@}*/ /* end of group N9H30_UART_EXPORTED_CONSTANTS */
  409. /** @addtogroup N9H30_UART_EXPORTED_STRUCTS UART Exported Structs
  410. @{
  411. */
  412. /// @cond HIDDEN_SYMBOLS
  413. /*----------------------------------------------------*/
  414. /* Define UART buffer structure */
  415. /*----------------------------------------------------*/
  416. typedef struct UART_BUFFER_STRUCT
  417. {
  418. UINT32 volatile uUartTxHead, uUartTxTail;
  419. UINT32 volatile uUartRxHead, uUartRxTail;
  420. PUINT8 pucUartTxBuf;
  421. PUINT8 pucUartRxBuf;
  422. PVOID pvUartVector;
  423. BOOL bIsUseUARTTxInt;
  424. BOOL bIsUseUARTRxInt;
  425. BOOL bIsUARTInitial;
  426. PINT pucUARTFlag;
  427. PINT pucLINFlag;
  428. INT32 volatile nErrno;
  429. } UART_BUFFER_T;
  430. /// @endcond HIDDEN_SYMBOLS
  431. /** \brief Structure type of UART data
  432. */
  433. #if 0
  434. #define UART0 0 /*!< UART0 channel */
  435. #define UART1 1 /*!< UART1 channel */
  436. #define UART2 2 /*!< UART2 channel */
  437. #define UART3 3 /*!< UART3 channel */
  438. #define UART4 4 /*!< UART4 channel */
  439. #define UART5 5 /*!< UART5 channel */
  440. #define UART6 6 /*!< UART6 channel */
  441. #define UART7 7 /*!< UART7 channel */
  442. #define UART8 8 /*!< UART8 channel */
  443. #define UART9 9 /*!< UART9 channel */
  444. #define UARTA 10 /*!< UARTA channel */
  445. typedef struct UART_STRUCT
  446. {
  447. UINT32 uFreq; /*!< UART clock frequency */
  448. UINT32 uBaudRate; /*!< Baudrate */
  449. UINT8 ucUartNo; /*!< UART Port */
  450. UINT8 ucDataBits; /*!< Select Data length */
  451. UINT8 ucStopBits; /*!< Select stop bit length */
  452. UINT8 ucParity; /*!< Select Parity */
  453. UINT8 ucRxTriggerLevel; /*!< Select Rx FIFO trigger level */
  454. } UART_T;
  455. #else
  456. typedef struct
  457. {
  458. __IO uint32_t DAT; /*!< [0x0000] UART Receive/Transmit Buffer Register */
  459. __IO uint32_t INTEN; /*!< [0x0004] UART Interrupt Enable Register */
  460. __IO uint32_t FIFO; /*!< [0x0008] UART FIFO Control Register */
  461. __IO uint32_t LINE; /*!< [0x000c] UART Line Control Register */
  462. __IO uint32_t MODEM; /*!< [0x0010] UART Modem Control Register */
  463. __IO uint32_t MODEMSTS; /*!< [0x0014] UART Modem Status Register */
  464. __IO uint32_t FIFOSTS; /*!< [0x0018] UART FIFO Status Register */
  465. __IO uint32_t INTSTS; /*!< [0x001c] UART Interrupt Status Register */
  466. __IO uint32_t TOUT; /*!< [0x0020] UART Time-out Register */
  467. __IO uint32_t BAUD; /*!< [0x0024] UART Baud Rate Divider Register */
  468. __IO uint32_t IRDA; /*!< [0x0028] UART IrDA Control Register */
  469. __IO uint32_t ALTCTL; /*!< [0x002c] UART Alternate Control/Status Register */
  470. __IO uint32_t FUNCSEL; /*!< [0x0030] UART Function Select Register */
  471. __IO uint32_t LINCTL; /*!< [0x0034] UART LIN Control Register */
  472. __IO uint32_t LINSTS; /*!< [0x0038] UART LIN Status Register */
  473. } UART_T;
  474. #define UART0 ((UART_T *) UART0_BA) /*!< UART0 channel */
  475. #define UART1 ((UART_T *) UART1_BA) /*!< UART1 channel */
  476. #define UART2 ((UART_T *) UART2_BA) /*!< UART2 channel */
  477. #define UART3 ((UART_T *) UART3_BA) /*!< UART3 channel */
  478. #define UART4 ((UART_T *) UART4_BA) /*!< UART4 channel */
  479. #define UART5 ((UART_T *) UART5_BA) /*!< UART5 channel */
  480. #define UART6 ((UART_T *) UART6_BA) /*!< UART6 channel */
  481. #define UART7 ((UART_T *) UART7_BA) /*!< UART7 channel */
  482. #define UART8 ((UART_T *) UART8_BA) /*!< UART8 channel */
  483. #define UART9 ((UART_T *) UART9_BA) /*!< UART9 channel */
  484. #define UARTA ((UART_T *) UARTA_BA) /*!< UARTA channel */
  485. /*---------------------------------------------------------------------------------------------------------*/
  486. /* UART_FUNCSEL constants definitions */
  487. /*---------------------------------------------------------------------------------------------------------*/
  488. #define UART_FIFO_RFITL_Pos (4) /*!< UART_T::FIFO: RFITL Position */
  489. #define UART_FIFO_RFITL_Msk (0xful << UART_FIFO_RFITL_Pos) /*!< UART_T::FIFO: RFITL Mask */
  490. #define UART_FIFO_RTSTRGLV_Pos (16) /*!< UART_T::FIFO: RTSTRGLV Position */
  491. #define UART_FIFO_RTSTRGLV_Msk (0xful << UART_FIFO_RTSTRGLV_Pos) /*!< UART_T::FIFO: RTSTRGLV Mask */
  492. #define UART_FUNCSEL_FUNCSEL_Pos (0) /*!< UART_T::FUNCSEL: FUNCSEL Position */
  493. #define UART_FUNCSEL_FUNCSEL_Msk (0x3ul << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_T::FUNCSEL: FUNCSEL Mask */
  494. #define UART_FUNCSEL_UART (0x0ul << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_FUNCSEL setting to set UART Function (Default) \hideinitializer */
  495. #define UART_FUNCSEL_LIN (0x1ul << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_FUNCSEL setting to set LIN Function \hideinitializer */
  496. #define UART_FUNCSEL_IrDA (0x2ul << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_FUNCSEL setting to set IrDA Function \hideinitializer */
  497. #define UART_FUNCSEL_RS485 (0x3ul << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_FUNCSEL setting to set RS485 Function \hideinitializer */
  498. #endif
  499. /** \brief Structure type of UART register
  500. */
  501. typedef struct UART_REGISTER_STRUCT
  502. {
  503. UINT32 uUartReg[14][2]; /*!< Store UART register value */
  504. } UART_REGISTER_T;
  505. /*@}*/ /* end of group N9H30_UART_EXPORTED_STRUCTS */
  506. /** @addtogroup N9H30_UART_EXPORTED_FUNCTIONS UART Exported Functions
  507. @{
  508. */
  509. /**
  510. * @brief Calculate UART baudrate mode0 divider
  511. *
  512. * @param[in] u32SrcFreq UART clock frequency
  513. * @param[in] u32BaudRate Baudrate of UART module
  514. *
  515. * @return UART baudrate mode0 divider
  516. * \hideinitializer
  517. *
  518. */
  519. #define UART_BAUD_MODE0_DIVIDER(u32SrcFreq, u32BaudRate) (((u32SrcFreq + (u32BaudRate*8)) / u32BaudRate >> 4)-2)
  520. /**
  521. * @brief Calculate UART baudrate mode2 divider
  522. *
  523. * @param[in] u32SrcFreq UART clock frequency
  524. * @param[in] u32BaudRate Baudrate of UART module
  525. *
  526. * @return UART baudrate mode2 divider
  527. * \hideinitializer
  528. */
  529. #define UART_BAUD_MODE2_DIVIDER(u32SrcFreq, u32BaudRate) (((u32SrcFreq + (u32BaudRate/2)) / u32BaudRate)-2)
  530. /**
  531. * @brief Get Rx empty
  532. *
  533. * @param[in] uart The pointer of the specified UART module
  534. *
  535. * @retval 0 Rx FIFO is not empty
  536. * @retval >=1 Rx FIFO is empty
  537. *
  538. * @details This macro get Receiver FIFO empty register value.
  539. * \hideinitializer
  540. */
  541. #define UART_GET_RX_EMPTY(uart) ((uart)->FIFOSTS & UART_FSR_RX_EMPTY_Msk)
  542. /**
  543. * @brief Check TX FIFO is full or not
  544. *
  545. * @param[in] uart The pointer of the specified UART module
  546. *
  547. * @retval 1 TX FIFO is full
  548. * @retval 0 TX FIFO is not full
  549. *
  550. * @details This macro check TX FIFO is full or not.
  551. * \hideinitializer
  552. */
  553. #define UART_IS_TX_FULL(uart) (((uart)->FIFOSTS & UART_FSR_TX_FULL_Msk)>>UART_FSR_TX_FULL_Pos)
  554. /**
  555. * @brief Write UART data
  556. *
  557. * @param[in] uart The pointer of the specified UART module
  558. * @param[in] u8Data Data byte to transmit.
  559. *
  560. * @return None
  561. *
  562. * @details This macro write Data to Tx data register.
  563. * \hideinitializer
  564. */
  565. #define UART_WRITE(uart, u8Data) ((uart)->DAT = (u8Data))
  566. /**
  567. * @brief Read UART data
  568. *
  569. * @param[in] uart The pointer of the specified UART module
  570. *
  571. * @return The oldest data byte in RX FIFO.
  572. *
  573. * @details This macro read Rx data register.
  574. * \hideinitializer
  575. */
  576. #define UART_READ(uart) ((uart)->DAT)
  577. #define UART_ENABLE_INT(uart, u32eIntSel) ((uart)->INTEN |= (u32eIntSel))
  578. #define UART_DISABLE_INT(uart, u32eIntSel) ((uart)->INTEN &= ~ (u32eIntSel))
  579. /*-----------------------------------------*/
  580. /* interface function declarations */
  581. /*-----------------------------------------*/
  582. INT uartOpen(PVOID param);
  583. INT uartInit(void);
  584. INT uartIoctl(INT nNum, UINT32 uCom, UINT32 uArg0, UINT32 uArg1);
  585. INT32 uartRelease(INT nNum);
  586. INT32 uartWrite(INT nNum, PUINT8 pucBuf, UINT32 uLen);
  587. INT32 uartRead(INT nNum, PUINT8 pucBuf, UINT32 uLen);
  588. void UART_Open(UART_T *uart, uint32_t u32baudrate);
  589. void UART_Close(UART_T *uart);
  590. void UART_SetLineConfig(UART_T *uart, uint32_t u32baudrate, uint32_t u32data_width, uint32_t u32parity, uint32_t u32stop_bits);
  591. /*@}*/ /* end of group N9H30_UART_EXPORTED_FUNCTIONS */
  592. /*@}*/ /* end of group N9H30_UART_Driver */
  593. /*@}*/ /* end of group N9H30_Device_Driver */
  594. #ifdef __cplusplus
  595. }
  596. #endif
  597. #endif