reg_uart.h 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. ////////////////////////////////////////////////////////////////////////////////
  2. /// @file reg_uart.h
  3. /// @author AE TEAM
  4. /// @brief THIS FILE CONTAINS ALL THE FUNCTIONS PROTOTYPES FOR THE SERIES OF
  5. /// MM32 FIRMWARE LIBRARY.
  6. ////////////////////////////////////////////////////////////////////////////////
  7. /// @attention
  8. ///
  9. /// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
  10. /// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
  11. /// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
  12. /// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
  13. /// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
  14. /// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
  15. ///
  16. /// <H2><CENTER>&COPY; COPYRIGHT MINDMOTION </CENTER></H2>
  17. ////////////////////////////////////////////////////////////////////////////////
  18. // Define to prevent recursive inclusion
  19. #ifndef __REG_UART_H
  20. #define __REG_UART_H
  21. // Files includes
  22. #include <stdint.h>
  23. #include <stdbool.h>
  24. #include "types.h"
  25. #if defined ( __CC_ARM )
  26. #pragma anon_unions
  27. #endif
  28. ////////////////////////////////////////////////////////////////////////////////
  29. /// @brief UART Base Address Definition
  30. ////////////////////////////////////////////////////////////////////////////////
  31. #define UART1_BASE (APB2PERIPH_BASE + 0x3800) ///< Base Address: 0x40013800
  32. #define UART2_BASE (APB1PERIPH_BASE + 0x4400) ///< Base Address: 0x40004400
  33. #define UART3_BASE (APB1PERIPH_BASE + 0x4800) ///< Base Address: 0x40004800
  34. #define UART4_BASE (APB1PERIPH_BASE + 0x4C00) ///< Base Address: 0x40004C00
  35. #define UART5_BASE (APB1PERIPH_BASE + 0x5000) ///< Base Address: 0x40005000
  36. #define UART6_BASE (APB2PERIPH_BASE + 0x3C00) ///< Base Address: 0x40013C00
  37. #define UART7_BASE (APB1PERIPH_BASE + 0x7800) ///< Base Address: 0x40007800
  38. #define UART8_BASE (APB1PERIPH_BASE + 0x7C00) ///< Base Address: 0x40007C00
  39. ////////////////////////////////////////////////////////////////////////////////
  40. /// @brief UART Register Structure Definition
  41. ////////////////////////////////////////////////////////////////////////////////
  42. typedef struct {
  43. __IO u32 TDR; ///< Transmit Data Register, offset: 0x00
  44. __IO u32 RDR; ///< Receive Data Register, offset: 0x04
  45. __IO u32 CSR; ///< Current Status Register, offset: 0x08
  46. __IO u32 ISR; ///< Interrupt Status Register, offset: 0x0C
  47. __IO u32 IER; ///< Interrupt Enable Register, offset: 0x10
  48. __IO u32 ICR; ///< Interrupt Clear Register, offset: 0x14
  49. __IO u32 GCR; ///< Global Control Register, offset: 0x18
  50. __IO u32 CCR; ///< Config Control Register, offset: 0x1C
  51. __IO u32 BRR; ///< Baud Rate Register, offset: 0x20
  52. __IO u32 FRA; ///< Fraction Register, offset: 0x24
  53. __IO u32 RXAR; ///< Receive Address Register, offset: 0x28
  54. __IO u32 RXMR; ///< Receive Address Mask Register, offset: 0x2C
  55. __IO u32 SCR; ///< Smart Card Register, offset: 0x30
  56. __IO u32 IDLR; ///< Data length register offset: 0x34
  57. __IO u32 ABRCR; ///< automatic Baud rate control delivery offset: 0x38
  58. __IO u32 IRDA; ///< Infrared function control register, offset: 0x3C
  59. } UART_TypeDef;
  60. ////////////////////////////////////////////////////////////////////////////////
  61. /// @brief UART type pointer Definition
  62. ////////////////////////////////////////////////////////////////////////////////
  63. #define UART1 ((UART_TypeDef*) UART1_BASE)
  64. #define UART2 ((UART_TypeDef*) UART2_BASE)
  65. #define UART3 ((UART_TypeDef*) UART3_BASE)
  66. #define UART4 ((UART_TypeDef*) UART4_BASE)
  67. #define UART5 ((UART_TypeDef*) UART5_BASE)
  68. #define UART6 ((UART_TypeDef*) UART6_BASE)
  69. #define UART7 ((UART_TypeDef*) UART7_BASE)
  70. #define UART8 ((UART_TypeDef*) UART8_BASE)
  71. ////////////////////////////////////////////////////////////////////////////////
  72. /// @brief UART_TDR Register Bit Definition
  73. ////////////////////////////////////////////////////////////////////////////////
  74. #define UART_TDR_DATA_Pos (0)
  75. #define UART_TDR_DATA (0xFFU << UART_TDR_DATA_Pos) ///< Transmit data register
  76. ////////////////////////////////////////////////////////////////////////////////
  77. /// @brief UART_RDR Register Bit Definition
  78. ////////////////////////////////////////////////////////////////////////////////
  79. #define UART_RDR_DATA_Pos (0)
  80. #define UART_RDR_DATA (0xFFU << UART_RDR_DATA_Pos) ///< Receive data register
  81. ////////////////////////////////////////////////////////////////////////////////
  82. /// @brief UART_CSR Register Bit Definition
  83. ////////////////////////////////////////////////////////////////////////////////
  84. #define UART_CSR_TXC_Pos (0)
  85. #define UART_CSR_TXC (0x01U << UART_CSR_TXC_Pos) ///< Transmit complete flag bit
  86. #define UART_CSR_RXAVL_Pos (1)
  87. #define UART_CSR_RXAVL (0x01U << UART_CSR_RXAVL_Pos) ///< Receive valid data flag bit
  88. #define UART_CSR_TXFULL_Pos (2)
  89. #define UART_CSR_TXFULL (0x01U << UART_CSR_TXFULL_Pos) ///< Transmit buffer full flag bit
  90. #define UART_CSR_TXEPT_Pos (3)
  91. #define UART_CSR_TXEPT (0x01U << UART_CSR_TXEPT_Pos) ///< Transmit buffer empty flag bit
  92. ////////////////////////////////////////////////////////////////////////////////
  93. /// @brief UART_ISR Register Bit Definition
  94. ////////////////////////////////////////////////////////////////////////////////
  95. #define UART_ISR_TX_Pos (0)
  96. #define UART_ISR_TX (0x01U << UART_ISR_TX_Pos) ///< Transmit buffer empty interrupt flag bit
  97. #define UART_ISR_RX_Pos (1)
  98. #define UART_ISR_RX (0x01U << UART_ISR_RX_Pos) ///< Receive valid data interrupt flag bit
  99. #define UART_ISR_TXC_Pos (2)
  100. #define UART_ISR_TXC (0x01U << UART_ISR_TXC_Pos) ///< Transmit complete interrupt flag bit
  101. #define UART_ISR_RXOERR_Pos (3)
  102. #define UART_ISR_RXOERR (0x01U << UART_ISR_RXOERR_Pos) ///< Receive overflow error interrupt flag bit
  103. #define UART_ISR_RXPERR_Pos (4)
  104. #define UART_ISR_RXPERR (0x01U << UART_ISR_RXPERR_Pos) ///< Parity error interrupt flag bit
  105. #define UART_ISR_RXFERR_Pos (5)
  106. #define UART_ISR_RXFERR (0x01U << UART_ISR_RXFERR_Pos) ///< Frame error interrupt flag bit
  107. #define UART_ISR_RXBRK_Pos (6)
  108. #define UART_ISR_RXBRK (0x01U << UART_ISR_RXBRK_Pos) ///< Receive frame break interrupt flag bit
  109. #define UART_ISR_TXBRK_Pos (7)
  110. #define UART_ISR_TXBRK (0x01U << UART_ISR_TXBRK_Pos) ///< Transmit Break Frame Interrupt Flag Bit
  111. #define UART_ISR_RXB8_Pos (8)
  112. #define UART_ISR_RXB8 (0x01U << UART_ISR_RXB8_Pos) ///< Receive Bit 8 Interrupt Flag Bit
  113. #define UART_ISR_RXIDLE_Pos (9)
  114. #define UART_ISR_RXIDLE (0x01U << UART_ISR_RXIDLE_Pos) ///< Receive Bit 8 Interrupt clear Bit
  115. #define UART_ISR_ABREND_INTF_Pos (10)
  116. #define UART_ISR_ABREND_INTF (0x01U << UART_ISR_ABREND_INTF_Pos) ///< Auto baud rate end interrupt flag bit
  117. #define UART_ISR_ABRERR_INTF_Pos (11)
  118. #define UART_ISR_ABRERR_INTF (0x01U << UART_ISR_ABRERR_INTF_Pos) ///< Auto baud rate error interrupt flag bit
  119. ////////////////////////////////////////////////////////////////////////////////
  120. /// @brief UART_IER Register Bit Definition
  121. ////////////////////////////////////////////////////////////////////////////////
  122. #define UART_IER_TX_Pos (0)
  123. #define UART_IER_TX (0x01U << UART_IER_TX_Pos) ///< Transmit buffer empty interrupt enable bit
  124. #define UART_IER_RX_Pos (1)
  125. #define UART_IER_RX (0x01U << UART_IER_RX_Pos) ///< Receive buffer interrupt enable bit
  126. #define UART_IER_TXC_Pos (2)
  127. #define UART_IER_TXC (0x01U << UART_IER_TXC_Pos) ///< Transmit complete interrupt enable bit
  128. #define UART_IER_RXOERR_Pos (3)
  129. #define UART_IER_RXOERR (0x01U << UART_IER_RXOERR_Pos) ///< Receive overflow error interrupt enable bit
  130. #define UART_IER_RXPERR_Pos (4)
  131. #define UART_IER_RXPERR (0x01U << UART_IER_RXPERR_Pos) ///< Parity error interrupt enable bit
  132. #define UART_IER_RXFERR_Pos (5)
  133. #define UART_IER_RXFERR (0x01U << UART_IER_RXFERR_Pos) ///< Frame error interrupt enable bit
  134. #define UART_IER_RXBRK_Pos (6)
  135. #define UART_IER_RXBRK (0x01U << UART_IER_RXBRK_Pos) ///< Receive frame break interrupt enable bit
  136. #define UART_IER_TXBRK_Pos (7)
  137. #define UART_IER_TXBRK (0x01U << UART_IER_TXBRK_Pos) ///< Transmit Break Frame Interrupt Enable Bit
  138. #define UART_IER_RXB8_Pos (8)
  139. #define UART_IER_RXB8 (0x01U << UART_IER_RXB8_Pos) ///< Receive Bit 8 Interrupt Enable Bit
  140. #define UART_IER_RXIDLE_Pos (9)
  141. #define UART_IER_RXIDLE (0x01U << UART_IER_RXIDLE_Pos) ///< Receive Bit 8 Interrupt clear Bit
  142. #define UART_IER_ABREND_IEN_Pos (10)
  143. #define UART_IER_ABREND_IEN (0x01U << UART_IER_ABREND_IEN_Pos) ///< Auto baud rate end enable bit
  144. #define UART_IER_ABRERR_IEN_Pos (11)
  145. #define UART_IER_ABRERR_IEN (0x01U << UART_IER_ABRERR_IEN_Pos) ///< Auto baud rate error enable bit
  146. ////////////////////////////////////////////////////////////////////////////////
  147. /// @brief UART_ICR Register Bit Definition
  148. ////////////////////////////////////////////////////////////////////////////////
  149. #define UART_ICR_TX_Pos (0)
  150. #define UART_ICR_TX (0x01U << UART_ICR_TX_Pos) ///< Transmit buffer empty interrupt clear bit
  151. #define UART_ICR_RX_Pos (1)
  152. #define UART_ICR_RX (0x01U << UART_ICR_RX_Pos) ///< Receive interrupt clear bit
  153. #define UART_ICR_TXC_Pos (2)
  154. #define UART_ICR_TXC (0x01U << UART_ICR_TXC_Pos) ///< Transmit complete interrupt clear bit
  155. #define UART_ICR_RXOERR_Pos (3)
  156. #define UART_ICR_RXOERR (0x01U << UART_ICR_RXOERR_Pos) ///< Receive overflow error interrupt clear bit
  157. #define UART_ICR_RXPERR_Pos (4)
  158. #define UART_ICR_RXPERR (0x01U << UART_ICR_RXPERR_Pos) ///< Parity error interrupt clear bit
  159. #define UART_ICR_RXFERR_Pos (5)
  160. #define UART_ICR_RXFERR (0x01U << UART_ICR_RXFERR_Pos) ///< Frame error interrupt clear bit
  161. #define UART_ICR_RXBRK_Pos (6)
  162. #define UART_ICR_RXBRK (0x01U << UART_ICR_RXBRK_Pos) ///< Receive frame break interrupt clear bit
  163. #define UART_ICR_TXBRK_Pos (7)
  164. #define UART_ICR_TXBRK (0x01U << UART_ICR_TXBRK_Pos) ///< Transmit Break Frame Interrupt clear Bit
  165. #define UART_ICR_RXB8_Pos (8)
  166. #define UART_ICR_RXB8 (0x01U << UART_ICR_RXB8_Pos) ///< Receive Bit 8 Interrupt clear Bit
  167. #define UART_ICR_RXIDLE_Pos (9)
  168. #define UART_ICR_RXIDLE (0x01U << UART_ICR_RXIDLE_Pos) ///< Receive Bit 8 Interrupt clear Bit
  169. #define UART_ICR_ABRENDCLR_Pos (10)
  170. #define UART_ICR_ABRENDCLR (0x01U << UART_ICR_ABRENDCLR_Pos) ///< Auto baud rate end clear bit
  171. #define UART_ICR_ABRERRCLR_Pos (11)
  172. #define UART_ICR_ABRERRCLR (0x01U << UART_ICR_ABRERRCLR_Pos) ///< Auto baud rate error clear bit
  173. ////////////////////////////////////////////////////////////////////////////////
  174. /// @brief UART_GCR Register Bit Definition
  175. ////////////////////////////////////////////////////////////////////////////////
  176. #define UART_GCR_UART_Pos (0)
  177. #define UART_GCR_UART (0x01U << UART_GCR_UART_Pos) ///< UART mode selection bit
  178. #define UART_GCR_DMA_Pos (1)
  179. #define UART_GCR_DMA (0x01U << UART_GCR_DMA_Pos) ///< DMA mode selection bit
  180. #define UART_GCR_AUTOFLOW_Pos (2)
  181. #define UART_GCR_AUTOFLOW (0x01U << UART_GCR_AUTOFLOW_Pos) ///< Automatic flow control enable bit
  182. #define UART_GCR_RX_Pos (3)
  183. #define UART_GCR_RX (0x01U << UART_GCR_RX_Pos) ///< Enable receive
  184. #define UART_GCR_TX_Pos (4)
  185. #define UART_GCR_TX (0x01U << UART_GCR_TX_Pos) ///< Enable transmit
  186. #define UART_GCR_SELB8_Pos (7)
  187. #define UART_GCR_SELB8 (0x01U << UART_GCR_SELB8_Pos) ///< UART mode selection bit
  188. #define UART_GCR_SWAP_Pos (8)
  189. #define UART_GCR_SWAP (0x01U << UART_GCR_SWAP_Pos) ///< DMA mode selection bit
  190. #define UART_GCR_RXTOG_Pos (9)
  191. #define UART_GCR_RXTOG (0x01U << UART_GCR_RXTOG_Pos) ///< Automatic flow control enable bit
  192. #define UART_GCR_TXTOG_Pos (10)
  193. #define UART_GCR_TXTOG (0x01U << UART_GCR_TXTOG_Pos) ///< Enable receive
  194. ////////////////////////////////////////////////////////////////////////////////
  195. /// @brief UART_CCR Register Bit Definition
  196. ////////////////////////////////////////////////////////////////////////////////
  197. #define UART_CCR_PEN_Pos (0)
  198. #define UART_CCR_PEN (0x01U << UART_CCR_PEN_Pos) ///< Parity enable bit
  199. #define UART_CCR_PSEL_Pos (1)
  200. #define UART_CCR_PSEL (0x01U << UART_CCR_PSEL_Pos) ///< Parity selection bit
  201. #define UART_CCR_SPB_Pos (2)
  202. #define UART_CCR_SPB (0x01U << UART_CCR_SPB_Pos) ///< Stop bit selection
  203. #define UART_CCR_SPB0_Pos UART_CCR_SPB_Pos
  204. #define UART_CCR_SPB0 UART_CCR_SPB ///< Stop bit 0 selection
  205. #define UART_CCR_BRK_Pos (3)
  206. #define UART_CCR_BRK (0x01U << UART_CCR_BRK_Pos) ///< UART transmit frame break
  207. #define UART_CCR_CHAR_Pos (4)
  208. #define UART_CCR_CHAR (0x03U << UART_CCR_CHAR_Pos) ///< UART width bit
  209. #define UART_CCR_CHAR_5b (0x00U << UART_CCR_CHAR_Pos) ///< UART Word Length 5b
  210. #define UART_CCR_CHAR_6b (0x01U << UART_CCR_CHAR_Pos) ///< UART Word Length 6b
  211. #define UART_CCR_CHAR_7b (0x02U << UART_CCR_CHAR_Pos) ///< UART Word Length 7b
  212. #define UART_CCR_CHAR_8b (0x03U << UART_CCR_CHAR_Pos) ///< UART Word Length 8b
  213. #define UART_CCR_SPB1_Pos (6)
  214. #define UART_CCR_SPB1 (0x01U << UART_CCR_SPB1_Pos) ///< Stop bit 1 selection
  215. #define UART_CCR_B8RXD_Pos (7)
  216. #define UART_CCR_B8RXD (0x01U << UART_CCR_B8RXD_Pos) ///< Synchronous frame receive
  217. #define UART_CCR_B8TXD_Pos (8)
  218. #define UART_CCR_B8TXD (0x01U << UART_CCR_B8TXD_Pos) ///< Synchronous frame transmit
  219. #define UART_CCR_B8POL_Pos (9)
  220. #define UART_CCR_B8POL (0x01U << UART_CCR_B8POL_Pos) ///< Synchronous frame polarity control bit
  221. #define UART_CCR_B8TOG_Pos (10)
  222. #define UART_CCR_B8TOG (0x01U << UART_CCR_B8TOG_Pos) ///< Synchronous frame auto toggle bit
  223. #define UART_CCR_B8EN_Pos (11)
  224. #define UART_CCR_B8EN (0x01U << UART_CCR_B8EN_Pos) ///< Synchronous frame enable bit
  225. #define UART_CCR_RWU_Pos (12)
  226. #define UART_CCR_RWU (0x01U << UART_CCR_RWU_Pos) ///< Receive wake up method
  227. #define UART_CCR_WAKE_Pos (13)
  228. #define UART_CCR_WAKE (0x01U << UART_CCR_WAKE_Pos) ///< Wake up method
  229. #define UART_CCR_LIN_Pos (14)
  230. #define UART_CCR_LIN (0x01U << UART_CCR_LIN_Pos) ///< Wake up method
  231. ////////////////////////////////////////////////////////////////////////////////
  232. /// @brief UART_BRR Register Bit Definition
  233. ////////////////////////////////////////////////////////////////////////////////
  234. #define UART_BRR_MANTISSA_Pos (0)
  235. #define UART_BRR_MANTISSA (0xFFFFU << UART_BRR_MANTISSA_Pos) ///< UART DIV MANTISSA
  236. ////////////////////////////////////////////////////////////////////////////////
  237. /// @brief UART_FRA Register Bit Definition
  238. ////////////////////////////////////////////////////////////////////////////////
  239. #define UART_BRR_FRACTION_Pos (0)
  240. #define UART_BRR_FRACTION (0x0FU << UART_BRR_FRACTION_Pos) ///< UART DIV FRACTION
  241. ////////////////////////////////////////////////////////////////////////////////
  242. /// @brief UART_RXAR Register Bit Definition
  243. ////////////////////////////////////////////////////////////////////////////////
  244. #define UART_RXAR_ADDR_Pos (0)
  245. #define UART_RXAR_ADDR (0xFFU << UART_RXAR_ADDR_Pos) ///< Synchronous frame match address
  246. ////////////////////////////////////////////////////////////////////////////////
  247. /// @brief UART_RXMR Register Bit Definition
  248. ////////////////////////////////////////////////////////////////////////////////
  249. #define UART_RXMR_MASK_Pos (0)
  250. #define UART_RXMR_MASK (0xFFU << UART_RXMR_MASK_Pos) ///< Synchronous frame match address mask
  251. ////////////////////////////////////////////////////////////////////////////////
  252. /// @brief UART_SCR Register Bit Definition
  253. ////////////////////////////////////////////////////////////////////////////////
  254. #define UART_SCR_SCEN_Pos (0)
  255. #define UART_SCR_SCEN (0x01U << UART_SCR_SCEN_Pos) ///< ISO7816 enable bit
  256. #define UART_SCR_SCARB_Pos (1)
  257. #define UART_SCR_SCARB (0x01U << UART_SCR_SCARB_Pos) ///< ISO7816 check auto answer bit
  258. #define UART_SCR_NACK_Pos (2)
  259. #define UART_SCR_NACK (0x01U << UART_SCR_NACK_Pos) ///< Master receive frame answer bit
  260. #define UART_SCR_SCFCNT_Pos (4)
  261. #define UART_SCR_SCFCNT (0xFFU << UART_SCR_SCFCNT_Pos) ///< ISO7816 protection counter bit
  262. #define UART_SCR_HDSEL_Pos (12)
  263. #define UART_SCR_HDSEL (0x01U << UART_SCR_HDSEL_Pos) ///< Single-line half-duplex mode selection bit
  264. ////////////////////////////////////////////////////////////////////////////////
  265. /// @brief UART_ABRCR Register Bit Definition
  266. ////////////////////////////////////////////////////////////////////////////////
  267. #define UART_ABRCR_ABREN_Pos (0)
  268. #define UART_ABRCR_ABREN (0x01U<<UART_ABRCR_ABREN_Pos)
  269. #define UART_ABRCR_BITCNT_Pos (1)
  270. #define UART_ABRCR_BITCNT (0x03U<<UART_ABRCR_BITCNT_Pos)
  271. #define UART_ABRCR_BITCNT_MODE0 (0x00U<<UART_ABRCR_BITCNT_Pos)
  272. #define UART_ABRCR_BITCNT_MODE1 (0x01U<<UART_ABRCR_BITCNT_Pos)
  273. #define UART_ABRCR_BITCNT_MODE2 (0x02U<<UART_ABRCR_BITCNT_Pos)
  274. #define UART_ABRCR_BITCNT_MODE3 (0x03U<<UART_ABRCR_BITCNT_Pos)
  275. #define UART_ABRCR_FORMER_Pos (3)
  276. #define UART_ABRCR_FORMER (0x01U<<UART_ABRCR_FORMER_Pos)
  277. #define UART_ABRCR_LATTER_Pos (4)
  278. #define UART_ABRCR_LATTER (0x01U<<UART_ABRCR_LATTER_Pos)
  279. ////////////////////////////////////////////////////////////////////////////////
  280. /// @brief UART_IDLR Register Bit Definition
  281. ////////////////////////////////////////////////////////////////////////////////
  282. #define UART_IDLR_IDLR_Pos (0)
  283. #define UART_IDLR_IDLR (0xFFFFU << UART_IDLR_IDLR_Pos) ///< ISO7816 enable bit
  284. /// @}
  285. /// @}
  286. /// @}
  287. ////////////////////////////////////////////////////////////////////////////////
  288. #endif
  289. ////////////////////////////////////////////////////////////////////////////////