📄 uart_comm.h
字号:
/******************************************************************************
Copyright (C) R&D Institute of Holley Group Co., Ltd.
Module:
FileName:
Author:jerry chen
Version :1.0
Date:2005-12-16
Description:
------------------------------------------------------------------------------
Modification History:
<No.> <time> <author> <version > <contents>
1、 2005-12-24 Jerry.chen 1.0 build this moudle
********************************************************************************/
/*-----------------------------------------------------------------------------*/
#ifndef uart_comm_h
#define uart_comm_h
/********************************/
/* 宏定义 */
/********************************/
#define UART0_REC_MAX 150
#define UART0_TRS_MAX 150
/********************************/
/* 数据类型定义 */
/********************************/
// 串口设置结构体寄存器
typedef struct {
uint16 baudrate_gene; // baudrate = baudrate_id*300; example: 1-300 bps, 2-600 bps, 4-1200 bps, 8-2400 bps, 16-4800 bps, 32-9600 bps, 64-19600 bps, 128-38400 bps, 256-76800, 384-115200;
uint8 data_bit; // 5, 6, 7, 8;
uint8 stop_bit; // 2-one stop bit, 3-1.5 stop bit, 4-2 stop bit;
uint8 bit_check; // 0-none, 1-odd, 2-even;
}UART_OP;
#define UART_OP_TYPE_LONG sizeof(UART_OP)
// 通讯状态结构体寄存器
typedef struct {
uint8 *tx_buff; // 发送缓冲区指针
uint8 comm_cnt; // 当前操作计数器,为当前发送字符在数组中的偏移量
uint8 rtx_num; // 所要发送的字节总数(发送时有效)
struct // 操作状态寄存器,当接收时有用
{
unsigned pe_flag:1; // check err 接收时有效
unsigned oe_flag:1; // overflow err 接收时有效
unsigned fe_flag:1; // frame err 接收时有效
unsigned foe_flag:1; // frame overflow err 接收时有效
unsigned tx_finish_flag:1; // 发送时有效
//unsigned rx_timeov_flag:1; // 接收时有效
unsigned no_use :3;
} lsr_status ; //以上标志位的事件发生时 标志置位
}COMM_STATUS;
//串口通讯接收队列数据结构
#define COM_QUE_MAX 160 //队列长度
typedef struct {
uint8 queue[COM_QUE_MAX]; // 队列
uint8 head; // 队列入口,指向最后进入队列的数据
uint8 trail; // 队列出口,指向最早进入队列的数据,当队列长度为1时:trail=head;长度为0 时:trail=head+1;
uint8 que_long; // 队列实际的数据长度
}COMM_QUEUE_TYPE;
////////////////////////////////////////////////////////
//关键字 数据结构
typedef struct {
uint8 type; // 关键字类型决定KEY 域的处理办法,0: 普通关键字;1:关键字的偏移指针,如数据域/帧 长度.
uint8 offset; // 关键字在整帧中的偏移量 或 关键字偏移指针.
uint8 key; // 关键字
int8 key_point_add; // 关键字偏移指针矫正量,关键字的实际位置= *关键字偏移指针 + key_point_add;
uint8 key_point_max; // 关键字偏移指针的最大值,对帧长或数据域长度进行限制,以免无限制等待.
}JUDGE_KEY_TYPE;
//帧格式 数据结构
typedef struct {
uint8 level_num; // 检测的关键字总级数.
JUDGE_KEY_TYPE key_array[6]; // 关键字检测数组
}FRAME_FORMAT_TYPE;
//单帧检测 操作状态结构
typedef struct {
uint8 level; // 当前协议的帧格式检测的级数,0:第一个关键字判断未通过,1:通过第一个关键字判断;
uint8 frame_start; // 通过的第一个关键字的位置(通常也就是帧首的位置);
uint8 valid; // 帧有效,通过了所有关键字的判断,等待协议解释.
}SINGLE_FRAME_DET_TYPE;
#define PROTOCOL_MAX 1 // 参加帧格式检测的协议的个数.
//多协议帧检测 操作状态结构
typedef struct {
uint8 detected_positon; // 当前协议的帧格式检测的级数,0:第一个关键字判断未通过,1:通过第一个关键字判断;
uint8 valid_que_trail; // 通过的第一个关键字的位置(通常也就是帧首的位置,是frame_det.frame_start 的最大值);
SINGLE_FRAME_DET_TYPE frame_det[PROTOCOL_MAX]; // 帧有效,通过了所有关键字的判断,等待协议解释.
}MULTI_FRAME_DET_TYPE;
/********************************/
/* 变量定义 */
/********************************/
extern volatile uint8 uart0_dlm,uart0_dll;
extern volatile UART_OP uart0_option;
extern volatile COMM_STATUS uart0_rec;
extern volatile COMM_STATUS uart0_trs;
extern volatile COMM_QUEUE_TYPE uart0_rec_que;
extern volatile MULTI_FRAME_DET_TYPE multi_frame_det;
/********************************/
/* 函数声明 */
/********************************/
extern uint8 fmt_uart0(void);
extern void UART0_SendStr(uint8 *str,uint8 send_num);
extern void __irq uart0_isr (void);
extern void uart0_tx_test (void);
extern void uart0_send_irq (uint8 *buff_point, uint8 send_num );
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -