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

📄 at16c554.h

📁 这是一个C51的有关16c554的驱动源码
💻 H
字号:
//------------------------------------------------------------------------------
#ifndef    AT16C554H
#define    AT16C554H

//------------------------------------------------------------------------------

#include   "timer.h"
#include   "AT78E58BP.H"
#include   "System.h"
#include   "Asyn_422.H"
#include   <intrins.h>
#include   <string.h>
//------------------------------------------------------------------------------
//							常量定义
//------------------------------------------------------------------------------
#define	 PortNumber			4
#define  SERIAL_STU_BUSY 	0x01				// 串行口忙标志位,1为忙,0为空闲
#define  SERIAL_STU_FREE 	0x00			
//------------------------------------------------------------------------------
//                  波特率定义
//------------------------------------------------------------------------------
#define 	CY18432M
#ifdef 		CY18432M
	#define 	B50 		0x0900				// DLM 为高八位,DLL 为低八位
	#define 	B300 		0x0180
	#define 	B600 		0x00c0
	#define 	B1200 		0x0060
	#define 	B2400 		0x0030
	#define 	B4800 		0x0018
	#define 	B9600 		0x000c
	#define 	B19200 		0x0006
	#define 	B38400 		0x0003
	#define 	B57600 		0x0002
	#define 	B115200 	0x0001
#else
	#define 	B200 		0x0900				// DLM 为高八位,DLL 为低八位
	#define 	B1200 		0x0180
	#define 	B2400 		0x00c0
	#define 	B4800 		0x0060
	#define 	B9600 		0x0030
	#define 	B19200 		0x0018
	#define 	B38400 		0x000c
	#define 	B76800 		0x0006
	#define 	B153600 	0x0003
	#define 	B230400 	0x0002
	#define 	B460800 	0x0001
#endif
//------------------------------------------------------------------------------
//           16C554 内部寄存器定义
//------------------------------------------------------------------------------
#define 		RHR 			0X00		// 接受数据保持寄存器, 					只读
#define 		THR 			0X00		// 发送数据保持寄存器, 					只写
#define 		IER 			0X01		// 中断允许寄存器,     					只写
#define 		FCR 			0X02		// FIFO 控制寄存器,						只写
#define 		ISR 			0X02		// 中断状态寄存器,							只读
#define 		LCR 			0X03		// 线控制寄存器,							只写
#define 		MCR 			0X04		// MODEM 控制寄存器,						只写
#define 		LSR 			0X05		// 线状态寄存器,							只读
#define 		MSR 			0X06		// MODEM 状态寄存器,						只读
#define 		SPR 			0X07		// 中间结果暂存寄存器,						可读写
#define 		DLL 			0X00		// 波特率发生分频因子低八位,LCR bit7 为1,	可读写
#define 		DLM 			0X01		// 波特率发生分频因子高八位,LCR bit7 为1,	可读写

#define FIFO_EN 				0X01		// FIFO 使能命令字
#define FIFO_TRI_LEVEL_1 		0X00		// FIFO 触发级别为1个字节
#define FIFO_TRI_LEVEL_4 		0X40		// FIFO 触发级别为4个字节
#define FIFO_TRI_LEVEL_8 		0X80		// FIFO 触发级别为8个字节
#define FIFO_TRI_LEVEL_14 		0XC0		// FIFO 触发级别为14个字节
#define FIFO_DMA_MODE 			0X08		// FIFO DMA 模式选择命令字
#define FIFO_CLEAR_RCVR 		0X02		// 清除接受FIFO 中的内容数据
#define FIFO_CLEAR_XMIT 		0X04		// 清除发送FIFO 中的内容数据

#define IER_MODEM_INT 			0X08		// MODEM 状态中断屏蔽位
#define IER_RECEIVELINE_INT 	0X04		// 接受线状态中断屏蔽位
#define IER_TRANSMITHOLD_INT 	0X02		// 发送保持寄存器中断屏蔽位
#define IER_RECEIVEHOLD_INT 	0X01		// 接受保持寄存器中断屏蔽位

#define LCR_WORD_LEN5 			0X00		// 数据位长度为5
#define LCR_WORD_LEN6 			0X01		// 数据位长度为6
#define LCR_WORD_LEN7 			0X02		// 数据位长度为7
#define LCR_WORD_LEN8 			0X03		// 数据位长度为8
#define LCR_STOP_LEN1 			0X00		// 停止位长度为1
#define LCR_STOP_LEN2 			0X04		// 停止位长度为2 注意: 当数据位为5时停止位为1.5位
#define LCR_PARITY_EN 			0X08		// 校验位使能控制位
#define LCR_PARITY_EVEN 		0X10		// EVEN偶校验设置位,默任情况下为奇校验ODD
#define LCR_PARITY_SET 			0X20		// 奇偶校验强制设置位
#define LCR_OUT_BREAK 			0X40		// TX输出BREAK信号
#define LCR_DIV_EN 				0X80		// 允许发送波特率
#define LCR_DIV_Dis				0X00		// 禁止发送波特率
#define MCR_INTX_EN 			0X08		// 中断引脚输出允许控制命令字
#define MCR_INTX_Dis 			0X00		// 中断引脚输出禁止控制命令字

//------------------------------------------------------------------------------
//           16C554 中断事件定义
//------------------------------------------------------------------------------
#define EVENT_LSR 				0X06		// LSR 状态寄存器事件
#define EVENT_LSR_RECEIVE 		0X01		// 数据接受保存到保存寄存器或FIFO中
#define EVENT_LSR_OVERRUN 		0X02		// 接受移位积存器中的数据发生覆盖错误事件
#define EVENT_LSR_PARITY 		0X04		// 接受数据校验错误事件
#define EVENT_LSR_FRAMING 		0X08		// 接受数据发生帧错误
#define EVENT_LSR_BREAK 		0X10		// 接受到一个BREAK 事件
#define EVENT_LSR_TRANHOLDEMPTY 0X20		// 发送保持寄存器或FIFO 空事件允许装载数据
#define EVENT_LSR_TRANSMITEMPTY 0x40		// 发送器空事件
#define EVENT_LSR_FIFOERROR 	0X80		// FIFO 中有错误数据
#define EVENT_RXRDY 			0X04		// 数据接受就绪中断事件
#define EVENT_RXRDY_TIMEOUT 	0X0C		// 接受数据超时中断事件
#define EVENT_TXRDY 			0X02		// 数据发送就绪中断事件
#define EVENT_MSR 				0X00		// MODEM 状态中断事件
#define FIFO_SIZE 				16

//-------------------------------------------------------------------------------------
//      16C554 各端口RAM映射
//-------------------------------------------------------------------------------------
#define STARTADDR_SERIAL1 		0X0000		// 串行口通道1起始地址
#define STARTADDR_SERIAL2 		0X0008		// 串行口通道2起始地址
#define STARTADDR_SERIAL3 		0X0010		// 串行口通道3起始地址
#define STARTADDR_SERIAL4 		0X0018		// 串行口通道4起始地址

//-------------------------------------------------------------------------------------
//       其它常量
//-------------------------------------------------------------------------------------
#define   	Init_16c554_Count    	10
#define 	FREE_RESET 				0
#define 	RESET 					1
//-------------------------------------------------------------------------------------
//         多串口相关的数据结构
//-------------------------------------------------------------------------------------
typedef struct st_CommHandle
			   {
				 Uint   RAMAddress_Map;
				 Uchar  CommReceiveBuffer[CommMaxReceiveBuffer];  //串口接收缓冲区
				 Uchar  CommSendBuffer[CommMaxSendBuffer];        //串口发送缓冲区
				 Uchar  CommReceive_Head;                         //串口接收缓冲区头指针
				 Uchar  CommReceive_Trail;                        //串口接收缓冲区尾指针
				 Uchar  CommSend_Head;                            //串口发送缓冲区头指针
				 Uchar  CommSend_Trail;                           //串口发送缓冲区尾指针
			     Uchar  Comm_Stu;                                 //串行口发送器忙标志数组
			     Uchar  Comm_Priority;                            //串行口接受缓冲区数据处理优先级别数组
			   };//end struct

typedef struct st_CommHandle TCommHandle;
//-------------------------------------------------------------------------------------
//        多串口16C554 驱动程序公用函数
//-------------------------------------------------------------------------------------
extern bool 	Init_16c554(void);
extern void 	Port_open(Uchar PortID,Uint Baud);
extern void 	Port_close(Uchar PortID);
extern int  	Port_Receive(Uchar PortID,void *Buffer,int Count);
extern int  	Port_Send(Uchar PortID,void *Buffer,int Count);
//-------------------------------------------------------------------------------------
#endif
//-------------------------------------------------------------------------------------

⌨️ 快捷键说明

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