📄 physical.lst
字号:
127:physical.c **** state = IDLE;
293 .LM36:
294 0102 1092 0000 sts state,__zero_reg__
128:physical.c **** recvPtr = (char*)&buffer1;
296 .LM37:
297 0106 80E0 ldi r24,lo8(buffer1)
298 0108 90E0 ldi r25,hi8(buffer1)
299 010a 9093 0000 sts (recvPtr)+1,r25
300 010e 8093 0000 sts recvPtr,r24
129:physical.c **** procBufPtr = (char*)&buffer2;
302 .LM38:
303 0112 80E0 ldi r24,lo8(buffer2)
304 0114 90E0 ldi r25,hi8(buffer2)
305 0116 9093 0000 sts (procBufPtr)+1,r25
306 011a 8093 0000 sts procBufPtr,r24
130:physical.c **** recvBufState = FREE;
308 .LM39:
309 011e 1092 0000 sts recvBufState,__zero_reg__
131:physical.c **** procBufState = FREE;
311 .LM40:
312 0122 1092 0000 sts procBufState,__zero_reg__
132:physical.c **** RadiocontrolInit();
314 .LM41:
315 0126 0E94 0000 call RadiocontrolInit
133:physical.c **** return SUCCESS;
134:physical.c **** }
317 .LM42:
318 012a 81E0 ldi r24,lo8(1)
319 012c 90E0 ldi r25,hi8(1)
320 /* epilogue: frame size=0 */
321 012e 0895 ret
322 /* epilogue end (size=1) */
323 /* function PhysicalInit size 23 (22) */
326 .global PhysicalIdle
328 PhysicalIdle:
135:physical.c ****
136:physical.c **** /*************************************************************************
137:physical.c **** *功能描述:物理层进入空闲状态
138:physical.c **** *参数说明:无
139:physical.c **** *返回值: 无
140:physical.c **** **************************************************************************/
141:physical.c **** result_t PhysicalIdle(void)
142:physical.c **** {
330 .LM43:
331 /* prologue: frame size=0 */
332 /* prologue end (size=0) */
143:physical.c **** RadiocontrolIdle();
334 .LM44:
335 0130 0E94 0000 call RadiocontrolIdle
144:physical.c **** state = IDLE;
337 .LM45:
338 0134 1092 0000 sts state,__zero_reg__
145:physical.c **** return SUCCESS;
146:physical.c **** }
340 .LM46:
341 0138 81E0 ldi r24,lo8(1)
342 013a 90E0 ldi r25,hi8(1)
343 /* epilogue: frame size=0 */
344 013c 0895 ret
345 /* epilogue end (size=1) */
346 /* function PhysicalIdle size 7 (6) */
349 .global PhysicalSleep
351 PhysicalSleep:
147:physical.c ****
148:physical.c **** /*************************************************************************
149:physical.c **** *功能描述:物理层进入睡眠状态
150:physical.c **** *参数说明:无
151:physical.c **** *返回值: 无
152:physical.c **** **************************************************************************/
153:physical.c **** result_t PhysicalSleep(void)
154:physical.c **** {
353 .LM47:
354 /* prologue: frame size=0 */
355 /* prologue end (size=0) */
155:physical.c **** RadiocontrolSleep();
357 .LM48:
358 013e 0E94 0000 call RadiocontrolSleep
156:physical.c **** state = IDLE;
360 .LM49:
361 0142 1092 0000 sts state,__zero_reg__
157:physical.c **** return SUCCESS;
158:physical.c **** }
363 .LM50:
364 0146 81E0 ldi r24,lo8(1)
365 0148 90E0 ldi r25,hi8(1)
366 /* epilogue: frame size=0 */
367 014a 0895 ret
368 /* epilogue end (size=1) */
369 /* function PhysicalSleep size 7 (6) */
374 .global PhysicalTxPkt
376 PhysicalTxPkt:
159:physical.c ****
160:physical.c **** /*************************************************************************
161:physical.c **** *功能描述:物理层发送数据包接口函数,进入发送状态,启动整个发送流程
162:physical.c **** *参数说明:packet:数据包地址 length:物理层要发送的字节数
163:physical.c **** *返回值: 无
164:physical.c **** **************************************************************************/
165:physical.c **** result_t PhysicalTxPkt(void* packet, uint8_t length)
166:physical.c **** {
378 .LM51:
379 /* prologue: frame size=0 */
380 014c 0F93 push r16
381 014e 1F93 push r17
382 0150 CF93 push r28
383 /* prologue end (size=3) */
384 0152 8C01 movw r16,r24
385 0154 C62F mov r28,r22
167:physical.c **** if (length > MAX_PKT_LEN || length < MIN_PKT_LEN)
387 .LM52:
388 0156 862F mov r24,r22
389 0158 8750 subi r24,lo8(-(-7))
390 015a 8E35 cpi r24,lo8(94)
391 015c 20F4 brsh .L26
168:physical.c **** return FAIL;
169:physical.c **** if (state != IDLE && state != RECEIVING)
393 .LM53:
394 015e 8091 0000 lds r24,state
395 0162 8230 cpi r24,lo8(2)
396 0164 18F0 brlo .L25
397 .L26:
170:physical.c **** return FAIL;
399 .LM54:
400 0166 80E0 ldi r24,lo8(0)
401 0168 90E0 ldi r25,hi8(0)
402 016a 1EC0 rjmp .L23
403 .L25:
171:physical.c ****
172:physical.c **** state = TRANSMITTING;
405 .LM55:
406 016c 82E0 ldi r24,lo8(2)
407 016e 8093 0000 sts state,r24
173:physical.c **** RadiocontrolStartTx();
409 .LM56:
410 0172 0E94 0000 call RadiocontrolStartTx
174:physical.c **** sendPtr = (char*)packet;
412 .LM57:
413 0176 1093 0000 sts (sendPtr)+1,r17
414 017a 0093 0000 sts sendPtr,r16
175:physical.c **** ((OSMACMsgPtr)sendPtr)->length = length;
416 .LM58:
417 017e F801 movw r30,r16
418 0180 C083 st Z,r28
176:physical.c **** pktLength = length;
420 .LM59:
421 0182 C093 0000 sts pktLength,r28
177:physical.c **** txCount = 0;
423 .LM60:
424 0186 1092 0000 sts txCount,__zero_reg__
178:physical.c ****
179:physical.c **** crcTx=update_crc(sendPtr[0], 0);
426 .LM61:
427 018a E091 0000 lds r30,sendPtr
428 018e F091 0000 lds r31,(sendPtr)+1
429 0192 60E0 ldi r22,lo8(0)
430 0194 70E0 ldi r23,hi8(0)
431 0196 8081 ld r24,Z
432 0198 0E94 0000 call update_crc
433 019c 9093 0000 sts (crcTx)+1,r25
434 01a0 8093 0000 sts crcTx,r24
180:physical.c ****
181:physical.c **** return SUCCESS;
436 .LM62:
437 01a4 81E0 ldi r24,lo8(1)
438 01a6 90E0 ldi r25,hi8(1)
439 .L23:
440 /* epilogue: frame size=0 */
441 01a8 CF91 pop r28
442 01aa 1F91 pop r17
443 01ac 0F91 pop r16
444 01ae 0895 ret
445 /* epilogue end (size=4) */
446 /* function PhysicalTxPkt size 50 (43) */
449 .global PhysicalTxByteReady
451 PhysicalTxByteReady:
182:physical.c **** }
183:physical.c ****
184:physical.c **** /*************************************************************************
185:physical.c **** *功能描述:发送未完成时,准备下一个要发送的字节,发送完成时进入空闲状态并通知上层
186:physical.c **** *参数说明:无
187:physical.c **** *返回值: 无
188:physical.c **** **************************************************************************/
189:physical.c **** result_t PhysicalTxByteReady(void)
190:physical.c **** { // 射频控制模块获得数据包下一个字节
453 .LM63:
454 /* prologue: frame size=0 */
455 /* prologue end (size=0) */
191:physical.c **** if(state == TRANSMITTING) {
457 .LM64:
458 01b0 8091 0000 lds r24,state
459 01b4 8230 cpi r24,lo8(2)
460 01b6 09F0 breq .+2
461 01b8 4CC0 rjmp .L28
192:physical.c **** RadiocontrolTxNextByte(sendPtr[txCount]);
463 .LM65:
464 01ba 8091 0000 lds r24,txCount
465 01be E091 0000 lds r30,sendPtr
466 01c2 F091 0000 lds r31,(sendPtr)+1
467 01c6 E80F add r30,r24
468 01c8 F11D adc r31,__zero_reg__
469 01ca 8081 ld r24,Z
470 01cc 0E94 0000 call RadiocontrolTxNextByte
193:physical.c **** txCount++;
472 .LM66:
473 01d0 8091 0000 lds r24,txCount
474 01d4 8F5F subi r24,lo8(-(1))
475 01d6 8093 0000 sts txCount,r24
194:physical.c **** if (txCount < pktLength) { // 不是最后一个字节
477 .LM67:
478 01da 9091 0000 lds r25,pktLength
479 01de 8917 cp r24,r25
480 01e0 A0F5 brsh .L29
195:physical.c **** if(txCount < pktLength - 2){ // 是否要计算CRC
482 .LM68:
483 01e2 E82F mov r30,r24
484 01e4 FF27 clr r31
485 01e6 892F mov r24,r25
486 01e8 9927 clr r25
487 01ea 0297 sbiw r24,2
488 01ec E817 cp r30,r24
489 01ee F907 cpc r31,r25
490 01f0 8CF4 brge .L30
196:physical.c **** crcTx=update_crc(sendPtr[txCount], crcTx);
492 .LM69:
493 01f2 8091 0000 lds r24,sendPtr
494 01f6 9091 0000 lds r25,(sendPtr)+1
495 01fa E80F add r30,r24
496 01fc F91F adc r31,r25
497 01fe 6091 0000 lds r22,crcTx
498 0202 7091 0000 lds r23,(crcTx)+1
499 0206 8081 ld r24,Z
500 0208 0E94 0000 call update_crc
501 020c 9093 0000 sts (crcTx)+1,r25
502 0210 8093 0000 sts crcTx,r24
503 .L30:
197:physical.c **** }
198:physical.c **** if(txCount == pktLength - 2){ // 存入CRC结果
505 .LM70:
506 0214 8091 0000 lds r24,txCount
507 0218 282F mov r18,r24
508 021a 3327 clr r19
509 021c 8091 0000 lds r24,pktLength
510 0220 482F mov r20,r24
511 0222 5527 clr r21
512 0224 CA01 movw r24,r20
513 0226 0297 sbiw r24,2
514 0228 2817 cp r18,r24
515 022a 3907 cpc r19,r25
516 022c 11F5 brne .L34
199:physical.c **** *(int16_t *)(sendPtr + pktLength - 2) = crcTx;
518 .LM71:
519 022e E091 0000 lds r30,sendPtr
520 0232 F091 0000 lds r31,(sendPtr)+1
521 0236 E40F add r30,r20
522 0238 F51F adc r31,r21
523 023a 3297 sbiw r30,2
524 023c 8091 0000 lds r24,crcTx
525 0240 9091 0000 lds r25,(crcTx)+1
526 0244 8083 st Z,r24
527 0246 9183 std Z+1,r25
528 0248 14C0 rjmp .L34
529 .L29:
200:physical.c **** }
201:physical.c **** } else {
202:physical.c **** if (txCount == pktLength) { // 发送最后字节
531 .LM72:
532 024a 8917 cp r24,r25
533 024c 91F4 brne .L34
203:physical.c **** state = TRANSMITTING_LAST;
535 .LM73:
536 024e 83E0 ldi r24,lo8(3)
537 0250 03C0 rjmp .L38
538 .L28:
204:physical.c **** }
205:physical.c **** }
206:physical.c **** } else if (state == TRANSMITTING_LAST) {
540 .LM74:
541 0252 8330 cpi r24,lo8(3)
542 0254 21F4 brne .L35
207:physical.c **** state = TRANSMITTING_DONE;
544 .LM75:
545 0256 84E0 ldi r24,lo8(4)
546 .L38:
547 0258 8093 0000 sts state,r24
548 025c 0AC0 rjmp .L34
549 .L35:
208:physical.c **** } else if (state == TRANSMITTING_DONE) {
551 .LM76:
552 025e 8430 cpi r24,lo8(4)
553 0260 41F4 brne .L34
209:physical.c **** RadiocontrolIdle(); // 射频控制转入空闲
555 .LM77:
556 0262 0E94 0000 call RadiocontrolIdle
210:physical.c **** state = IDLE;
558 .LM78:
559 0266 1092 0000 sts state,__zero_reg__
211:physical.c **** OSPostTask(packet_sent); // 通知上层发送完成
561 .LM79:
562 026a 80E0 ldi r24,lo8(pm(packet_sent))
563 026c 90E0 ldi r25,hi8(pm(packet_sent))
564 026e 0E94 0000 call OSPostTask
565 .L34:
212:physical.c **** }
213:physical.c **** return SUCCESS;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -