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

📄 uart.h

📁 在CCS开发环境下的DSP 5502的UART控制框架程序
💻 H
字号:

/********************************************************************************/
/* UART.H	v1.00																*/
/* 版权(c)	2003-   	北京合众达电子技术有限责任公司							*/
/* 设计者:	段立锋																*/
/********************************************************************************/
#ifndef _UART
#define _UART

#include  "type.h"

/********************************************************************************/
/* 常量定义																		*/
/********************************************************************************/

// UART instance enumeration
typedef enum
{
    UART_A  = 0,
	UART_B  = 1
} UartId, *PUartId;

extern HANDLE UartChannel;
extern unsigned int *SendDataPtr;

/************************************************************************/
/*		Register definiton for system I/O control and status registers  */
/************************************************************************/

#define SYSCNTL1 	(*(volatile unsigned int *)(0x280000))  // Sytem control register 1
#define SYSSTAT1 	(*(volatile unsigned int *)(0x280003))  // Sytem status  register 1


/*System interruption Register*/
#define sysstat1   0x280003  /*系统中断状态寄存器在IO空间的地址。只读 */

/**********************************************************************/
/*		Register definiton for B path								  */
/**********************************************************************/

#define TLARHR	(*(volatile int *)(0x280008))	/*接收保持寄存器的地址,只读*/
#define TLATHR 	(*(volatile int *)(0x280008))	/*发送保持寄存器的地址,只写*/
#define TLAIER 	(*(volatile int *)(0x280009))	/*中断使能寄存器的地址,读写*/
#define TLAIIR 	(*(volatile int *)(0x28000A))	/*中断标志寄存器的地址,只读*/
#define TLAFCR 	(*(volatile int *)(0x28000A))	/*FIFO控制寄存器的地址,只写*/
#define TLALCR 	(*(volatile int *)(0x28000B))	/*线路控制寄存器的地址,读写*/
#define TLAMCR 	(*(volatile int *)(0x28000C))	/*MODEM控制寄存器的地址,读写*/
#define TLALSR 	(*(volatile int *)(0x28000D))	/*线路状态寄存器的地址,只读*/
#define TLAMSR 	(*(volatile int *)(0x28000E))	/*MODEM状态寄存器的地址,只读*/
#define TLASPR 	(*(volatile int *)(0x28000F))	/*暂存寄存器的地址,读写*/
#define TLADLL 	(*(volatile int *)(0x280008))
#define TLADLH 	(*(volatile int *)(0x280009))
#define TLAEFR 	(*(volatile int *)(0x28000A))
#define TLAXON1 	(*(volatile int *)(0x28000C))
#define TLAXON2 	(*(volatile int *)(0x28000D))
#define TLAXOFF1 	(*(volatile int *)(0x28000E))
#define TLAXOFF2 	(*(volatile int *)(0x28000F))
#define TLATCR 		(*(volatile int *)(0x28000E))
#define TLATLR 		(*(volatile int *)(0x28000F))
#define TLAFIFO 	(*(volatile int *)(0x28000F))

/**********************************************************************/
/*		Register definiton for B path								  */
/**********************************************************************/
#define TLBRHR	(*(volatile int *)(0x280010)) 	/*接收保持寄存器的地址,只读*/
#define TLBTHR 	(*(volatile int *)(0x280010))	/*发送保持寄存器的地址,只写*/	
#define TLBIER 	(*(volatile int *)(0x280011))	/*中断使能寄存器的地址,读写*/
#define TLBIIR 	(*(volatile int *)(0x280012))	/*中断标志寄存器的地址,只读*/
#define TLBFCR 	(*(volatile int *)(0x280012))	/*FIFO控制寄存器的地址,只写*/
#define TLBLCR 	(*(volatile int *)(0x280013))	/*线路控制寄存器的地址,读写*/
#define TLBMCR 	(*(volatile int *)(0x280014))	/*MODEM控制寄存器的地址,读写*/
#define TLBLSR 	(*(volatile int *)(0x280015))	/*线路状态寄存器的地址,只读*/
#define TLBMSR 	(*(volatile int *)(0x280016))	/*MODEM状态寄存器的地址,只读*/
#define TLBSPR 	(*(volatile int *)(0x280017))	/*暂存寄存器的地址,读写*/
#define TLBDLL 	(*(volatile int *)(0x280010))
#define TLBDLH 	(*(volatile int *)(0x280011))
#define TLBEFR 	(*(volatile int *)(0x280012))
#define TLBXON1 	(*(volatile int *)(0x280014))
#define TLBXON2 	(*(volatile int *)(0x280015))
#define TLBXOFF1 	(*(volatile int *)(0x280016))
#define TLBXOFF2 	(*(volatile int *)(0x280017))
#define TLBTCR 		(*(volatile int *)(0x280016))
#define TLBTLR 		(*(volatile int *)(0x0x280017))
#define TLBFIFO 	(*(volatile int *)(0x280017))

/*********************************************************************************
*外部设备寄存器及地址                                                           *
*********************************************************************************
*1、外部UART的寄存器,及寄存器内容
**TL16C752B寄存器地址说明:
*UART的寄存器在IO空间的地址读说明*/
#define rhr	  0x0000 /*接收保持寄存器的地址,只读*/
#define thr   0x0000 /*发送保持寄存器的地址,只写*/
#define ier   0x0001 /*中断使能寄存器的地址,读写*/
#define iir   0x0002 /*中断标志寄存器的地址,只读*/
#define fcr   0x0002 /*FIFO控制寄存器的地址,只写*/
#define lcr   0x0003 /*线路控制寄存器的地址,读写*/
#define mcr   0x0004 /*MODEM控制寄存器的地址,读写*/
#define lsr   0x0005 /*线路状态寄存器的地址,只读*/
#define msr   0x0006 /*MODEM状态寄存器的地址,只读*/
#define spr   0x0007 /*暂存寄存器的地址,读写*/
/*复合寻址寄存器地址说明*/
#define dll   0x0000 /*低位除数寄存器的地址,读写*/
#define dlh   0x0001 /*高位除数寄存器的地址,读写*/
#define efr   0x0002 /*增强功能寄存器的地址,读写*/
#define xon1  0x0004
#define xon2  0x0005
#define xoff1 0x0006
#define xoff2 0x0007
#define tcr   0x0006 /*传送寄存器*/
#define tlr   0x0007 /*触发水平寄存器*/
#define frd   0x0007 /*FIFO准备好寄存器*/
/*UART通路地址*/
#define chanel_a 0x280008 /*A通路*/
#define chanel_b 0x280010 /*B通路*/


/*UART参数的设置*/
/*波特率设置*/
/*----Baud rate and divisor table:(input clok is 30.72MHz)----------*/ 
/*------------------TLDLH-------TLDLL-------------------\
 B		1200		0x06		0x20	
 a		1800		0x04		0x2E		
 u		2400		0x03		0x20
 d		3600		0x02		0x12
 r		4800		0x01		0x90
 a		7200		0x01		0x0E
 t		9600		0x00		0xC8
 e	   19200		0x00		0x64
---------------------------------------------------------*/
#define UARTBAUD1200		0x0620
#define UARTBAUD4800		0x0190
#define UARTBAUD2400		0x0320
#define UARTBAUD9600		0x00C8
#define UARTBAUD19200		0x0064
#define UARTBAUD38400		0x0032

/*数据格式设置*/
#define data_w5     0x0000 /*数据长度为5*/
#define data_w6     0x0001 /*数据长度为6*/
#define data_w7     0x0002 /*数据长度为7*/
#define data_w8     0x0003 /*数据长度为8*/

#define data_s1     0x0000 /*数据停止位为1*/
#define data_s2     0x0004 /*数据停止位为1个半(数据长度为5)或2个*/

#define data_p      0x0008 /*设置较验位*/
#define data_po     0x0008 /*设置奇较验*/
#define data_pe     0x0018 /*设置偶较验*/
#define data_parity 0x0020 /*设置较验位*/
#define data_break  0x0040 /*设置当发送终止时,输出为低*/
#define uart_parity data_p + data_pe 

/*FIFO设置*/
#define fifo_disable 0x0000 /*禁止fifo*/
#define fifo_enable  0x0001 /*使能fifo*/
#define fifo_rreset  0x0002 /*复位接收fifo*/
#define fifo_xreset  0x0004 /*复位发送fifo*/
#define fifo_dma     0x0008 /*设置DMA方式*/
#define fifo_txdip8    0x0000 /*fifo深度为8个*/
#define fifo_txdip16   0x0010 /*fifo深度为16个*/
#define fifo_txdip32   0x0020 /*fifo深度为32个*/
#define fifo_txdip56   0x0030 /*fifo深度为56个*/
#define fifo_rxdip8    0x0000 /*fifo深度为8个*/
#define fifo_rxdip16   0x0040 /*fifo深度为16个*/
#define fifo_rxdip32   0x0080 /*fifo深度为56个*/
#define fifo_rxdip56   0x00b0 /*fifo深度为60个*/

#define UartLoop       0x0010 /*设置自闭环方式*/
#define UartLoop_NO	   0x0000 /* 取消自闭环方式*/  

/*UART中断设置*/
#define  uartint_rhr   0x0001 /*设置接收中断*/
#define  uartint_thr   0x0002 /*设置发送中断*/
#define  uartint_rls   0x0004 /*设置接收状态中断*/
#define  uartint_msr   0x0008 /*设置MODEM状态中断*/
#define  uart_sleep    0x0010 /*设置接收中断*/
#define  uartint_xoff  0x0020 /*设置xoff中断*/
#define  uartint_rts   0x0040 /*设置rts中断*/
#define  uartint_cts   0x0080 /*设置cts中断*/

#define  uart_enable   0x0008 /*使能UART中断*/
#define  uart_disable   0x0000 /*关闭UART中断*/

/********************************************************************************/
/* 函数声明																		*/
/********************************************************************************/
/******************************************************************************/
/* delay() - 延时一段时间							  						  */
/*                                                                            */
/* 参数:                                                            		  */
/*      	无  								          					  */
/*                                                                            */
/* 返回值: 无																  */
/*                                                                            */
/******************************************************************************/
void delay(void);

/******************************************************************************/
/* uart_open() - 打开相应的异步串口,获得有效的句柄							  */
/*                                                                            */
/* 参数:                                                            		  */
/*     uart:选择要打开的异步串口   								          */
/*                                                                            */
/* 返回值: 对应的有效句柄  					                              */
/*			当返回值为0xFFFF时,为无效句柄                                    */
/*                                                                            */
/******************************************************************************/
HANDLE uart_open(UartId uart);
/********************************************************************************/
/*																				*/
/* 函数定义:uint _uart_write_reg(uint channel, uint reg,uint regdata)   		*/
/* 功    能:串口初始化                											*/
/*																				*/
/* 入口参数:A	  ---- channel:串口A或是串口B									*/
/*          	   (SP+n) ---- 寄存器reg,如果是.far_mode模式则n为2,否则n为1	*/
/*                     ---- 要写入的数据regdata                                 */
/* 出口参数:A	  ---- 读回寄存器数据											*/
/* 资源使用:AR0,B                                                              */
/*																				*/
/********************************************************************************/
unsigned int uart_write_reg(HANDLE channel,unsigned int reg,unsigned int regdata);
/********************************************************************************/
/*																				*/
/* 函数定义:uint _uart_read_reg(uint channel, uint reg)  						*/
/* 功    能:串口初始化                											*/
/*																				*/
/* 入口参数:A	  ---- channel:串口A或是串口B									*/
/*          	   (SP+n) ---- 寄存器reg,如果是.far_mode模式则n为2,否则n为1	*/
/* 出口参数:A	  ---- 读回寄存器数据											*/
/* 资源使用:AR0	       													    */
/*																				*/
/********************************************************************************/
unsigned int uart_read_reg(HANDLE channel, unsigned int reg);
/******************************************************************************/
/* uart_recive() - 串口接收,并设置相应的寄存器默认值  	                      */
/*                                                                            */
/* 参数:                                                            		  */
/*    Channel:	   有效的串口句柄											  */
/*	  ReadLongth:  每次从缓冲区读取的长度                                     */                   
/*	  rec_data:    缓冲区的首址                                               */
/*                                                                            */
/* 返回值   				        				                          */
/*                                                                            */
/******************************************************************************/
unsigned int uart_receive_single(HANDLE Channel);
/******************************************************************************/
/* uart_send_sigle() - 串口发送一个数据,并设置相应的寄存器默认值              */
/*                                                                            */
/* 参数:                                                            		  */
/*    Channel:有效的串口句柄												  */ 
/*	  send_data: 要发送的数据                                                 */
/*                                                                            */
/* 返回值   				        				                          */
/*                                                                            */
/******************************************************************************/
void uart_send_sigle(HANDLE Channel,unsigned int send_data);
/******************************************************************************/
/* uart_send() - 串口发送,并设置相应的寄存器默认值  	                      */
/*                                                                            */
/* 参数:                                                            		  */
/*    Channel:有效的串口句柄												  */
/*	  longth:  缓冲区的长度                                                   */ 
/*	  send_data: 缓冲区的首址                                                 */
/*                                                                            */
/* 返回值   				        				                          */
/*                                                                            */
/******************************************************************************/						
void uart_send(HANDLE Channel,unsigned int longth,unsigned int *send_data);
/******************************************************************************/
/* uart_setup() - 设置串口通讯的状态

⌨️ 快捷键说明

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