📄 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;
/*********************************************************************************
*外部设备寄存器及地址 *
*********************************************************************************
*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 0x0000 /*A通路*/
#define chanel_b 0x0001 /*B通路*/
/*UART参数的设置*/
/*波特率设置*/
#define buad_1k2 0x04E2
#define buad_2k4 0x0271
#define buad_4k8 0x0138
#define buad_9k6 0x009C
#define buad_19k2 0x004E
#define buad_38k4 0x0027
/*数据格式设置*/
#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 0x0000 /*设置奇较验*/
#define data_pe 0x0010 /*设置偶较验*/
#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 /*设置自闭环方式*/
/*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中断*/
/********************************************************************************/
/* 函数声明 */
/********************************************************************************/
/******************************************************************************/
/* 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: 缓冲区的首址 */
/* */
/* 返回值 */
/* */
/******************************************************************************/
int uart_recive(HANDLE Channel, unsigned int *rec_data);
/******************************************************************************/
/* uart_send_sigle() - 串口发送一个数据,并设置相应的寄存器默认值 */
/* */
/* 参数: */
/* Channel:有效的串口句柄 */
/* send_data: 要发送的数据 */
/* */
/* 返回值 */
/* */
/******************************************************************************/
unsigned int uart_send_sigle(HANDLE Channel,unsigned int send_data);
/******************************************************************************/
/* uart_send() - 串口发送,并设置相应的寄存器默认值 */
/* */
/* 参数: */
/* Channel:有效的串口句柄 */
/* longth: 缓冲区的长度 */
/* send_data: 缓冲区的首址 */
/* */
/* 返回值 */
/* */
/******************************************************************************/
unsigned int uart_send(HANDLE Channel,unsigned int longth,unsigned int *send_data);
/******************************************************************************/
/* uart_setup() - 设置串口通讯的状态
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -