📄 uart.h
字号:
/*************************************************************************/
/* */
/* FILE NAME VERSION */
/* */
/* uart.h KS32C5000(A)/50100 SNDS100 Rev. 1.0 */
/* */
/* COMPONENT */
/* */
/* */
/* */
/* DESCRIPTION */
/* */
/* */
/* AUTHOR */
/* */
/* Young Sun KIM, Samsung Electronics, Inc. */
/* */
/* DATA STRUCTURES */
/* */
/* */
/* FUNCTIONS */
/* */
/* */
/* DEPENDENCIES */
/* */
/* */
/* HISTORY */
/* */
/* NAME DATE REMARKS */
/* */
/* in4maker 09-25-1998 Created initial version 1.0 */
/* in4maker 05-31-1999 All uart functions are modified. */
/* */
/*************************************************************************/
#ifndef __UART_H__
#define __UART_H__
/***********************************************************
* SYMBOL DEFINITIONS *
***********************************************************/
#define baudrate 38400
#define Print dbg_out
#define NL 0x0A
#define CR 0x0D
#define BSP 0x08
#define ESC 0x1B
#define CTRLZ 0x1A
#define RUBOUT 0x7F
#define LTRUE 0xFF
#define FALSE 0
#define NULL 0
#define DEFAULT -1
#define DEFAULT_P 6 /* default precision */
/***********************************************************
* SET SERIAL DEVICE PARAMETER *
***********************************************************/
#define NUM_OF_SERIAL_DEV 2 /* Number of serial device */
#define SERIAL_DEV0 0
#define SERIAL_DEV1 1
#define CONSOLE SERIAL_DEV0 /* default console channel */
/* Can be used in interrupt mode */
#define sputs(s) i_puts(CONSOLE, s)
//extern void (sputs)(char[] /*s*/);
/* Can be used in polling mode */
#define put_byte(ch) put_char(CONSOLE, ch)
//extern void (put_byte)(char /*ch*/);
#define get_byte() get_char(CONSOLE)//阻塞
//extern char (get_byte)(void);
/***********************************************************
* REDEFINE C-TYPE HEADER *
***********************************************************/
#define is_digit(x) ((x >= '0' && x <= '9') ? 1:0)
#define is_lowercase(x) ((x >= 'a' && x <= 'z') ? 1:0)
#define is_xdigit(x) ((is_digit(x) || (x >= 'A' && x <= 'F'))? 1:0)
#define to_upper(x) ((is_lowercase(x)) ? x - 'a' + 'A': x)
#define is_space(x) (((x==' ')||(x==0x0D)) ? 1:0)
#define is_control(x) ((x > 0 && x < 32) ? 1:0)
/***********************************************************
* LINE CONTROL REGISTER BIT DEFINITIONS *
***********************************************************/
/* bit 0-1 : Word length */
#define ULCON_WL5 0x00
#define ULCON_WL6 0x01
#define ULCON_WL7 0x02
#define ULCON_WL8 0x03
/* bit 2 : Number of stop bits */
#define ULCON_STOP_2 0x04 /* default one stop bit */
/* bit 3-5 : Parity mode */
#define ULCON_PMD_NO 0x00 /* no parity */
#define ULCON_PMD_ODD 0x20 /* odd parity */
#define ULCON_PMD_EVEN 0x28 /* even parity */
#define ULCON_PMD_CHK1 0x30 /* parity is forced,checked as a 1 */
#define ULCON_PMD_CHK0 0x38 /* parity is forced,checked as a 0 */
/* bit 6 : Serial Clock Selection */
#define ULCON_UCLK 0x40 /* for external UART clock */
/* bit 7 : Infra-red mode */
#define ULCON_INFRA_RED 0x80
#define ULCON 0xff /* mask bits */
/* bit 8 : receive fifo enable */
#define UN_FIFO 0x100 /* Disable uart Rx FIFO */
/***********************************************************
* CONTROL REGISTER BIT DEFINITIONS *
***********************************************************/
/* bit 0-1 : Receive mode */
#define UCON 0xff /* mask bit */
#define UCON_RXM_OFF 0x00 /* receive disabled */
#define UCON_RXM_INTREQ 0x01 /* interrupt request */
#define UCON_RXM_GDMA0REQ 0x02 /* GDMA channel 0 req. */
#define UCON_RXM_GDMA1REQ 0x03 /* GDMA channel 1 req. */
/* bit 2 : Rx status interrupt enable */
#define UCON_RXSTAT_INT 0x04 /* generate rx status interrupt */
/* bit 3-4 : Transmit mode selection */
#define UCON_TXM_OFF 0x00 /* transmit disabled */
#define UCON_TXM_INTREQ 0x08 /* interrupt request */
#define UCON_TXM_GDMA0REQ 0x10 /* GDMA channel 0 req. */
#define UCON_TXM_GDMA1REQ 0x18 /* GDMA channel 1 req. */
/* bit 5 : Data Set Ready */
#define UCON_DSR 0x20 /* Assert DSR output(nUADSR)*/
/* bit 6 : Send Break */
#define UCON_SEND_BREAK 0x40 /* Send break */
/* bit 7 : Loop-back enable */
#define UCON_LOOPBACK 0x80 /* for test only */
/***********************************************************
* Status Register Bit Definitions *
***********************************************************/
#define USTAT 0xff /* mask bits */
#define USTAT_OVERRUN 0x01 /* overrun error */
#define USTAT_PARITY 0x02 /* parity error */
#define USTAT_FRAME 0x04 /* frame error */
#define USTAT_BREAK 0x08 /* break interrupt */
#define USTAT_DTR_LOW 0x10 /* data terminal ready */
#define USTAT_RCV_READY 0x20 /* receive data ready */
#define USTAT_TXB_EMPTY 0x40 /* tx buffer empty */
#define USTAT_TX_COMPLET 0x80 /* transmit complete */
#define USTAT_ERROR (USTAT_OVERRUN|USTAT_PARITY|USTAT_FRAME)
/***********************************************/
/* UART MACRO FUNCTIONS */
/***********************************************/
/* Used In Polling Mode */
// Waiting for Xmitter Empty
#define WaitXmitter(UARTSTAT) \
while(!(UARTSTAT & USTAT_TXB_EMPTY))
#define UARTTxComplete(UARTSTAT) while(!(UARTSTAT & USTAT_TX_COMPLET))
#define U_TX_COMPLETE(c) (c? (UARTSTAT1&USTAT_TX_COMPLET): \
(UARTSTAT0&USTAT_TX_COMPLET))
#define U_BUFF_EMPTY(c) (c? (UARTSTAT1 & USTAT_TXB_EMPTY): \
(UARTSTAT0 & USTAT_TXB_EMPTY))
// Waiting for Receive Data
#define WaitRcver(UARTSTAT) \
while(!(UARTSTAT & USTAT_RCV_READY))
/***********************************************************
* UART DATA STRUCTURES *
***********************************************************/
#define ERROR 0
#define SUCCESS 1
/* Transmit & Receive Que data structure */
#define MAXEVENT 10 /* 4Kbyte buffer */
typedef struct
{
char buff[MAXEVENT]; /* data buffer */
int wptr; /* write pointer */
int rptr; /* read pointer */
} UART_BUFFER;
/* Define UART initialize structure */
typedef struct SERIAL_INIT_STRUCT
{
uint32 com_port; /* means UART channel number */
uint32 baud_rate; /* default is defined at sysconf.h*/
uint32 data_mode; /* interrupt or poll mode */
uint32 parity; /* default no parity */
uint32 stop_bits; /* default 1bit */
uint32 data_bits; /* default 8bit */
uint32 clk_sel; /* external UART clock or not */
} SERIAL_DEV;
#define BAUD_TABLE 7 /* No of baud rate table */
typedef struct
{
uint32 baud;
uint32 div;
}BaudTable;
/********************************************************************/
/* UART INITIALIZE FUNCTIONS */
/********************************************************************/
extern uint32 UART_Initialize(void);
extern uint32 UART_Init(SERIAL_DEV *);
extern void TxQInit(uint32 /*channel*/);
extern void RxQInit(uint32 /*channel*/);
/********************************************************************/
/* UART INTERRUPT SERVICE ROUTINES & CONTROL FUNCTIONS */
/********************************************************************/
extern void Uart0TxLisr(void);
extern void Uart0RxErrLisr(void);
extern void Uart1TxLisr(void);
extern void Uart1RxErrLisr(void);
extern void UARTTxIntOn(uint32 /*channel*/);
extern void UARTTxIntOff(uint32 /*channel*/);
extern void UARTRxIntOn(uint32 /*channel*/);
extern void UARTRxIntOff(uint32 /*channel*/);
/********************************************************************/
/* UART TX,RX QUE WRITE AND READ FUNCTIONS */
/********************************************************************/
extern uint32 TxQWr(uint32 /*channel*/,uint8 /*data*/);
extern uint8 RxQRd(uint32 /*channel*/);
/********************************************************************/
/* UART BAUD RATE TABLE REFERENCE FUNCTIONS */
/********************************************************************/
extern uint32 BaudRateVal(uint32 /*baud rate*/);
/*
* return index value according to argument,baud rate.
*/
extern uint32 BaudRate(uint32 /*divisor*/);
/*
* return index value according to argument,devisor.
*/
/********************************************************************/
/* UART STANDARD I/O FUNCTIONS FOR INTERRUPT */
/********************************************************************/
extern uint8 i_getc(uint32 /*channel*/);
extern uint32 i_gets(uint32 /*channel*/, uint8 *);
extern uint32 i_putc(uint32 /*channel*/, uint8 /*ch*/);
extern uint32 i_puts(uint32 /*channel*/, uint8 * /*string*/);
extern void i_printf(char * /*formatted output*/, ...);
/********************************************************************/
/* UART STANDARD I/O FUNCTIONS FOR POLLING */
/********************************************************************/
extern void put_char(uint32 /*channel*/, char /*data*/);
extern char get_char(uint32 /*channel*/);
extern void put_string(char * /*ptr*/);
extern void dbg_out(char */*formatted output*/, ...);
/********************************************************************/
/* UART STANDARD I/O LIBRARY FUNCTIONS */
/********************************************************************/
extern uint32 gethex2dec(uint32 /*No of digit*/);
extern uint32 get_num(void) ;
extern uint32 get_digit(void);
extern uint32 kbd_hit(void) ;
/********************************************************************/
/* T2 UART FUNCTION TEST MODULES */
/********************************************************************/
extern void UartTest(void);
extern uint32 UARTAutoLoopBack(void); /* Internal loopback poll */
extern void StringEcho(uint32 /*channel*/);
extern uint32 getchannel(void);
extern void UARTConfigView(void);
extern void PrintStatus(int /*LED_disp*/, char /*Consol_disp*/);
extern void PrintUartItems(void);
#endif /* __UART_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -