/***************************************************************************** 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; } } } ******************************************************************************/