www.pudn.com > 4510b_dma.rar > uart.h


/*************************************************************************/ 
/*                                                                       */ 
/* FILE NAME                                      VERSION                */ 
/*                                                                       */ 
/*      uart.h                  		KS32C50100 SNDS100 Rev. 1.0      */ 
/*                                                                       */ 
/* COMPONENT                                                             */ 
/*                                                                       */ 
/*                                                                       */ 
/*                                                                       */ 
/* DESCRIPTION                                                           */ 
/*                                                                       */ 
/*************************************************************************/ 
 
#ifndef _BSP_UART_H_ 
#define _BSP_UART_H_ 
 
#include "std.h" 
 
/*********************************************************** 
 *	SYMBOL DEFINITIONS                                 * 
 ***********************************************************/ 
#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  /* _BSP_UART_H_ */