📄 comm.h
字号:
/**************************************************************************************************
* 文 件 名 : Comm.H
* 说 明 :
* 1> 这一版本中最大的接收和发送缓存为255为INT8U类型的最大值
**************************************************************************************************/
#ifdef COMM_GLOBALS
#define COMM_EXT
#else
#define COMM_EXT extern
#endif
/**************************************************************************************************
* 全局常量
**************************************************************************************************/
#define COMM_MODULE_EN 1 // 串口模块总使能 0禁止
// 当串口的接收需要任务协助处理时下面两个定义有效
//#define TaskComm1Prio 1 // 定义串口0接收任务ID 注意: 在CONFIG.H中统一定义
//#define TaskComm2Prio 2 // 定义串口1接收任务ID
#define COMM1_MEM_SEL // 串口0各种控制变量存储区选择 非C51一般为空
#define COMM2_MEM_SEL // 串口1各种控制变量存储区选择 非C51一般为空
#define COMM_CONST_SEL // 串口数据常量存储区选择 非C51一般为const或static
#define COMM0_VECTOR // 串口0中断函数入口编号
#define COMM1_VECTOR // 串口1中断函数入口编号
#define X0N 17 // 流控制字符 继续发送 20%
#define XOFF 19 // 流控制字符 停止发送 70%
////////////////////////////////////////////////------------串口配置----------
#define COMM_MODE 1 // 通信模式 0异步正常模式 1异步倍速模式 2同步主机模式
#define COMM_MORE_CPU_MODE 0 // 多处理器模式 1为多处理器模式有效 0为无效
#define COMM_ACCEPT_ISR_EN 1 // 接收结束中断 (1)使能 (0)禁止
#define COMM_SEND_ISR_EN 1 // 发送结束中断 (1)使能 (0)禁止
#define COMM_DATAFREE_ISR_EN 1 // 数据寄存器空中断 (1)使能 (0)禁止
#define COMM_SYN_CLOCK 1 // 同步工作模式时钟极性 (1)下降沿 (0)上升沿
// 两个处理CLK模块临界数据的两个宏 这里使用OS的临界宏
#define COMM_ENTER_CRITICAL() OS_ENTER_CRITICAL() // 进入临界宏 默认COMM_ENTER_CRITICAL() EA=0
#define COMM_EXIT_CRITICAL() OS_EXIT_CRITICAL() //退出临界宏 默认COMM_ENTER_CRITICAL() EA=1
// 串口0的常量定义
#define COMM1_UNIT_EN 1 // 串口0模块使能 0禁止
#define COMM1_DATA_STREAM_EN 0 // ASCII方式通讯时可采样XON/XOFF数据流模式来保证数据传输
#define COMM1_OS_SEL 1 // 选择在RTOS中使用则调用OSIntSendSignal 通知接收任务处理
// 串口数据 则启用定义TaskComm1Prio即接收任务ID 0=禁止
#define COMM1_OS_SIGNAL_SEL 1 // 0选择发送信号 1选择释放信号量 同时COMM1_OS_SEL要使能
// 来通知接收任务处理数据
#define COMM1_RXD_EN 1 // 串口0接收部分使能 0禁止
#define COMM1_GETNMSGS_EN 0 // 串口0的数据计数检测函数使能 0禁止
#define COMM1_GETS_EN 0 // 串口0接收多数据 0禁止
#define COMM1_RXD_SIZE 255 // 串口0的接收缓存配置 需要立即读数据 否则弃数据 必须>=1
#define COMM1_TXD_EN 1 // 串口0发送部分使能 0禁止
#define COMM1_PUTS_EN 0 // 串口0发送多数据 0禁止
#define COMM1_TXD_SIZE 128 // 串口0的发送缓存配置 必须>=1
//////////////////////////////////////////////// --------------串口的各种返回信息 不能更改------------
#define COMM_ERR 0 // 串口配置有错误
#define COMM_NO_ERR 1 // 串口配置没有错误
#define COMM_BAD_BAUD 2 // 波特率错误
#define COMM_BAD_MODE 3 // 串口工作为错误的工作方式
#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 // 发送正确
#define COMM_TXD_FLOOD 9 // 发送数据溢出 快速或多字节数据发送时 缓存溢出
////////////////////////////////////////////
#if (COMM_MODE == 0)||(COMM_MODE == 1) // 异步正常模式串,异步倍速模式串
#define UMSEL_MODE 0
#define UCPOL_MODE 0
#elif COMM_MODE == 2 // 同步模式串
#define UMSEL_MODE BIT(UMSEL)
#if COMM_SYN_CLOCK == 0 // 同步工作模式时钟极性
#define UCPOL_MODE 0
#else
#define UCPOL_MODE BIT(UCPOL)
#endif
#else // 选择其他模式 则停止编译
#error "(COMM_MODE)通信模式设置错误! "
#endif
#if COMM_MORE_CPU_MODE == 0 // 处理器模式 1为多处理器模式有效 0为无效
#define MPCM_MODE 0 //
#elif COMM_MORE_CPU_MODE == 1
#define MPCM_MODE BIT(MPCM)
#else
#error "请正确配置多处理器模式中断使能信号 (COMM_MORE_CPU_MODE)!"
#endif
#if COMM_ACCEPT_ISR_EN == 0 // 接收结束中断 (1)使能 (0)禁止
#define RXCIE_MODE 0 //
#elif COMM_ACCEPT_ISR_EN == 1
#define RXCIE_MODE BIT(RXCIE)
#else
#error "请正确配置接收结束中断中断使能信号 (COMM_ACCEPT_ISR_EN)!"
#endif
#if COMM_SEND_ISR_EN == 0 // 发送结束中断 (1)使能 (0)禁止
#define TXCIE_MODE 0 //
#elif COMM_SEND_ISR_EN == 1
#define TXCIE_MODE BIT(TXCIE)
#else
#error "请正确配置发送结束中断中断使能信号 (COMM_SEND_ISR_EN)!"
#endif
#if COMM_DATAFREE_ISR_EN == 0 // 数据寄存器空中断 (1)使能 (0)禁止
#define UDRIE_MODE 0 //
#elif COMM_DATAFREE_ISR_EN == 1
#define UDRIE_MODE BIT(UDRIE)
#else
#error "请正确配置数据寄存器空中断使能信号 (COMM_DATAFREE_ISR_EN)!"
#endif
////////////////////////////////////////////////
#define none 0
#define even 2
#define odd 3
/********************************************************************************************************
* 全局变量和数据类型
********************************************************************************************************/
#if COMM_MODULE_EN > 0
#endif
/********************************************************************************************************
* 函数
********************************************************************************************************/
/* COMM1有关接口函数集 */
INT8U Comm1CfgPort (INT32U baud, INT8U parity, INT8U bits, INT8U stops);
void Comm1VarInit (void);
/* COMM1接收有关函数 */
INT8U Comm1RxGetChar (INT8U *Data);
INT8U Comm1RxGetNMsgs (void);
INT8U Comm1RxGetsChar (INT8U *s, INT8U len);
/* COMM1发送有关函数 */
INT8U Comm1TxInBuf (INT8U Data); // 数据进入发送缓存
#define Comm1TxPutChar Comm1TxInBuf
//INT8U Comm1TxPutChar (INT8U Data);
INT8U Comm1TxPutsChar (INT8U *s, INT8U len);
/********************************************************************************************************
* End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -