📄 uart.h
字号:
/********************************************************************************************************
* 文 件 名 : Comm.H
* 程 序 员 : (CaiJie) hnclcj@gmail.com
* (c) Copyright 2007-2007, CaiJie
* All Rights Reserved
* 说 明 : 这里的串口函数都是建立在LPC ARM7的基础上的 应用时根据硬件环境更改硬件相关函数 (硬件函数如下)
********************************************************************************************************/
#ifdef COMM_GLOBALS
#define COMM_EXT
#else
#define COMM_EXT extern
#endif
/********************************************************************************************************
* 全局常量
********************************************************************************************************/
#define COMM_MODULE_EN 1 // 串口模块总使能 0禁止
#define COMM0_UNIT_EN 1 // 串口0模块使能 0禁止
#define COMM1_UNIT_EN 0 // 串口1模块使能 0禁止
#if COMM_MODULE_EN > 0
#if COMM0_UNIT_EN > 0 // ---------------- 串口0的常量定义 -------------------
#define COMM0_DATA_STREAM_EN 0 // ASCII方式通讯时可采样XON/XOFF数据流模式来保证数据传输
#define COMM0_RXD_EN 1 // 串口0接收部分使能 0禁止
#define COMM0_RXD_NBITS 32 // 串口0缓存区大小数据类型 只能是8,16,32
#define COMM0_RXD_GETNMSGS_EN 1 // 串口0的数据计数检测函数使能 0禁止
#define COMM0_RXD_GET_EN 1 // 串口0字节接受 0禁止
#define COMM0_RXD_GETS_EN 0 // 串口0接收多数据 0禁止
#define COMM0_RXD_SIZE 56*1024 // 串口0的接收缓存配置 必须>=1
#define COMM0_TXD_EN 1 // 串口0发送部分使能 0禁止
#define COMM0_TXD_NBITS 32 // 串口0缓存区大小数据类型 只能是8,16,32
#define COMM0_TXD_PUT_EN 1 // 串口0字节发送 0禁止
#define COMM0_TXD_PUTS_EN 1 // 串口0发送多数据 0禁止
#define COMM0_TXD_SIZE 16 // 串口0的发送缓存配置 必须>=1
#endif
#if COMM1_UNIT_EN > 0 // ---------------- 串口1的常量定义 -------------------
#define COMM1_DATA_STREAM_EN 0 // ASCII方式通讯时可采样XON/XOFF数据流模式来保证数据传输
#define COMM1_RXD_EN 0 // 串口1接收部分使能 0禁止
#define COMM1_RXD_NBITS 32 // 串口1缓存区大小数据类型 只能是8,16,32
#define COMM1_RXD_GETNMSGS_EN 0 // 串口1的数据计数检测函数使能 0禁止
#define COMM1_RXD_GET_EN 1 // 串口1字节接受 0禁止
#define COMM1_RXD_GETS_EN 0 // 串口1接收多数据 0禁止
#define COMM1_RXD_SIZE 32 // 串口1的接收缓存配置 必须>=1
#define COMM1_TXD_EN 1 // 串口1发送部分使能 0禁止
#define COMM1_TXD_NBITS 32 // 串口1缓存区大小数据类型 只能是8,16,32
#define COMM1_TXD_PUT_EN 0 // 串口1字节发送 0禁止
#define COMM1_TXD_PUTS_EN 0 // 串口1发送多数据 0禁止
#define COMM1_TXD_SIZE 32 // 串口1的发送缓存配置 必须>=1
#endif
// -- 当串口的接收需要任务协助处理时下面两个定义有效 --
#define X0N 17 // 流控制字符 继续发送 20%
#define XOFF 19 // 流控制字符 停止发送 70%
// 两个处理CLK模块临界数据的两个宏 这里使用OS的临界宏
#define COMM_ENTER_CRITICAL() OS_ENTER_CRITICAL() // 进入临界宏
#define COMM_EXIT_CRITICAL() OS_EXIT_CRITICAL() // 退出临界宏
// ------------ 串口的各种返回信息 不能更改------------
#define COMM_ERR 0 // 串口配置有错误
#define COMM_NO_ERR 1 // 串口配置没有错误
#define COMM_BAD_BAUD 2 // 波特率错误
#define COMM_BAD_MODE 3 // 串口工作为错误的工作方式 包含校验 BIT数 停止位数
#define COMM_RXD_EMPTY 4 // 接收缓存没有数据 为空
#define COMM_RXD_FALSE 5 // 接收数据失败 只多字节接收时返回此信息
#define COMM_RXD_OK 6 // 接收数据正确
#define COMM_TXD_FALSE 7 // 发送失败
#define COMM_TXD_OK 8 // 发送正确
#endif
/********************************************************************************************************
* 全局变量和数据类型
********************************************************************************************************/
#if COMM_MODULE_EN > 0
#if COMM0_UNIT_EN > 0 && COMM0_RXD_EN > 0 // 串口0接收变量
#if COMM0_RXD_NBITS == 8
typedef INT8U COMM0_RXD_TYPE;
#if COMM0_RXD_SIZE > 255
#error "串口0接收缓冲大小跟数据类型不匹配!只能<=0xff!"
#endif
#elif COMM0_RXD_NBITS == 16
typedef INT16U COMM0_RXD_TYPE;
#if COMM0_RXD_SIZE > 0xffff
#error "串口0接收缓冲大小跟数据类型不匹配!只能<=0xffff!"
#endif
#elif COMM0_RXD_NBITS == 32
typedef INT32U COMM0_RXD_TYPE;
#if COMM0_RXD_SIZE > 0xffffffff
#error "串口0接收缓冲大小跟数据类型不匹配!只能<=0xffffff!"
#endif
#else
#error "串口0接收错误的数据类型宽度! 只能为8,16,32!"
#endif
#endif
#if COMM0_UNIT_EN > 0 && COMM0_TXD_EN > 0 // 串口0发送变量
#if COMM0_TXD_NBITS == 8
typedef INT8U COMM0_TXD_TYPE;
#if COMM0_TXD_SIZE > 255
#error "串口0发送缓冲大小跟数据类型不匹配!只能<=0xff!"
#endif
#elif COMM0_TXD_NBITS == 16
typedef INT16U COMM0_TXD_TYPE;
#if COMM0_TXD_SIZE > 0xffff
#error "串口0发送缓冲大小跟数据类型不匹配!只能<=0xffff!"
#endif
#elif COMM0_TXD_NBITS == 32
typedef INT32U COMM0_TXD_TYPE;
#if COMM0_TXD_SIZE > 0xffffffff
#error "串口0发送缓冲大小跟数据类型不匹配!只能<=0xffffff!"
#endif
#else
#error "串口0发送错误的数据类型宽度! 只能为8,16,32!"
#endif
#endif
#if COMM1_UNIT_EN > 0 && COMM1_RXD_EN > 0 // 串口1接收变量
#if COMM1_RXD_NBITS == 8
typedef INT8U COMM1_RXD_TYPE;
#if COMM1_RXD_SIZE > 255
#error "串口1接收缓冲大小跟数据类型不匹配!只能<=0xff!"
#endif
#elif COMM1_RXD_NBITS == 16
typedef INT16U COMM1_RXD_TYPE;
#if COMM1_RXD_SIZE > 0xffff
#error "串口1接收缓冲大小跟数据类型不匹配!只能<=0xffff!"
#endif
#elif COMM1_RXD_NBITS == 32
typedef INT32U COMM1_RXD_TYPE;
#if COMM1_RXD_SIZE > 0xffffffff
#error "串口1接收缓冲大小跟数据类型不匹配!只能<=0xffffff!"
#endif
#else
#error "串口1接收错误的数据类型宽度! 只能为8,16,32!"
#endif
#endif
#if COMM1_UNIT_EN > 0 && COMM1_TXD_EN > 0 // 串口1发送变量
#if COMM1_TXD_NBITS == 8
typedef INT8U COMM1_TXD_TYPE;
#if COMM1_TXD_SIZE > 255
#error "串口1发送缓冲大小跟数据类型不匹配!只能<=0xff!"
#endif
#elif COMM1_TXD_NBITS == 16
typedef INT16U COMM1_TXD_TYPE;
#if COMM1_TXD_SIZE > 0xffff
#error "串口1发送缓冲大小跟数据类型不匹配!只能<=0xffff!"
#endif
#elif COMM1_TXD_NBITS == 32
typedef INT32U COMM1_TXD_TYPE;
#if COMM1_TXD_SIZE > 0xffffffff
#error "串口1发送缓冲大小跟数据类型不匹配!只能<=0xffffff!"
#endif
#else
#error "串口1发送错误的数据类型宽度! 只能为8,16,32!"
#endif
#endif
#endif
/********************************************************************************************************
* 函数
********************************************************************************************************/
#if COMM_MODULE_EN > 0
#if COMM0_UNIT_EN > 0
void Comm0Init (void);
INT8U Comm0CfgPort (INT32U baud, INT8U parity, INT8U bits, INT8U stops);
INT8U Comm0RxGetChar (INT8U *err);
INT16U Comm0RxGetNMsgs (void);
INT8U Comm0RxGetsChar (INT8U *s, COMM0_RXD_TYPE len);
INT8U Comm0TxPutChar (INT8U Data);
INT8U Comm0TxPutsChar (INT8U *s, COMM0_TXD_TYPE len);
#endif
#if COMM1_UNIT_EN > 0
void Comm1Init (void);
INT8U Comm1CfgPort (INT32U baud, INT8U parity, INT8U bits, INT8U stops);
INT8U Comm1RxGetChar (INT8U *err);
INT16U Comm1RxGetNMsgs (void);
INT8U Comm1RxGetsChar (INT8U *s, COMM1_RXD_TYPE len);
INT8U Comm1TxPutChar (INT8U Data);
INT8U Comm1TxPutsChar (INT8U *s, COMM1_TXD_TYPE len);
#endif
#endif
/********************************************************************************************************
* End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -