218 lines
9.7 KiB
C
218 lines
9.7 KiB
C
#ifndef __SERIAL_H
|
|
#define __SERIAL_H
|
|
|
|
|
|
#include "base.h"
|
|
|
|
|
|
typedef enum {
|
|
DRVUART_PORT0=0,
|
|
DRVUART_PORT1=1,
|
|
DRVUART_PORT2=2,
|
|
DRVUART_PORT3=3,
|
|
} DRVUART_PORT;
|
|
|
|
#define UART_CLOCK (30000000UL) //kneron
|
|
extern u32 UART_PORT[4];
|
|
/*
|
|
#define UART_FTUART010_0_PA_BASE 0xC1400000UL //UART_u0
|
|
#define UART_FTUART010_1_PA_BASE 0xC1500000UL //UART_u1
|
|
#define UART_FTUART010_2_PA_BASE 0xC1600000UL //UART_u1_1
|
|
#define UART_FTUART010_3_PA_BASE 0xC1700000UL //UART_u1_2
|
|
*/
|
|
#define SERIAL_THR 0x00 /* Transmitter Holding Register(Write).*/
|
|
#define SERIAL_RBR 0x00 /* Receive Buffer register (Read).*/
|
|
#define SERIAL_IER 0x04 /* Interrupt Enable register.*/
|
|
#define SERIAL_IIR 0x08 /* Interrupt Identification register(Read).*/
|
|
#define SERIAL_FCR 0x08 /* FIFO control register(Write).*/
|
|
#define SERIAL_LCR 0x0C /* Line Control register.*/
|
|
#define SERIAL_MCR 0x10 /* Modem Control Register.*/
|
|
#define SERIAL_LSR 0x14 /* Line status register(Read) .*/
|
|
#define SERIAL_MSR 0x18 /* Modem Status register (Read).*/
|
|
#define SERIAL_SPR 0x1C /* Scratch pad register */
|
|
#define SERIAL_DLL 0x0 /* Divisor Register LSB */
|
|
#define SERIAL_DLM 0x4 /* Divisor Register MSB */
|
|
#define SERIAL_PSR 0x8 /* Prescale Divison Factor */
|
|
|
|
#define SERIAL_MDR 0x20
|
|
#define SERIAL_ACR 0x24
|
|
#define SERIAL_TXLENL 0x28
|
|
#define SERIAL_TXLENH 0x2C
|
|
#define SERIAL_MRXLENL 0x30
|
|
#define SERIAL_MRXLENH 0x34
|
|
#define SERIAL_PLR 0x38
|
|
#define SERIAL_FMIIR_PIO 0x3C
|
|
#define SERIAL_FEATURE 0x68
|
|
|
|
/* IER Register */
|
|
#define SERIAL_IER_DR 0x1 /* Data ready Enable */
|
|
#define SERIAL_IER_TE 0x2 /* THR Empty Enable */
|
|
#define SERIAL_IER_RLS 0x4 /* Receive Line Status Enable */
|
|
#define SERIAL_IER_MS 0x8 /* Modem Staus Enable */
|
|
|
|
/* IIR Register */
|
|
#define SERIAL_IIR_NONE 0x1 /* No interrupt pending */
|
|
#define SERIAL_IIR_RLS 0x6 /* Receive Line Status */
|
|
#define SERIAL_IIR_DR 0x4 /* Receive Data Ready */
|
|
#define SERIAL_IIR_TIMEOUT 0xc /* Receive Time Out */
|
|
#define SERIAL_IIR_TE 0x2 /* THR Empty */
|
|
#define SERIAL_IIR_MODEM 0x0 /* Modem Status */
|
|
|
|
/* FCR Register */
|
|
#define SERIAL_FCR_FE 0x1 /* FIFO Enable */
|
|
#define SERIAL_FCR_RXFR 0x2 /* Rx FIFO Reset */
|
|
#define SERIAL_FCR_TXFR 0x4 /* Tx FIFO Reset */
|
|
|
|
/* LCR Register */
|
|
#define SERIAL_LCR_LEN5 0x0
|
|
#define SERIAL_LCR_LEN6 0x1
|
|
#define SERIAL_LCR_LEN7 0x2
|
|
#define SERIAL_LCR_LEN8 0x3
|
|
|
|
#define SERIAL_LCR_STOP 0x4
|
|
#define SERIAL_LCR_EVEN 0x18 /* Even Parity */
|
|
#define SERIAL_LCR_ODD 0x8 /* Odd Parity */
|
|
#define SERIAL_LCR_PE 0x8 /* Parity Enable */
|
|
#define SERIAL_LCR_SETBREAK 0x40 /* Set Break condition */
|
|
#define SERIAL_LCR_STICKPARITY 0x20 /* Stick Parity Enable */
|
|
#define SERIAL_LCR_DLAB 0x80 /* Divisor Latch Access Bit */
|
|
|
|
/* LSR Register */
|
|
#define SERIAL_LSR_DR 0x1 /* Data Ready */
|
|
#define SERIAL_LSR_OE 0x2 /* Overrun Error */
|
|
#define SERIAL_LSR_PE 0x4 /* Parity Error */
|
|
#define SERIAL_LSR_FE 0x8 /* Framing Error */
|
|
#define SERIAL_LSR_BI 0x10 /* Break Interrupt */
|
|
#define SERIAL_LSR_THRE 0x20 /* THR Empty */
|
|
#define SERIAL_LSR_TE 0x40 /* Transmitte Empty */
|
|
#define SERIAL_LSR_DE 0x80 /* FIFO Data Error */
|
|
|
|
/* MCR Register */
|
|
#define SERIAL_MCR_DTR 0x1 /* Data Terminal Ready */
|
|
#define SERIAL_MCR_RTS 0x2 /* Request to Send */
|
|
#define SERIAL_MCR_OUT1 0x4 /* output 1 */
|
|
#define SERIAL_MCR_OUT2 0x8 /* output2 or global interrupt enable */
|
|
#define SERIAL_MCR_LPBK 0x10 /* loopback mode */
|
|
|
|
|
|
/* MSR Register */
|
|
#define SERIAL_MSR_DELTACTS 0x1 /* Delta CTS */
|
|
#define SERIAL_MSR_DELTADSR 0x2 /* Delta DSR */
|
|
#define SERIAL_MSR_TERI 0x4 /* Trailing Edge RI */
|
|
#define SERIAL_MSR_DELTACD 0x8 /* Delta CD */
|
|
#define SERIAL_MSR_CTS 0x10 /* Clear To Send */
|
|
#define SERIAL_MSR_DSR 0x20 /* Data Set Ready */
|
|
#define SERIAL_MSR_RI 0x40 /* Ring Indicator */
|
|
#define SERIAL_MSR_DCD 0x80 /* Data Carrier Detect */
|
|
|
|
|
|
/* MDR register */
|
|
#define SERIAL_MDR_MODE_SEL 0x03
|
|
#define SERIAL_MDR_UART 0x0
|
|
#define SERIAL_MDR_SIR 0x1
|
|
#define SERIAL_MDR_FIR 0x2
|
|
|
|
/* ACR register */
|
|
#define SERIAL_ACR_TXENABLE 0x1
|
|
#define SERIAL_ACR_RXENABLE 0x2
|
|
#define SERIAL_ACR_SET_EOT 0x4
|
|
|
|
#define BAUD_921600 (UART_CLOCK / 14745600)
|
|
#define BAUD_460800 (UART_CLOCK / 7372800)
|
|
#define BAUD_115200 (UART_CLOCK / 1843200)
|
|
#define BAUD_57600 (UART_CLOCK / 921600)
|
|
#define BAUD_38400 (UART_CLOCK / 614400)
|
|
#define BAUD_19200 (UART_CLOCK / 307200)
|
|
#define BAUD_14400 (UART_CLOCK / 230400)
|
|
#define BAUD_9600 (UART_CLOCK / 153600)
|
|
#define BAUD_4800 (UART_CLOCK / 76800)
|
|
#define BAUD_2400 (UART_CLOCK / 38400)
|
|
#define BAUD_1200 (UART_CLOCK / 19200)
|
|
|
|
#define DEBUG_CONSOLE DRVUART_PORT0
|
|
#define DEFAULT_CONSOLE_BAUD BAUD_115200
|
|
|
|
#ifndef PARITY_NONE
|
|
#define PARITY_NONE 0
|
|
#endif
|
|
|
|
#ifndef PARITY_ODD
|
|
#define PARITY_ODD 1
|
|
#endif
|
|
|
|
#ifndef PARITY_EVEN
|
|
#define PARITY_EVEN 2
|
|
#endif
|
|
|
|
#ifndef PARITY_MARK
|
|
#define PARITY_MARK 3
|
|
#endif
|
|
|
|
#ifndef PARITY_SPACE
|
|
#define PARITY_SPACE 4
|
|
#endif
|
|
|
|
|
|
#ifndef ON
|
|
#define ON 1
|
|
#endif
|
|
|
|
#ifndef OFF
|
|
#define OFF 0
|
|
#endif
|
|
|
|
#define BACKSP_KEY 0x08
|
|
#define RETURN_KEY 0x0D
|
|
#define DELETE_KEY 0x7F
|
|
#define BELL 0x07
|
|
|
|
/* -------------------------------------------------------------------------------
|
|
* API
|
|
* -------------------------------------------------------------------------------
|
|
*/
|
|
extern void fLib_SetSerialMode(DRVUART_PORT port_no, u32 mode);
|
|
extern void fLib_EnableIRMode(DRVUART_PORT port_no, u32 TxEnable, u32 RxEnable);
|
|
extern void fLib_SerialInit (DRVUART_PORT port_no, u32 baudrate, u32 parity,u32 num,u32 len, u32 interruptMode);
|
|
extern void fLib_SetSerialLoopback(DRVUART_PORT port_no, u32 onoff);
|
|
extern void fLib_SetSerialFifoCtrl(DRVUART_PORT port_no, u32 level_tx, u32 level_rx, u32 resettx, u32 resetrx); //V1.20//ADA10022002
|
|
extern void fLib_DisableSerialFifo(DRVUART_PORT port_no);
|
|
extern void fLib_SetSerialInt(DRVUART_PORT port_no, u32 IntMask);
|
|
extern char fLib_GetSerialChar(DRVUART_PORT port_no);
|
|
extern void fLib_PutSerialChar(DRVUART_PORT port_no, char Ch);
|
|
extern void fLib_PutSerialStr(DRVUART_PORT port_no, char *Str);
|
|
extern void fLib_Modem_waitcall(DRVUART_PORT port_no);
|
|
extern void fLib_Modem_call(DRVUART_PORT port_no, char *tel);
|
|
extern int fLib_Modem_getchar(DRVUART_PORT port_no,int TIMEOUT);
|
|
extern bool fLib_Modem_putchar(DRVUART_PORT port_no, s8 Ch);
|
|
extern void fLib_EnableSerialInt(DRVUART_PORT port_no, u32 mode);
|
|
extern void fLib_DisableSerialInt(DRVUART_PORT port_no, u32 mode);
|
|
extern u32 fLib_ReadSerialIER(DRVUART_PORT port_no);
|
|
extern u32 fLib_SerialIntIdentification(DRVUART_PORT port_no);
|
|
extern void fLib_SetSerialLineBreak(DRVUART_PORT port_no);
|
|
extern void fLib_SerialRequestToSend(DRVUART_PORT port_no);
|
|
extern void fLib_SerialStopToSend(DRVUART_PORT port_no);
|
|
extern void fLib_SerialDataTerminalReady(DRVUART_PORT port_no);
|
|
extern void fLib_SerialDataTerminalNotReady(DRVUART_PORT port_no);
|
|
extern u32 fLib_ReadSerialLineStatus(DRVUART_PORT port_no);
|
|
extern u32 fLib_ReadSerialModemStatus(DRVUART_PORT port_no);
|
|
extern u32 GetUartStatus(DRVUART_PORT port_no);
|
|
extern u32 IsThrEmpty(u32 status);
|
|
extern u32 IsDataReady(u32 status);
|
|
extern void CheckRxStatus(DRVUART_PORT port_no);
|
|
extern void CheckTxStatus(DRVUART_PORT port_no);
|
|
extern u32 fLib_kbhit(DRVUART_PORT port_no);
|
|
extern char fLib_getch(DRVUART_PORT port_no);
|
|
extern char fLib_getchar(DRVUART_PORT port_no);
|
|
extern char fLib_getchar_timeout(DRVUART_PORT port_no, unsigned long timeout);
|
|
extern void fLib_putchar(DRVUART_PORT port_no, char Ch);
|
|
extern void fLib_putc(DRVUART_PORT port_no, char Ch);
|
|
extern void fLib_putstr(DRVUART_PORT port_no, char *str);
|
|
extern void fLib_printf(const char *f, ...); /* variable arguments */
|
|
extern int fLib_gets(DRVUART_PORT port_no, char *buf);
|
|
extern void fLib_DebugPrintChar(DRVUART_PORT port_no, char ch);
|
|
extern void fLib_DebugPrintString(DRVUART_PORT port_no, char *str);
|
|
extern char fLib_DebugGetChar(DRVUART_PORT port_no);
|
|
extern u32 fLib_DebugGetUserCommand(DRVUART_PORT port_no, u8 * buffer, u32 Len);
|
|
extern void Seg7_Show(u32 value);
|
|
#endif // __SERIAL_H
|