📄 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 + -