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

📄 uart.h

📁 基于LPC2119的CAN驱动及例子 循环发送实例程序 简单的CAN中继器实例
💻 H
字号:
/*
****************************************Copyright (c)**************************************************
**                               广州周立功单片机发展有限公司
**                                     研    究    所
**                                        CAN开发组 
**
**                                 http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: UART.H
**创   建   人: 滕欣欣
**最后修改日期: 2004年5月01日
**描        述: UART的基本寄存器和操作函数声明
**
********************************************************************************************************
*/
#ifndef _UART_H_
#define	_UART_H_
#ifndef _UART_GLOBAL_
#define	UART_GLOBAL	extern
#else
#define	UART_GLOBAL
#endif

#define UART_OFFSET_ADR		0x4000
#define	UARTRBR_BADR		0xE000C000
#define	UARTTHR_BADR		0xE000C000
#define	UARTDLL_BADR		0xE000C000
#define	UARTDLM_BADR		0xE000C004
#define	UARTIER_BADR		0xE000C004
#define	UARTIIR_BADR		0xE000C008
#define	UARTFCR_BADR		0xE000C008
#define	UARTLCR_BADR		0xE000C00C
#define	UARTLSR_BADR		0xE000C014
/*
************************************
	应用变量声明
************************************
*/

/*
************************************
	UART通道枚举
************************************
*/
typedef	enum	_uartnum_
{
	UART0 = 0,
	UART1
}eUARTNUM;
/*
******************************
**	UART寄存器定义
******************************
*/
/*
**************************************************************************
**					定义 UARTRBR 寄存器 (RO)
**Receiver Buffer Register ((DLAB = 0)
**************************************************************************
*/
typedef	struct	_uartrbr_
{
	INT32U	WritedData	:8;
	INT32U	Reserve		:24;
}stcUARTRBR,*P_stcUARTRBR;

#define UARTRBR(UARTNum)		(*((volatile P_stcUARTRBR)(UARTRBR_BADR + UARTNum* UART_OFFSET_ADR)))

/*
**************************************************************************
**					定义 UARTTHR 寄存器 (WO)
**UART0 Transmitter Holding Register (DLAB = 0)
**************************************************************************
*/
typedef	struct	_uartthr_
{
	INT32U	WritedData	:8;
	INT32U	Reserve		:24;
}stcUARTTHR,*P_stcUARTTHR;

#define UARTTHR(UARTNum)		(*((volatile P_stcUARTTHR)(UARTTHR_BADR + UARTNum* UART_OFFSET_ADR)))

/*
**************************************************************************
**					定义 UARTDLL 寄存器 (RW)
**Divisor Latch LSB Register (DLAB = 1)
**************************************************************************
*/
typedef	struct	_uartdll_
{
	INT32U	DLL			:8;
	INT32U	Reserve		:24;
}stcUARTDLL,*P_stcUARTDLL;

#define UARTDLL(UARTNum)		(*((volatile P_stcUARTDLL)(UARTDLL_BADR + UARTNum* UART_OFFSET_ADR)))

/*
**************************************************************************
**					定义 UARTDLM 寄存器 (RW)
**Divisor Latch MSB Register ( (DLAB = 1)
**************************************************************************
*/
typedef	struct	_uartdlm_
{
	INT32U	DLM			:8;
	INT32U	Reserve		:24;
}stcUARTDLM,*P_stcUARTDLM;

#define UARTDLM(UARTNum)		(*((volatile P_stcUARTDLM)(UARTDLM_BADR + UARTNum* UART_OFFSET_ADR)))
/*
**************************************************************************
**					定义 UARTIER 寄存器 (R/W)
**The UARTIER is used to enable the four UART interrupt sources.(DLAB = 0)
**************************************************************************
*/
typedef	struct  _uartier_
{
		INT32U	ERxDA	:1;		//Enable Rx Data Available nterrupt
		INT32U	ETHRE	:1;		//Enable THRE Interrupt
		INT32U	ERxLS	:1;		//Enable Rx Line Status Interrupt
		//////////////////////
		//		UART1 ONLY	//
		//////////////////////
		INT32U	EMS		:1;		//Enable Modem Status Interrupt
		INT32U	Reserve	:28;		
}stcUARTIER,*P_stcUARTIER;

#define UARTIER(UARTNum)		(*((volatile P_stcUARTIER)(UARTIER_BADR + UARTNum* UART_OFFSET_ADR)))

/*
**************************************************************************
**					定义 UARTIIR 寄存器 (RO)
**The UARTIIR provides a status code that denotes the priority and source of 
**a pending interrupt. The interrupts are frozen during an U0IIR access. 
**If an interrupt occurs during an UARTIIR access, the interrupt is recorded 
**for the next UARTIIR access.
**************************************************************************
*/
typedef	struct  _uartiir_
{
		INT32U	IntPd	:1;			//0: At least one interrupt is pending.
									//1: No pending interrupts.

		INT32U	IId		:3;			//011: 1. Receive Line Status (RLS)
									//010: 2a.Receive Data Available (RDA)
									//110: 2b.Character Time-out Indicator (CTI)
									//001: 3. THRE Interrupt.
		INT32U	RSV_BIT_1	:2;		
		INT32U	FIFO		:2;		//These bits are equivalent to UxFCR0.
		INT32U	Reserve		:24;
}stcUARTIIR,*P_stcUARTIIR;

#define UARTIIR(UARTNum)		(*((volatile P_stcUARTIIR)(UARTIIR_BADR + UARTNum* UART_OFFSET_ADR)))

/*
**************************************************************************
**					定义 UARTFCR 寄存器(WO)
**The UARTFCR controls the operation of the UART Rx and Tx FIFOs.
**************************************************************************
*/
typedef	union	_uartfcr_
{

		INT32U	EFIFO		:1;		//Active high enable for both UART Rx and Tx FIFOs and UFCR7:1 access.
									//This bit must be set for proper UART0 opearation.Any transition on 
									//this bit will automatically clear the UART FIFOs.

		INT32U	RxFIFO		:1;		//Writing a logic 1 to UxFCR1 will clear all bytes in UART Rx FIFO and 
									//reset the pointer logic. This bit is self-clearing.

		INT32U	TxFIFO		:1;		//Writing a logic 1 to UxFCR2 will clear all bytes in UART Tx FIFO and
									//reset the pointer logic. This bit is self-clearing.
		
		INT32U	RSV_BIT_1	:3;		//

		INT32U	RxTLS		:2;		//00: trigger level 0 (default= 1)
									//01: trigger level 1 (default= 4)
									//10: trigger level 2 (default= 8)
									//11: trigger level 3 (default= 14)
									//These two bits determine how many receiver UART FIFO characters must be written
									//before an interrupt is activated. The four trigger levels are defined by the user at
									//compilation allowing the user to tune the trigger levels to the FIFO depths chosen.
		INT32U	Reserve	:24;							
}stcUARTFCR,*P_stcUARTFCR;

#define UARTFCR(UARTNum)		(*((volatile P_stcUARTFCR)(UARTFCR_BADR + UARTNum* UART_OFFSET_ADR)))

/*
**************************************************************************
**					定义 UARTLCR 寄存器(R/W)
**The UARTLCR determines the format of the data character that is to be 
**transmitted or received.
**************************************************************************
*/
typedef	struct	_uartlcr_
{
		INT32U	WordLen			:2;		//00: 5 bit character length
										//01: 6 bit character length
										//10: 7 bit character length
										//11: 8 bit character length

		INT32U	Stop			:1;		//0: 1 stop bit
										//1: 2 stop bits (1.5 if UARTLCR[1:0]=00)

		INT32U	ParityEnable	:1;		//0: Disable parity generation and checking
										//1: Enable parity generation and checking

		INT32U	ParityMode		:2;		//00: Odd parity
										//01: Even parity
										//10: Forced “1” stick parity
										//11: Forced “0” stick parity

		INT32U	BreakEnable		:1;		//0: Disable break transmission
										//1: Enable break transmission.
										//Output pin UART0 TxD is forced to logic 0 when U0LCR6 is active high.

		INT32U	DLABAcceEn		:1;		//0: Disable access to Divisor Latches
										//1: Enable access to Divisor Latches

		INT32U	Reserve			:24;
}stcUARTLCR,	*P_stcUARTLCR;

#define UARTLCR(UARTNum)		(*((volatile P_stcUARTLCR)(UARTLCR_BADR + UARTNum* UART_OFFSET_ADR)))
/*
**************************************************************************
**					定义 UARTLSR 寄存器(RO)
**The U0LSR is a read-only register that provides status information 
**on the UART0 Tx and Rx blocks.
**************************************************************************
*/
typedef struct	 _uartlsr_
	{
		INT32U	RDR		:1;		//0: U0RBR is empty
								//1: U0RBR contains valid

		INT32U	OE		:1;		//0: Overrun error state is inactive.
								//1: Overrun error state is active.

		INT32U	PE		:1;		//0: Parity error state is inactive.
									//1: Parity error status is active.

		INT32U	FE		:1;		//0: Framing error state is inactive.
								//1: Framing error state is active.

		INT32U	BI		:1;		//0: Break interrupt state is inactive.
									//1: Break interrupt state is active.

		INT32U	THRE	:1;		//0: U0THR contains valid data.
								//1: U0THR is empty.

		INT32U	TEMT	:1;		//0: U0THR and/or the U0TSR contains valid data.
								//1: U0THR and the U0TSR are empty.

		INT32U	RXFE:1;	//0: U0RBR contains no UART0 Rx errors or U0FCR0=0.
								//1: UART0 RBR contains at least one UART0 Rx error.
		INT32U	RSV_BIT	:24;
}stcUARTLSR,*P_stcUARTLSR;

#define UARTLSR(UARTNum)		(*((volatile P_stcUARTLSR)(UARTLSR_BADR + UARTNum* UART_OFFSET_ADR)))

/*
****************************************
**	UART基本函数声明
****************************************
*/
/*
*********************************************************************************************************
** 函数名称:	void UARTInit (eUARTNUM UARTNum)     
** 全局变量: 	无
** 作   者:    滕欣欣
** 日   期:    2004年5月02日
** 描    述:	UART初始化
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描  述: 		
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************
*/
UART_GLOBAL	void UARTInit (eUARTNUM UARTNum);
/*
*********************************************************************************************************
** 函数名称:	void UARTIntInit (eUARTNUM UARTNum)     
** 全局变量: 	无
** 作   者:    滕欣欣
** 日   期:    2004年5月02日
** 描    述:	UART中断初始化
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描  述: 		
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************
*/
UART_GLOBAL	void UARTIntInit (eUARTNUM UARTNum);

/*
*********************************************************************************************************
** 函数名称:	void UARTSend(eUARTNUM UARTNum,INT32U Len,INT8U *Buf)    
** 全局变量: 	无
** 作   者:    滕欣欣
** 日   期:    2004年5月02日
** 描    述:	UART数据发送程序
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描  述: 		
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************
*/
UART_GLOBAL void UARTSend(eUARTNUM UARTNum,INT32U Len,INT8U *Buf);
/*
************************************************************************************************************************
**函数原型	:  	void		void UARTRcv(eUARTNUM UARTNum,INT32U Len,INT8U *Buf)
**参数说明	:  	Len		-->>	接收字符长度;<=16;
				Buf		-->>	解收数据的缓冲区首址
**返回	值	:	无
**说	明	:	本函数用于UART0接收数据,应用FIFO
************************************************************************************************************************
*/
UART_GLOBAL void UARTRcv(eUARTNUM UARTNum,INT32U Len,INT8U *Buf);
/*
*********************************************************************************************************
** 函数名称:	void UARTxISR (void)     
** 全局变量: 	无
** 作   者:    滕欣欣
** 日   期:    2004年5月02日
** 描    述:	UART中断服务程序
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描  述: 		
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************
*/
UART_GLOBAL void __irq UART0ISR (void);
/*
**********************************************************************************************************
**                            End Of File
**********************************************************************************************************
*/
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -