//------------------------------------------------------------------------------ #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 //-----