⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.h

📁 移植在鱼板上运行的ucos
💻 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 + -