gd_uart.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. /*!
  2. *******************************************************************************
  3. **
  4. ** \file gd_uart.h
  5. **
  6. ** \brief UART driver.
  7. **
  8. ** The driver provides functions to use the GK6202's UART
  9. ** interface.
  10. **
  11. ** Copyright: 2012 - 2013 (C) GoKe Microelectronics ShangHai Branch
  12. **
  13. ** \attention THIS SAMPLE CODE IS PROVIDED AS IS. GOKE MICROELECTRONICS
  14. ** ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR
  15. ** OMMISSIONS.
  16. **
  17. ** \version
  18. **
  19. ******************************************************************************/
  20. #ifndef _GD_UART_H_
  21. #define _GD_UART_H_
  22. #include <gtypes.h>
  23. #include <gmodids.h>
  24. /*---------------------------------------------------------------------------*/
  25. /* constants and macros */
  26. /*---------------------------------------------------------------------------*/
  27. #define GD_UART_ERR_BASE (GD_UART_MODULE_ID<<16) //!< Error base value
  28. #define GD_UART_COUNT 3
  29. #define UART0_RX_BUF_SIZE 1024 /* size of uart0 receive ring buffer */
  30. #define UART0_TX_BUF_SIZE 1024 /* size of uart0 trasmit ring buffer */
  31. #define UART1_RX_BUF_SIZE 1024 /* size of uart1 receive ring buffer */
  32. #define UART1_TX_BUF_SIZE 1024 /* size of uart1 trasmit ring buffer */
  33. #define UART2_RX_BUF_SIZE 1024 /* size of uart2 receive ring buffer */
  34. #define UART2_TX_BUF_SIZE 1024 /* size of uart2 trasmit ring buffer */
  35. #define UART_FIFO_SIZE 16 /* size of uart FIFO in bytes */
  36. /*---------------------------------------------------------------------------*/
  37. /* types, enums and structures */
  38. /*---------------------------------------------------------------------------*/
  39. /*!
  40. *******************************************************************************
  41. **
  42. ** \brief UART parity settings.
  43. **
  44. ******************************************************************************/
  45. typedef enum
  46. {
  47. /*! Specifies \b NONE parity. */
  48. GD_UART_NO_PARITY = 0,
  49. /*! Specifies \b EVEN parity. */
  50. GD_UART_EVEN_PARITY = 1,
  51. /*! Specifies \b ODD parity. */
  52. GD_UART_ODD_PARITY = 2
  53. } GD_UART_PARITY_E;
  54. /*!
  55. *******************************************************************************
  56. **
  57. ** \brief UART data bit settings.
  58. **
  59. ******************************************************************************/
  60. typedef enum
  61. {
  62. /*! Specifies \b 5 data bits. */
  63. GD_UART_5_DATATBITS = 4,
  64. /*! Specifies \b 6 data bits. */
  65. GD_UART_6_DATATBITS = 5,
  66. /*! Specifies \b 7 data bits. */
  67. GD_UART_7_DATATBITS = 6,
  68. /*! Specifies \b 8 data bits. */
  69. GD_UART_8_DATATBITS = 7
  70. } GD_UART_DATABITS_E;
  71. /*!
  72. *******************************************************************************
  73. **
  74. ** \brief UART stop bit settings.
  75. **
  76. ******************************************************************************/
  77. typedef enum
  78. {
  79. /*! Specifies \b 1 stop bit. */
  80. GD_UART_10_STOPBITS = 0,
  81. /*! Specifies \b 2 stop bits. */
  82. GD_UART_20_STOPBITS = 1
  83. } GD_UART_STOPBITS_E;
  84. /*!
  85. *******************************************************************************
  86. **
  87. ** \brief UART protocol settings.
  88. **
  89. ******************************************************************************/
  90. typedef enum
  91. {
  92. /*! Specifies \b NO protocol usage. */
  93. GD_UART_NO_PROTOCOL = 0,
  94. /*! Specifies \b FLOW-CONTROL protocol of DTR mode */
  95. GD_UART_FLOWCTRL_DTR = 0x00000001,
  96. /*! Specifies \b FLOW-CONTROL protocol of RTS mode */
  97. GD_UART_FLOWCTRL_RTS = 0x00000002,
  98. GD_UART_FLOWCTRL_OUT1 = 0x00000004,
  99. GD_UART_FLOWCTRL_OUT2 = 0x00000008,
  100. GD_UART_FLOWCTRL_LOOPBACK = 0x00000010,
  101. GD_UART_FLOWCTRL_AFCE = 0x00000020,
  102. GD_UART_FLOWCTRL_SIRE = 0x00000040,
  103. } GD_UART_PROTOCOL_E;
  104. /*!
  105. *******************************************************************************
  106. **
  107. ** \brief UART baud rate settings.
  108. **
  109. ******************************************************************************/
  110. typedef enum
  111. {
  112. /*! Specifies \b 110 baud. */
  113. GD_UART_BAUD_RATE110 = 110,
  114. /*! Specifies \b 300 baud. */
  115. GD_UART_BAUD_RATE300 = 300,
  116. /*! Specifies \b 1200 baud. */
  117. GD_UART_BAUD_RATE1200 = 1200,
  118. /*! Specifies \b 2400 baud. */
  119. GD_UART_BAUD_RATE2400 = 2400,
  120. /*! Specifies \b 4800 baud. */
  121. GD_UART_BAUD_RATE4800 = 4800,
  122. /*! Specifies \b 9600 baud. */
  123. GD_UART_BAUD_RATE9600 = 9600,
  124. /*! Specifies \b 9600 baud. */
  125. GD_UART_BAUD_RATE14400 = 14400,
  126. /*! Specifies \b 14400 baud. */
  127. GD_UART_BAUD_RATE19200 = 19200,
  128. /*! Specifies \b 38400 baud. */
  129. GD_UART_BAUD_RATE38400 = 38400,
  130. /*! Specifies \b 57600 baud. */
  131. GD_UART_BAUD_RATE57600 = 57600,
  132. /*! Specifies \b 115200 baud. */
  133. GD_UART_BAUD_RATE115200 = 115200,
  134. /*! Specifies \b 230400 baud.
  135. * \attention May cause possible clock error of more than 10%.
  136. */
  137. GD_UART_BAUD_RATE230400 = 230400,
  138. /*! Specifies \b 460800 baud.
  139. * \attention May cause possible clock error of more than 10%.
  140. */
  141. GD_UART_BAUD_RATE460800 = 460800,
  142. /*! Specifies \b 921600 baud.
  143. * \attention May cause possible clock error of more than 10%.
  144. */
  145. GD_UART_BAUD_RATE921600 = 921600
  146. } GD_UART_BAUDRATE_E;
  147. /*!
  148. *******************************************************************************
  149. **
  150. ** \brief UART RX/TX buffer state.
  151. **
  152. ******************************************************************************/
  153. typedef enum
  154. {
  155. RX_BUFFER_STATE_EMPTY = 0,
  156. RX_BUFFER_STATE_NORMAL = 1,
  157. RX_BUFFER_STATE_OVERFLOW = 2,
  158. RX_BUFFER_STATE_ABNORMAL = 3,
  159. TX_BUFFER_STATE_EMPTY = 4,
  160. TX_BUFFER_STATE_NORMAL = 5,
  161. TX_BUFFER_STATE_OVERFLOW = 6,
  162. TX_BUFFER_STATE_ABNORMAL = 7
  163. }GD_UART_BUFFER_STATE_E;
  164. /*!
  165. *******************************************************************************
  166. **
  167. ** \brief UART connection paramter.
  168. **
  169. ******************************************************************************/
  170. typedef struct
  171. {
  172. /*! The data rate of the connection. */
  173. GD_UART_BAUDRATE_E dataRate;
  174. /*! The data bit setting to be applied. */
  175. GD_UART_DATABITS_E numDataBits;
  176. /*! The stop bit setting to be applied. */
  177. GD_UART_STOPBITS_E numStopBits;
  178. /*! The protocol setting to be applied. */
  179. GD_UART_PROTOCOL_E protocol;
  180. /*! The parity setting to be applied. */
  181. GD_UART_PARITY_E parity;
  182. } GD_UART_PARAMS_S;
  183. /*!
  184. *******************************************************************************
  185. **
  186. ** \brief UART driver's initialization parameter.
  187. **
  188. ******************************************************************************/
  189. typedef struct
  190. {
  191. /*! The default connection parameters to be applied. */
  192. GD_UART_PARAMS_S *defaultParamsP;
  193. /*! The CPU frequency */
  194. U32 cpuFreq;
  195. /*! interrupt mode enable/disable*/
  196. GBOOL interruptEnable;
  197. /*! The priority of the UART interrupt. */
  198. S8 irqPriority;
  199. /*! The function to be called when new data were received. */
  200. void (*notifyFunction)(U32);
  201. } GD_UART_INIT_PARAMS_S;
  202. /*!
  203. *******************************************************************************
  204. **
  205. ** \brief UART open parameter.
  206. **
  207. ******************************************************************************/
  208. typedef struct
  209. {
  210. /*! The connection parameters to be applied when open an instance of the
  211. driver.
  212. */
  213. GD_UART_PARAMS_S *paramsP;
  214. S8 gpioRxPin;
  215. S8 gpioTxPin;
  216. S8 gpioRtsPin;
  217. S8 gpioCtsPin;
  218. U8 channel;
  219. void (*NotifyFunction)(U32);
  220. GBOOL interruptEnable;
  221. } GD_UART_OPEN_PARAMS_S;
  222. /*!
  223. *******************************************************************************
  224. **
  225. ** \brief UART statistic parameter.
  226. **
  227. ******************************************************************************/
  228. typedef struct
  229. {
  230. /*! The number of transmitted characters. */
  231. U32 numTransmittedChar;
  232. /*! The number of received characters. */
  233. U32 numReceivedChar;
  234. /*! The number of parity errors. */
  235. U32 numParityError;
  236. } GD_UART_STATISTICS;
  237. /*!
  238. *******************************************************************************
  239. **
  240. ** \brief UART state machine parameters.
  241. **
  242. ******************************************************************************/
  243. typedef volatile struct
  244. {
  245. GBOOL inUse; /* specifies if block is in use */
  246. U8 channel;
  247. U32 RealBaudRate;
  248. GD_UART_PARAMS_S SetParamsData;
  249. GD_UART_STATISTICS UartStatics;
  250. void (*NotifyFunction)(U32);
  251. volatile U8 *RxBuffer;
  252. volatile U32 RxBufWrite; /* start and stop pointer of RX buffer */
  253. volatile U32 RxBufRead;
  254. volatile U32 RxBufCounter;
  255. volatile U32 RxBufSize;
  256. volatile U8 *TxBuffer;
  257. volatile U32 TxBufWrite; /* start and stop pointer of TX buffer */
  258. volatile U32 TxBufRead;
  259. volatile U32 TxBufCounter;
  260. volatile U32 TxBufSize;
  261. GBOOL interruptEnable;
  262. }GD_UART_STATE_MACHINE_S;
  263. /*---------------------------------------------------------------------------*/
  264. /* function prototypes */
  265. /*---------------------------------------------------------------------------*/
  266. #ifdef __cplusplus
  267. extern "C" {
  268. #endif
  269. #ifndef USE_RT_DRIVER_FRAMEWORK
  270. GERR GD_UART_CheckRxBuffer(GD_HANDLE handle, GBOOL *dataAvailable);
  271. GERR GD_UART_Close(GD_HANDLE *handleP);
  272. GERR GD_UART_Flush(GD_HANDLE handle);
  273. GERR GD_UART_GetRealBaudRate(GD_HANDLE handle, U32 *rateP);
  274. U8 *GD_UART_GetRevisionString(void);
  275. GERR GD_UART_GetParams(GD_HANDLE handle, GD_UART_PARAMS_S *paramsP);
  276. GERR GD_UART_GetStatistics(GD_HANDLE handle, GD_UART_STATISTICS *statisticsP);
  277. GERR GD_UART_Init(GD_UART_INIT_PARAMS_S *initParamsP);
  278. GERR GD_UART_Open(GD_UART_OPEN_PARAMS_S *openParamsP, GD_HANDLE *handleP);
  279. GERR GD_UART_Read(GD_HANDLE handle, U8 *bufferP, U16 desiredReadBytes, U16 *actualReceivedBytesP);
  280. GERR GD_UART_SetParams(GD_HANDLE handle, GD_UART_PARAMS_S *paramsP);
  281. GERR GD_UART_Write(GD_HANDLE handle, U8 *bufferP, U16 bufferSize);
  282. GERR GD_UART_SetInterruptMode(GD_HANDLE handle, GBOOL enable);
  283. #endif
  284. #ifdef __cplusplus
  285. }
  286. #endif
  287. #endif /* _GD_UART_H_ */
  288. /* end of gd_uart.h */