//------------------------------------------------------------------------------
#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. 微信-.NET调用JS-SDK

    注意:1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.2. 如果发现在 Android 不能分享自定义内 ...

  2. 获取jQuery版本号

    今天在一个页面需要知道jquery版本号,来决定使用什么样的方法,有以下方式可以获取到 $.fn.jquery $.prototype.jquery 这两种方式都可以获取到jquery的版本号

  3. 使用Js获取和更改FCKeditor编辑器里的内容

    之前在一个系统里使用了FCKeditor编辑器,由于项目需求需要在FCKeditor里添加一个自定义的按钮用于实现自己的需求 主要是在点击该按钮时删除或添加FCKeditor编辑器里的内容 其实是一个 ...

  4. 转:Eclipse ADT的Custom debug keystore所需证书规格

    转:http://blog.k-res.net/archives/1229.html Eclipse ADT的Custom debug keystore所需证书规格 三月 8, 2013  |  Po ...

  5. 第一个Xamarin的 Android 应用程序!

    你好,安卓 Xamarin的工作室 Xamarin的应用程序图标和启动屏幕 脱机使用PDF格式: 介绍与Xamarin的Android开发 示例代码: 开始使用应用程序的探险家 显示说明: Visua ...

  6. PHP快速入门 如何操作MySQL

    1 创建一个新的数据库,注意类型设置为utf8_general_ci 2 在数据库中创建一个新的表,比如叫做tg_user(先从左侧选择刚才创建的数据库) 3 创建第一个字段,自动编号.我们估计网站的 ...

  7. android 程序更新(没有sdcard)

    今天总结一下我们写的程序需要更新(默认用户已经安装上旧版本了),而用户更新时却没有sdcard的情况,如果有sdcard,那就不用废话了... 先说一下软件更新的基本原理,从服务器下载一个程序的apk ...

  8. Javascript的解析器

    Carakan C/C++ http://my.opera.com/core/blog/2009/02... SquirrelFish C++ http://trac.webkit.org/wiki/ ...

  9. Spring整合JDBC实现简单的增删改

    Spring整合JDBC实现简单的增删改: 1.导入Spring的包和数据库的驱动包: 2.选择一个数据源(dbcp和C3P0) 3.导入数据源的包(这里我们使用dbcp) <span styl ...

  10. 算法笔记_151:算法提高 01背包(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个. 输入格式 输入的第 ...