123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 |
- /*!
- *******************************************************************************
- **
- ** \file gd_uart.h
- **
- ** \brief UART driver.
- **
- ** The driver provides functions to use the GK6202's UART
- ** interface.
- **
- ** Copyright: 2012 - 2013 (C) GoKe Microelectronics ShangHai Branch
- **
- ** \attention THIS SAMPLE CODE IS PROVIDED AS IS. GOKE MICROELECTRONICS
- ** ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR
- ** OMMISSIONS.
- **
- ** \version
- **
- ******************************************************************************/
- #ifndef _GD_UART_H_
- #define _GD_UART_H_
- #include <gtypes.h>
- #include <gmodids.h>
- /*---------------------------------------------------------------------------*/
- /* constants and macros */
- /*---------------------------------------------------------------------------*/
- #define GD_UART_ERR_BASE (GD_UART_MODULE_ID<<16) //!< Error base value
- #define GD_UART_COUNT 3
- #define UART0_RX_BUF_SIZE 1024 /* size of uart0 receive ring buffer */
- #define UART0_TX_BUF_SIZE 1024 /* size of uart0 trasmit ring buffer */
- #define UART1_RX_BUF_SIZE 1024 /* size of uart1 receive ring buffer */
- #define UART1_TX_BUF_SIZE 1024 /* size of uart1 trasmit ring buffer */
- #define UART2_RX_BUF_SIZE 1024 /* size of uart2 receive ring buffer */
- #define UART2_TX_BUF_SIZE 1024 /* size of uart2 trasmit ring buffer */
- #define UART_FIFO_SIZE 16 /* size of uart FIFO in bytes */
- /*---------------------------------------------------------------------------*/
- /* types, enums and structures */
- /*---------------------------------------------------------------------------*/
- /*!
- *******************************************************************************
- **
- ** \brief UART parity settings.
- **
- ******************************************************************************/
- typedef enum
- {
- /*! Specifies \b NONE parity. */
- GD_UART_NO_PARITY = 0,
- /*! Specifies \b EVEN parity. */
- GD_UART_EVEN_PARITY = 1,
- /*! Specifies \b ODD parity. */
- GD_UART_ODD_PARITY = 2
- } GD_UART_PARITY_E;
- /*!
- *******************************************************************************
- **
- ** \brief UART data bit settings.
- **
- ******************************************************************************/
- typedef enum
- {
- /*! Specifies \b 5 data bits. */
- GD_UART_5_DATATBITS = 4,
- /*! Specifies \b 6 data bits. */
- GD_UART_6_DATATBITS = 5,
- /*! Specifies \b 7 data bits. */
- GD_UART_7_DATATBITS = 6,
- /*! Specifies \b 8 data bits. */
- GD_UART_8_DATATBITS = 7
- } GD_UART_DATABITS_E;
- /*!
- *******************************************************************************
- **
- ** \brief UART stop bit settings.
- **
- ******************************************************************************/
- typedef enum
- {
- /*! Specifies \b 1 stop bit. */
- GD_UART_10_STOPBITS = 0,
- /*! Specifies \b 2 stop bits. */
- GD_UART_20_STOPBITS = 1
- } GD_UART_STOPBITS_E;
- /*!
- *******************************************************************************
- **
- ** \brief UART protocol settings.
- **
- ******************************************************************************/
- typedef enum
- {
- /*! Specifies \b NO protocol usage. */
- GD_UART_NO_PROTOCOL = 0,
- /*! Specifies \b FLOW-CONTROL protocol of DTR mode */
- GD_UART_FLOWCTRL_DTR = 0x00000001,
- /*! Specifies \b FLOW-CONTROL protocol of RTS mode */
- GD_UART_FLOWCTRL_RTS = 0x00000002,
- GD_UART_FLOWCTRL_OUT1 = 0x00000004,
- GD_UART_FLOWCTRL_OUT2 = 0x00000008,
- GD_UART_FLOWCTRL_LOOPBACK = 0x00000010,
- GD_UART_FLOWCTRL_AFCE = 0x00000020,
- GD_UART_FLOWCTRL_SIRE = 0x00000040,
- } GD_UART_PROTOCOL_E;
- /*!
- *******************************************************************************
- **
- ** \brief UART baud rate settings.
- **
- ******************************************************************************/
- typedef enum
- {
- /*! Specifies \b 110 baud. */
- GD_UART_BAUD_RATE110 = 110,
- /*! Specifies \b 300 baud. */
- GD_UART_BAUD_RATE300 = 300,
- /*! Specifies \b 1200 baud. */
- GD_UART_BAUD_RATE1200 = 1200,
- /*! Specifies \b 2400 baud. */
- GD_UART_BAUD_RATE2400 = 2400,
- /*! Specifies \b 4800 baud. */
- GD_UART_BAUD_RATE4800 = 4800,
- /*! Specifies \b 9600 baud. */
- GD_UART_BAUD_RATE9600 = 9600,
- /*! Specifies \b 9600 baud. */
- GD_UART_BAUD_RATE14400 = 14400,
- /*! Specifies \b 14400 baud. */
- GD_UART_BAUD_RATE19200 = 19200,
- /*! Specifies \b 38400 baud. */
- GD_UART_BAUD_RATE38400 = 38400,
- /*! Specifies \b 57600 baud. */
- GD_UART_BAUD_RATE57600 = 57600,
- /*! Specifies \b 115200 baud. */
- GD_UART_BAUD_RATE115200 = 115200,
- /*! Specifies \b 230400 baud.
- * \attention May cause possible clock error of more than 10%.
- */
- GD_UART_BAUD_RATE230400 = 230400,
- /*! Specifies \b 460800 baud.
- * \attention May cause possible clock error of more than 10%.
- */
- GD_UART_BAUD_RATE460800 = 460800,
- /*! Specifies \b 921600 baud.
- * \attention May cause possible clock error of more than 10%.
- */
- GD_UART_BAUD_RATE921600 = 921600
- } GD_UART_BAUDRATE_E;
- /*!
- *******************************************************************************
- **
- ** \brief UART RX/TX buffer state.
- **
- ******************************************************************************/
- typedef enum
- {
- RX_BUFFER_STATE_EMPTY = 0,
- RX_BUFFER_STATE_NORMAL = 1,
- RX_BUFFER_STATE_OVERFLOW = 2,
- RX_BUFFER_STATE_ABNORMAL = 3,
- TX_BUFFER_STATE_EMPTY = 4,
- TX_BUFFER_STATE_NORMAL = 5,
- TX_BUFFER_STATE_OVERFLOW = 6,
- TX_BUFFER_STATE_ABNORMAL = 7
- }GD_UART_BUFFER_STATE_E;
- /*!
- *******************************************************************************
- **
- ** \brief UART connection paramter.
- **
- ******************************************************************************/
- typedef struct
- {
- /*! The data rate of the connection. */
- GD_UART_BAUDRATE_E dataRate;
- /*! The data bit setting to be applied. */
- GD_UART_DATABITS_E numDataBits;
- /*! The stop bit setting to be applied. */
- GD_UART_STOPBITS_E numStopBits;
- /*! The protocol setting to be applied. */
- GD_UART_PROTOCOL_E protocol;
- /*! The parity setting to be applied. */
- GD_UART_PARITY_E parity;
- } GD_UART_PARAMS_S;
- /*!
- *******************************************************************************
- **
- ** \brief UART driver's initialization parameter.
- **
- ******************************************************************************/
- typedef struct
- {
- /*! The default connection parameters to be applied. */
- GD_UART_PARAMS_S *defaultParamsP;
- /*! The CPU frequency */
- U32 cpuFreq;
- /*! interrupt mode enable/disable*/
- GBOOL interruptEnable;
- /*! The priority of the UART interrupt. */
- S8 irqPriority;
- /*! The function to be called when new data were received. */
- void (*notifyFunction)(U32);
- } GD_UART_INIT_PARAMS_S;
- /*!
- *******************************************************************************
- **
- ** \brief UART open parameter.
- **
- ******************************************************************************/
- typedef struct
- {
- /*! The connection parameters to be applied when open an instance of the
- driver.
- */
- GD_UART_PARAMS_S *paramsP;
- S8 gpioRxPin;
- S8 gpioTxPin;
- S8 gpioRtsPin;
- S8 gpioCtsPin;
- U8 channel;
- void (*NotifyFunction)(U32);
- GBOOL interruptEnable;
- } GD_UART_OPEN_PARAMS_S;
- /*!
- *******************************************************************************
- **
- ** \brief UART statistic parameter.
- **
- ******************************************************************************/
- typedef struct
- {
- /*! The number of transmitted characters. */
- U32 numTransmittedChar;
- /*! The number of received characters. */
- U32 numReceivedChar;
- /*! The number of parity errors. */
- U32 numParityError;
- } GD_UART_STATISTICS;
- /*!
- *******************************************************************************
- **
- ** \brief UART state machine parameters.
- **
- ******************************************************************************/
- typedef volatile struct
- {
- GBOOL inUse; /* specifies if block is in use */
- U8 channel;
- U32 RealBaudRate;
- GD_UART_PARAMS_S SetParamsData;
- GD_UART_STATISTICS UartStatics;
- void (*NotifyFunction)(U32);
- volatile U8 *RxBuffer;
- volatile U32 RxBufWrite; /* start and stop pointer of RX buffer */
- volatile U32 RxBufRead;
- volatile U32 RxBufCounter;
- volatile U32 RxBufSize;
- volatile U8 *TxBuffer;
- volatile U32 TxBufWrite; /* start and stop pointer of TX buffer */
- volatile U32 TxBufRead;
- volatile U32 TxBufCounter;
- volatile U32 TxBufSize;
- GBOOL interruptEnable;
- }GD_UART_STATE_MACHINE_S;
- /*---------------------------------------------------------------------------*/
- /* function prototypes */
- /*---------------------------------------------------------------------------*/
- #ifdef __cplusplus
- extern "C" {
- #endif
- #ifndef USE_RT_DRIVER_FRAMEWORK
- GERR GD_UART_CheckRxBuffer(GD_HANDLE handle, GBOOL *dataAvailable);
- GERR GD_UART_Close(GD_HANDLE *handleP);
- GERR GD_UART_Flush(GD_HANDLE handle);
- GERR GD_UART_GetRealBaudRate(GD_HANDLE handle, U32 *rateP);
- U8 *GD_UART_GetRevisionString(void);
- GERR GD_UART_GetParams(GD_HANDLE handle, GD_UART_PARAMS_S *paramsP);
- GERR GD_UART_GetStatistics(GD_HANDLE handle, GD_UART_STATISTICS *statisticsP);
- GERR GD_UART_Init(GD_UART_INIT_PARAMS_S *initParamsP);
- GERR GD_UART_Open(GD_UART_OPEN_PARAMS_S *openParamsP, GD_HANDLE *handleP);
- GERR GD_UART_Read(GD_HANDLE handle, U8 *bufferP, U16 desiredReadBytes, U16 *actualReceivedBytesP);
- GERR GD_UART_SetParams(GD_HANDLE handle, GD_UART_PARAMS_S *paramsP);
- GERR GD_UART_Write(GD_HANDLE handle, U8 *bufferP, U16 bufferSize);
- GERR GD_UART_SetInterruptMode(GD_HANDLE handle, GBOOL enable);
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif /* _GD_UART_H_ */
- /* end of gd_uart.h */
|