• 16c554 的头文件


    //------------------------------------------------------------------------------ 
    #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 
    //-----
  • 相关阅读:
    vue使用百度统计埋点
    修改JAVA字节码
    由前序遍历和中序遍历构建二叉树-Python
    二叉树的最大深度-Python
    二叉树的层序遍历-Python
    判断是否是对称二叉搜索树
    什么是主动学习方法
    验证二叉搜索树-Python
    DevExpress如何汉化XAF
    python install 失败?
  • 原文地址:https://www.cnblogs.com/zym0805/p/5089363.html
Copyright © 2020-2023  润新知