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

16c554 的头文件的更多相关文章

  1. 【C】.h头文件的重复包含问题

    .h头文件存在的意义就是封装,可以方便多个.c源文件使用,但要防止.h头文件被同一个.c源文件多次包含. 例如, io.h文件 #ifndef _IO_H_ #define _IO_H_ #defin ...

  2. C/C++头文件区别

    在从C迁移到C++时,引用的头文件经常忘记是C的还是C++特有的 1. *.h   limits.h ctype.h 2. c* climits cctype [结尾不含.h] 3. 其余的都属于C+ ...

  3. iOS开发中遇到的错误整理 - 集成第三方框架时,编译后XXX头文件找不到

    iOS编译报错-XXX头文件找不到 错误出现的情况: 自己在继承第三方的SDK的时候,明明导入了头文件,但是系统报错,提示头文件找不到 解决方法 既然系统找不到,给他个具体路径,继续找去! 路径就填写 ...

  4. 使用powershell批量添加Keil和IAR的头文件路径

    在Keil和IAR的工程中,为了使文件结构清晰,通常会设置很多的子文件夹,然后将头文件和源文件放在不同的子文件夹中,这样就需要手动添加这些头文件夹的路径.当工程结构非常复杂时,文件夹的数量就非常多,特 ...

  5. C/C++头文件使用 #ifndef #define #endif 的原因

    背景 在编译的时候,出现"redefine"的错误,最后检查才发现对应的头文件没有写正确的预编译信息: #ifndef _HeadFileName_H #define _HeadF ...

  6. Qt - 错误总结 - 在自定义类头文件中添加Q_OBJECT 编译时报错(undefined reference to ‘vtable for xxThread)

    错误提示:在添加的QThread子类头文件添加Q_OBJECT时,编译程序,出现"undefined reference to 'vtable for xxThread'"错误提示 ...

  7. C语言中,头文件和源文件的关系(转)

    简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句, ...

  8. 配置apue的头文件apue.h和unp的头文件anp.h

    配置apue的头文件apue.h和unp的头文件anp.h 如果要使用gcc -g 来生成可调试文件一定要修改Make.defines.linux文件中的CFLAGS变量 修改为:CFLAGS=-an ...

  9. c/c++头文件_string

    string, cstring, string.h 一.string头文件 主要包含一些字符串转换的函数 // sto* NARROW CONVERSIONS// sto* WIDE CONVERSI ...

随机推荐

  1. Elasticsearch入门基础(1)

    基础概念 Elasticsearch有几个核心概念.从一开始理解这些概念会对整个学习过程有莫大的帮助. 接近实时(NRT)         Elasticsearch是一个接近实时的搜索平台.这意味着 ...

  2. Activity与Service通信

    Activity与Service通信的方式有三种: 继承Binder类 这个方式只有当你的Acitivity和Service处于同一个Application和进程时,才可以用,比如你后台有一个播放背景 ...

  3. UNIX网络编程读书笔记:select函数

    select函数概况: select函数允许进程指示内核等待多个事件中的任何一个发生,并仅在有一个或多个事件发生或经历一段指定的时间后才唤醒它. 作为一个例子,我们可以调用select,告知内核仅在下 ...

  4. windows vbs启动多个应用程序并使程序最小化(显示桌面)

      windows vbs启动多个应用程序并使程序最小化(显示桌面) CreationTime--2018年7月26日11点18分 Author:Marydon 1.应用场景 每天开机后,都需要打开平 ...

  5. 【Linux】nl命令

    用途 nl主要用于输出行号,但是与cat -n不太一样的是,可以自定义输出行号的样式 全称 nl的全称为:Number of Lines 参数 -b :指定行号指定的方式,主要有2种: -b a :表 ...

  6. PHP代码优化之细节优化(转)

    PHP 独特的语法混合了 C.Java.Perl 以及 PHP 自创新的语法.它可以比 CGI或者Perl更快速的执行动态网页.用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML ...

  7. SEH, SAFESEH相关

    SEH, SAFESEH相关 1,触发seh异常让目标程序Read/Write无效地址,如果和栈底相邻的内存只读,尝试覆盖超出栈底 2,如何找到(显示)要覆盖的SEHod语法:dd fs:[0]sof ...

  8. [Windows驱动开发](三)基础知识——驱动例程

    一.NT式驱动的基本例程 1. 驱动入口函数——DriverEntry // 驱动程序的一般性定义 NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObje ...

  9. C#位操作

    一.原码与补码 在计算机系统中,数值一律用补码来存储(表示).主要原因:使用补码,可以将符号位和其他位统一处理:同时减法也可按加法来处理.另外,两个补码表示的数相加时,如果最高位(符号位)有进位,则进 ...

  10. js 字符串拼接 html 累加 html 叠加

    正常来说已经使用es6 的 模板了如`` //页面层 layer.open({ type: 1, content:`<div class="child_card"> & ...