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.

455 lines
17 KiB

C51 COMPILER V9.54 MSP_UARTN 09/06/2024 11:24:45 PAGE 1
C51 COMPILER V9.54, COMPILATION OF MODULE MSP_UARTN
OBJECT MODULE PLACED IN ..\out\msp_uartN.obj
COMPILER INVOKED BY: E:\KeilC51\C51\BIN\C51.EXE ..\source\msp\uart\msp_uartN.c LARGE OMF2 OPTIMIZE(0,SIZE) BROWSE ORDER
-NOINTPROMOTE INCDIR(..\source\bsp;..\source\msp;..\source\app;..\source\clib;..\source\cpu;..\source\ctask;..\source\tpc
-;..\source\asp;..\source\debug;..\source\msp\uart;..\source\msp\simiic;..\source\bsp\oled;..\source\bsp\TTSSbsp) DEBUG P
-RINT(..\out\msp_uartN.lst) TABS(2) OBJECT(..\out\msp_uartN.obj)
line level source
1 //////////////////////////////////////////////////////////////////////////
2 /// COPYRIGHT NOTICE
3 /// Copyright (c) 2023 CCSENS
4 /// All rights reserved.
5 ///
6 /// @file main.c
7 /// @brief main app
8 ///
9 ///(本文件实现的功能的详述)
10 ///
11 /// @version 1.1 CCsens technology
12 /// @author CC
13 /// @date 20150102
14 ///
15 ///
16 /// 修订说明:最初版本
17 /// Modified by:
18 /// Modified date:
19 /// Version:
20 /// Descriptions:
21 // 20160413 CC-ACC-VH02
22
23 /*****************************************************************************
24 update by cc @20220305
25
26
27
28 针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复��
-�的还是软件应用简单是
29 个需要平衡的事情.
30
31 clib/clib.c:
32 公用的函数 和硬件无关
33 放置串行模式(串口等其他通讯总线类的输出)输出的函数,
34 一些覆盖模式输出的(lcd等固屏输出的)的也可使用
35 void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
36 -----------------------------------------------------------------------------------------
37
38 app
39 asp
40 bsp
41
42 debug 选择哪个串口作为debug协议的通讯
43
44 -----------------------------------------------------------------------------------------
45
46 -----------------------------------------------------------------------------------------
47 tpc/: 接收到的数据放入到指向特定协议的缓存中,和协议的格式有关 一般分为 ��
-�头式或者标尾式
48 公用的串口通讯定义
49 struct _s_uart_rec_ 的公共协议包(关键的结构体)的声明------struct _s_uart_rec_
50 void L1_uart_2buf(struct _s_uart_rec_ *p)串行数据保存到指向特定协议的缓冲中
C51 COMPILER V9.54 MSP_UARTN 09/06/2024 11:24:45 PAGE 2
51
52 --------------------------------------------------------------------------------------------
53 msp/msp_uartx.c
54
55
56
57
58
59 --------------------------------------------------------------------------------------------
60 msp/msp_uart0.c 底层代码 和cpu相关 缓存发送也放在里面
61 L0_UART0_Init
62 UART0_IRQHandler
63 L0_Usend_uc------UserDef
64 -----------------------------------------------------------------------------------------
65 ********************************************************************************/
66
67 #include "msp_uartN.h"
*** WARNING C320 IN LINE 51 OF ..\source\bsp\TTSSbsp\bsp_config.h: "MainFre_22M"
68
69 TS_Uart_Send_ ts_Usend[SERIAL_MAX_NUM]= {0};
70 TS_send_buf_ ts_Usendbuf;
71
72 TS_rec_road_ ts_Urec[SERIAL_MAX_NUM]= {0};
73 TS_rec_buf_ ts_Urecbuf;
74 code vU16 S_send_max[4]=
75 {
76 D_send1_max,
77 D_send2_max,
78 D_send3_max,
79 D_send4_max
80 };
81
82 void L0_uartN_set(U8 uartx,U8 x)
83 {
84 1 switch(uartx)
85 1 {
86 2 case 0:
87 2 SBUF = (x);
88 2 break;
89 2 case 1:
90 2 S2BUF = (x);///
91 2 break;
92 2 case 2:
93 2 S3BUF = (x);
94 2 break;
95 2 case 3:
96 2 S4BUF = (x);
97 2 break;
98 2 default:break;
99 2 }
100 1 }
101 /*
102 void L0_waitFree_uartN888(U8 uartx)
103 {
104 ts_Usend[uartx].over = 0;
105 while(ts_Usend[uartx].now != 0)
106 {
107 #if 10 //发送数据特别快时,某些情况下会导致数据发送出错
108 if(ts_Usend[uartx].over ++ > 600000)///这样写居然出错
109
110 {////ts_uart[uartx].p->ok = D_ready;
111
C51 COMPILER V9.54 MSP_UARTN 09/06/2024 11:24:45 PAGE 3
112 ts_Usend[uartx].now = 0;
113 break;
114 }
115 #endif
116 }
117 }
118 */
119
120 void L0_waitFree_uartN(U8 uartx)
121 {
122 1 ts_Usend[uartx].over = 0;
123 1 while(ts_Usend[uartx].now != 0)
124 1 {
125 2 #if 10 //发送数据特别快时,某些情况下会导致数据发送出错
126 2 /// if(ts_uart[uartx].p->over ++ > 600000)///这样写居然出错(vU32)
127 2 ts_Usend[uartx].over ++;
128 2 if(ts_Usend[uartx].over > 20000)////600 000--4s
129 2 {////ts_uart[uartx].p->ok = D_ready;
130 3 ts_Usend[uartx].max = ts_Usend[uartx].now;
131 3 ts_Usend[uartx].ok = D_ready;
132 3 // ts_Usend[uartx].over = 0;
133 3 // ts_Usend[uartx].now = 1;
134 3 ts_Usend[uartx].now = 0;
135 3 break;
136 3 }
137 2 #endif
138 2 }
139 1 }
140
141 #define D_485R 0
142 #define D_485S 1
143
144
145 void L0_uartN_485(U8 uartx,U8 x)
146 {
147 1 if (D_485R == x)
148 1 {
149 2 switch(uartx)
150 2 {
151 3 case 0:
152 3 D_UART1_485_RX();
153 3 break;
154 3 case 1:
155 3 break;
156 3 case 2:
157 3 break;
158 3 case 3:
159 3 //// D_UART4_485_RX();
160 3 break;
161 3 default:break;
162 3 }
163 2 }else
164 1 {
165 2 switch(uartx)
166 2 {
167 3 case 0:
168 3 D_UART1_485_TX();
169 3 break;
170 3 case 1:
171 3 break;
172 3 case 2:
173 3 break;
C51 COMPILER V9.54 MSP_UARTN 09/06/2024 11:24:45 PAGE 4
174 3 case 3:
175 3 //// D_UART4_485_TX();
176 3 break;
177 3 default:break;
178 3 }
179 2 }
180 1
181 1 }
182
183 void L0_uartN_Array(U8 uartx,void *buf,U16 len)
184 {
185 1 u16 i;
186 1
187 1 L0_waitFree_uartN(uartx);
188 1
189 1 L0_uartN_485(uartx,D_485S);
190 1 ts_Usend[uartx].ok = D_ready;
191 1 ts_Usend[uartx].over = 0;
192 1 ts_Usend[uartx].now = 1;
193 1 if (len > ts_Usend[uartx].max_def)
194 1 {
195 2 len = ts_Usend[uartx].max_def - 1;
196 2 }
197 1 ts_Usend[uartx].max = len;
198 1 //将参数buf拷贝至内部buf
199 1 for(i = 0;i < len;i ++)
200 1 {
201 2 ts_Usend[uartx].sbuf[i] = ((U8*)buf)[i];
202 2 }
203 1 L0_uartN_set(uartx,ts_Usend[uartx].sbuf[0]);
204 1 }
205
206
207 void L0_uartN_Arraylong(U8 uartx,U8 *buf,U16 usStart,U16 usEnd)
208 {
209 1 //L0_uart0_sendbuf(str,strlen(str));
210 1 U16 t;
211 1 t = usEnd-usStart;
212 1 t ++;
213 1 L0_uartN_Array(uartx,&buf[usStart],t);
214 1 }
215
216
217 void L0_uartN_uc(U8 uartx,U8 ww)
218 {
219 1 L0_uartN_Array(uartx,&ww,1);
220 1 }
221
222 void L0_uartN_us(U8 uartx,vU16 ww)
223 {
224 1 U_U16 uStemp;
225 1 uStemp.word = ww;
226 1 ts_Usend[uartx].buf3[0] = uStemp.BYTE2.h;
227 1 ts_Usend[uartx].buf3[1] = uStemp.BYTE2.l;
228 1 L0_uartN_Array(uartx,ts_Usend[uartx].buf3,2);
229 1 }
230
231 void L0_uartN_ul(U8 uartx,vU32 ww)
232 {
233 1 U_U32 uStemp;
234 1 L0_waitFree_uartN(uartx);
235 1 uStemp.dWord = ww;
C51 COMPILER V9.54 MSP_UARTN 09/06/2024 11:24:45 PAGE 5
236 1 ts_Usend[uartx].buf3[0] = uStemp.BYTE4.byte0;
237 1 ts_Usend[uartx].buf3[1] = uStemp.BYTE4.byte1;
238 1 ts_Usend[uartx].buf3[2] = uStemp.BYTE4.byte2;
239 1 ts_Usend[uartx].buf3[3] = uStemp.BYTE4.byte3;
240 1 L0_uartN_Array(uartx,ts_Usend[uartx].buf3,4);
241 1 }
242
243 void L0_uartN_0d0a(U8 uartx)
244 {
245 1 L0_waitFree_uartN(uartx);
246 1 ts_Usend[uartx].buf3[0] = 0x0d;
247 1 ts_Usend[uartx].buf3[1] = 0x0a;
248 1 L0_uartN_Array(uartx,ts_Usend[uartx].buf3,2);
249 1 }
250
251 void L0_uartN_uchex(U8 uartx,U8 ww)
252 {
253 1 L0_waitFree_uartN(uartx);
254 1 ts_Usend[uartx].buf3[0] = cguHex2Char[D_uc_high(ww)][1];
255 1 ts_Usend[uartx].buf3[1] = cguHex2Char[D_uc_low (ww)][1];
256 1 L0_uartN_Array(uartx,ts_Usend[uartx].buf3,2);
257 1 }
258
259 void L0_uartN_ushex(U8 uartx,vU16 ww)
260 {
261 1 U_F16 k;
262 1 L0_waitFree_uartN(uartx);
263 1 k.us = ww;
264 1 ts_Usend[uartx].buf3[0] = cguHex2Char[D_uc_high(k.BYTE2.H)][1];
265 1 ts_Usend[uartx].buf3[1] = cguHex2Char[D_uc_low (k.BYTE2.H)][1];
266 1 ts_Usend[uartx].buf3[2] = cguHex2Char[D_uc_high(k.BYTE2.L)][1];
267 1 ts_Usend[uartx].buf3[3] = cguHex2Char[D_uc_low (k.BYTE2.L)][1];
268 1 L0_uartN_Array(uartx,ts_Usend[uartx].buf3,4);
269 1 }
270
271 void L0_uartN_ulhex(U8 uartx,U32 ww)
272 {
273 1 U_U32 k;
274 1 L0_waitFree_uartN(uartx);
275 1 k.dWord = ww;
276 1 ts_Usend[uartx].buf3[0] = cguHex2Char[D_uc_high(k.BYTE4.byte0)][1];
277 1 ts_Usend[uartx].buf3[1] = cguHex2Char[D_uc_low (k.BYTE4.byte0)][1];
278 1 ts_Usend[uartx].buf3[2] = cguHex2Char[D_uc_high(k.BYTE4.byte1)][1];
279 1 ts_Usend[uartx].buf3[3] = cguHex2Char[D_uc_low (k.BYTE4.byte1)][1];
280 1 ts_Usend[uartx].buf3[4] = cguHex2Char[D_uc_high(k.BYTE4.byte2)][1];
281 1 ts_Usend[uartx].buf3[5] = cguHex2Char[D_uc_low (k.BYTE4.byte2)][1];
282 1 ts_Usend[uartx].buf3[6] = cguHex2Char[D_uc_high(k.BYTE4.byte3)][1];
283 1 ts_Usend[uartx].buf3[7] = cguHex2Char[D_uc_low (k.BYTE4.byte3)][1];
284 1 L0_uartN_Array(uartx,ts_Usend[uartx].buf3,8);
285 1 }
286
287 void L0_uartN_str(U8 uartx,U8 *str)
288 {
289 1 L0_uartN_Array(uartx,str,Lc_strlen(str));
290 1 }
291
292 void L0_uartN_uchexArray(U8 uartx,vU8 *buf,U16 n)
293 {
294 1 int i;
295 1 for(i=0;i<n;i++)
296 1 {
297 2 L0_uartN_uchex(uartx,buf[i]);
C51 COMPILER V9.54 MSP_UARTN 09/06/2024 11:24:45 PAGE 6
298 2 L0_uartN_uc(uartx,' ');
299 2 }
300 1 /// L0_uartN_0d0a(uartx);
301 1 }
302
303
304
305
306 void L0_uartN_ushexArray(U8 uartx,vU16 *buf,U16 n)
307 {
308 1 int i;
309 1 for(i=0;i<n;i++)
310 1 {
311 2 L0_uartN_ushex(uartx,buf[i]);
312 2 L0_uartN_uc(uartx,' ');
313 2 }
314 1 /// L0_uartN_0d0a(uartx);
315 1 }
316
317
318 ///////>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//withoutbuf>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
319
320 void L0_uartN_sbuf(U8 uartx)/////cc 2023/04/23--4:23:19 修正bug 调用时放到ts_Usend[uartx].max 复�
-��的前面
321 {
322 1 ts_Usend[uartx].max = 0;
323 1 ts_Usend[uartx].now = 0;
324 1 ts_Usend[uartx].ok = D_ready;
325 1 ts_Usend[uartx].max_def = S_send_max[uartx];
326 1 switch(uartx)
327 1 {
328 2 case 0:
329 2 ts_Usend[uartx].sbuf = ts_Usendbuf.s1;
330 2 break;
331 2 case 1:
332 2 ts_Usend[uartx].sbuf = ts_Usendbuf.s2;
333 2 break;
334 2 case 2:
335 2 ts_Usend[uartx].sbuf = ts_Usendbuf.s3;
336 2 break;
337 2 case 3:
338 2 ts_Usend[uartx].sbuf = ts_Usendbuf.s4;
339 2 break;
340 2 default:break;
341 2 }
342 1 }
343
344 ////使用内置的usend buf的发送 cc 2023/04/23--4:25:8 调用的时候不可使用本通道的缓��
-�
345 void L0_uartN_Array_withoutbuf(U8 uartx,U16 len)
346 {
347 1 /// u16 i;
348 1 L0_waitFree_uartN(uartx);
349 1
350 1 L0_uartN_485(uartx,D_485S);
351 1 L0_uartN_sbuf(uartx);
352 1
353 1 if (len > ts_Usend[uartx].max_def)
354 1 {
355 2 len = ts_Usend[uartx].max_def - 1;
356 2 }
357 1 ts_Usend[uartx].max = len;
C51 COMPILER V9.54 MSP_UARTN 09/06/2024 11:24:45 PAGE 7
358 1 ts_Usend[uartx].now = 1;
359 1 L0_uartN_set(uartx,ts_Usend[uartx].sbuf[0]);
360 1 }
361
362 ///cc 2023/04/23--4:25:8 调用的时候不可使用本通道的缓存
363 void L0_uartN_Arrayhex_withoutbuf(U8 uartx,vU8 *buf,U16 len)
364 {
365 1 vU16 i;vU16 t;
366 1
367 1 L0_waitFree_uartN(uartx);
368 1 L0_uartN_sbuf(uartx);
369 1 if (len > (ts_Usend[uartx].max_def/3))
370 1 {
371 2 len = ts_Usend[uartx].max_def/3 - 1;
372 2 }
373 1 for(i = 0;i < len;i ++)
374 1 {
375 2
376 2 t = i * 3;
377 2 ts_Usend[uartx].sbuf[t] = cguHex2Char[D_uc_high(buf[i])][1];/// 34 '3'--33
378 2 t ++;
379 2 ts_Usend[uartx].sbuf[t] = cguHex2Char[D_uc_low (buf[i])][1];/// 34 '3'--33
380 2 t ++;
381 2 ts_Usend[uartx].sbuf[t] = ' ';
382 2 t ++;
383 2
384 2 }
385 1 // len 2 11x 22x \0
386 1 ts_Usend[uartx].sbuf[t] = ' ';
387 1 t++;
388 1 ts_Usend[uartx].sbuf[t] = 0x00;
389 1 L0_uartN_Array_withoutbuf(uartx,t-1);
390 1
391 1 }
392
393
394
395
396
397
398
399
400
401
402
403
404
405
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3384 ----
CONSTANT SIZE = 8 ----
XDATA SIZE = 392 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
C51 COMPILER V9.54 MSP_UARTN 09/06/2024 11:24:45 PAGE 8
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)