You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
303 lines
6.5 KiB
303 lines
6.5 KiB
1 year ago
|
|
||
|
/*****************************************************************************
|
||
|
update by cc @201501101001
|
||
|
针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复杂的还是软件应用简单是
|
||
|
个需要平衡的事情.
|
||
|
|
||
|
uartcom/uartlib.c:
|
||
|
公用的函数 和硬件无关
|
||
|
放置串行模式(串口等其他通讯总线类的输出)输出的函数,
|
||
|
一些覆盖模式输出的(lcd等固屏输出的)的也可使用
|
||
|
void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
|
||
|
-----------------------------------------------------------------------------------------
|
||
|
uartcom/uartcom0
|
||
|
和uart相关的通讯协议 com + n
|
||
|
为了适应不同的通讯协议需要不同的uart口来对应 和应用相关
|
||
|
|
||
|
typedef struct _ts_lcm_pro_; 应用协议包的定义? LCM的协议------------
|
||
|
L3_UARTcom0_exp_protocol 解析应用协议
|
||
|
-----------------------------------------------------------------------------------------
|
||
|
uartcom/uprotocol: 主要是为 uartcom + n服务的 驱动层到应用层缓存的过度
|
||
|
公用的串口通讯定义
|
||
|
struct _s_protocol_ 的公共协议包(关键的结构体)的声明------struct _s_protocol_
|
||
|
void L1_uart_2buf(struct _s_protocol_ *p)串行数据保存到缓冲中
|
||
|
--------------------------------------------------------------------------------------------
|
||
|
msp/uartx.c 底层代码 和cpu相关
|
||
|
L0_UART0_Init
|
||
|
UART0_IRQHandler
|
||
|
L0_Usend_uc----------s_at0
|
||
|
-----------------------------------------------------------------------------------------
|
||
|
********************************************************************************/
|
||
|
|
||
|
#include "tpc_road.h"
|
||
|
///#include "c_lib.h"
|
||
|
|
||
|
///TS_pp_debug_ ts_debug_rec;
|
||
|
///TS_s2b_debug_ ts_s2b1_road;////协议处理变量
|
||
|
|
||
|
void L1_s2b_road_init(u8 ch) //
|
||
|
{
|
||
|
ts_Urec[ch].ok = 0;
|
||
|
ts_Urec[ch].debugok = 0;
|
||
|
ts_Urec[ch].head = 0;
|
||
|
ts_Urec[ch].num = 0;
|
||
|
///printf("\r\nw ts_Urec[D_UART1].max = %d num = %d",(int)ts_Urec[D_UART1].rmax,(int)ts_Urec[D_UART1].num);
|
||
|
}
|
||
|
|
||
|
//MODBUS协议解析函数 012345
|
||
|
//透传协议 就像路过 有时间超时溢出 收到啥就向上传递啥
|
||
|
void L1_s2b_road(u8 ch)
|
||
|
{
|
||
|
/// ts_Urec[ch].ok = 1;
|
||
|
if(ts_Urec[ch].head == 0)
|
||
|
{
|
||
|
{
|
||
|
ts_Urec[ch].head = 1;
|
||
|
ts_Urec[ch].num = 0;
|
||
|
ts_Urec[ch].ok = 0;
|
||
|
ts_Urec[ch].fifo = 0;
|
||
|
ts_Urec[ch].sp[ts_Urec[ch].num ] = ts_Urec[ch].reg;
|
||
|
/// ts_Urec[ch].sp[ts_Urec[ch].num ] = SBUF;// L0_uart1_get();;
|
||
|
ts_Urec[ch].num ++;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ts_Urec[ch].sp[ts_Urec[ch].num ] = ts_Urec[ch].reg;
|
||
|
ts_Urec[ch].num ++;
|
||
|
/// ts_Urec[ch].len = ts_Urec[ch].num;
|
||
|
ts_Urec[ch].fifo = ts_Urec[ch].num;
|
||
|
if(ts_Urec[ch].num < ts_Urec[ch].rmax)
|
||
|
{
|
||
|
}else
|
||
|
{////保护使用
|
||
|
ts_Urec[ch].ok = 2;
|
||
|
ts_Urec[ch].debugok = 1;
|
||
|
ts_Urec[ch].head = 0;
|
||
|
ts_Urec[ch].num = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void L1_s2b_road2(u8 ch)
|
||
|
{
|
||
|
if(ts_Urec[ch].head == 0)
|
||
|
{
|
||
|
{
|
||
|
ts_Urec[ch].head = 1;
|
||
|
ts_Urec[ch].num = 0;
|
||
|
ts_Urec[ch].ok = 0;
|
||
|
ts_Urec[ch].fifo = 0;
|
||
|
ts_Urec[ch].sp[ts_Urec[ch].num ++] = ts_Urec[ch].reg;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ts_Urec[ch].sp[ts_Urec[ch].num ++] = ts_Urec[ch].reg;
|
||
|
/// ts_Urec[ch].len = ts_Urec[ch].num;
|
||
|
ts_Urec[ch].fifo = ts_Urec[ch].num;
|
||
|
if(ts_Urec[ch].num < ts_Urec[ch].rmax)
|
||
|
{
|
||
|
}else
|
||
|
{////保护使用
|
||
|
ts_Urec[ch].ok = 2;
|
||
|
ts_Urec[ch].debugok = 1;
|
||
|
ts_Urec[ch].head = 0;
|
||
|
ts_Urec[ch].num = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
void L1_s2b_road3(u8 ch)
|
||
|
{
|
||
|
if(ts_Urec[ch].head == 0)
|
||
|
{
|
||
|
{
|
||
|
ts_Urec[ch].head = 1;
|
||
|
ts_Urec[ch].num = 0;
|
||
|
ts_Urec[ch].ok = 0;
|
||
|
ts_Urec[ch].fifo = 0;
|
||
|
ts_Urec[ch].sp[ts_Urec[ch].num ++] = ts_Urec[ch].reg;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ts_Urec[ch].sp[ts_Urec[ch].num ++] = ts_Urec[ch].reg;
|
||
|
/// ts_Urec[ch].len = ts_Urec[ch].num;
|
||
|
ts_Urec[ch].fifo = ts_Urec[ch].num;
|
||
|
if(ts_Urec[ch].num < ts_Urec[ch].rmax)
|
||
|
{
|
||
|
}else
|
||
|
{////保护使用
|
||
|
ts_Urec[ch].ok = 2;
|
||
|
ts_Urec[ch].debugok = 1;
|
||
|
ts_Urec[ch].head = 0;
|
||
|
ts_Urec[ch].num = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
void L1_s2b_road4(u8 ch)
|
||
|
{
|
||
|
if(ts_Urec[ch].head == 0)
|
||
|
{
|
||
|
{
|
||
|
ts_Urec[ch].head = 1;
|
||
|
ts_Urec[ch].num = 0;
|
||
|
ts_Urec[ch].ok = 0;
|
||
|
ts_Urec[ch].fifo = 0;
|
||
|
ts_Urec[ch].sp[ts_Urec[ch].num ++] = ts_Urec[ch].reg;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ts_Urec[ch].sp[ts_Urec[ch].num ++] = ts_Urec[ch].reg;
|
||
|
/// ts_Urec[ch].len = ts_Urec[ch].num;
|
||
|
ts_Urec[ch].fifo = ts_Urec[ch].num;
|
||
|
if(ts_Urec[ch].num < ts_Urec[ch].rmax)
|
||
|
{
|
||
|
}else
|
||
|
{////保护使用
|
||
|
ts_Urec[ch].ok = 2;
|
||
|
ts_Urec[ch].debugok = 1;
|
||
|
ts_Urec[ch].head = 0;
|
||
|
ts_Urec[ch].num = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
** End Of File
|
||
|
******************************************************************************/
|
||
|
|
||
|
/******************************************************************************
|
||
|
** c func lib
|
||
|
|
||
|
void L1_s2b_road(TS_rec_road_ *p)
|
||
|
{
|
||
|
/// p->ok = 1;
|
||
|
if(p->head == 0)
|
||
|
{
|
||
|
{
|
||
|
p->head = 1;
|
||
|
//// p->max = D_debug_max;
|
||
|
p->num = 0;
|
||
|
p->ok = 0;
|
||
|
p->fifo = 0;
|
||
|
p->sp[p->num ++] = p->reg;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
p->sp[p->num ++] = p->reg;
|
||
|
/// p->len = p->num;
|
||
|
p->fifo = p->num;
|
||
|
if(p->num < p->rmax)
|
||
|
{
|
||
|
}else
|
||
|
{////保护使用
|
||
|
p->ok = 2;
|
||
|
p->debugok = 1;
|
||
|
p->head = 0;
|
||
|
p->num = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//透传协议 就像路过 有时间超时溢出 收到啥就向上传递啥
|
||
|
void L1_s2b_road2(TS_rec_road_ *p)
|
||
|
{
|
||
|
/// p->ok = 1;
|
||
|
if(p->head == 0)
|
||
|
{
|
||
|
{
|
||
|
p->head = 1;
|
||
|
//// p->max = D_debug_max;
|
||
|
p->num = 0;
|
||
|
p->ok = 0;
|
||
|
p->fifo = 0;
|
||
|
p->sp[p->num ++] = p->reg;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
p->sp[p->num ++] = p->reg;
|
||
|
/// p->len = p->num;
|
||
|
p->fifo = p->num;
|
||
|
if(p->num < p->rmax)
|
||
|
{
|
||
|
}else
|
||
|
{////保护使用
|
||
|
p->ok = 2;
|
||
|
p->debugok = 1;
|
||
|
p->head = 0;
|
||
|
p->num = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void L1_s2b_road3(TS_rec_road_ *p)
|
||
|
{
|
||
|
/// p->ok = 1;
|
||
|
if(p->head == 0)
|
||
|
{
|
||
|
{
|
||
|
p->head = 1;
|
||
|
//// p->max = D_debug_max;
|
||
|
p->num = 0;
|
||
|
p->ok = 0;
|
||
|
p->fifo = 0;
|
||
|
p->sp[p->num ++] = p->reg;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
p->sp[p->num ++] = p->reg;
|
||
|
/// p->len = p->num;
|
||
|
p->fifo = p->num;
|
||
|
if(p->num < p->rmax)
|
||
|
{
|
||
|
}else
|
||
|
{////保护使用
|
||
|
p->ok = 2;
|
||
|
p->debugok = 1;
|
||
|
p->head = 0;
|
||
|
p->num = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
void L1_s2b_road4(TS_rec_road_ *p)
|
||
|
{
|
||
|
/// p->ok = 1;
|
||
|
if(p->head == 0)
|
||
|
{
|
||
|
{
|
||
|
p->head = 1;
|
||
|
//// p->max = D_debug_max;
|
||
|
p->num = 0;
|
||
|
p->ok = 0;
|
||
|
p->fifo = 0;
|
||
|
p->sp[p->num ++] = p->reg;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
p->sp[p->num ++] = p->reg;
|
||
|
/// p->len = p->num;
|
||
|
p->fifo = p->num;
|
||
|
if(p->num < p->rmax)
|
||
|
{
|
||
|
}else
|
||
|
{////保护使用
|
||
|
p->ok = 2;
|
||
|
p->debugok = 1;
|
||
|
p->head = 0;
|
||
|
p->num = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
******************************************************************************/
|
||
|
|