📄 mac.lst
字号:
440 0174 0895 ret
441 /* epilogue end (size=1) */
442 /* function MACPhysicalTxPktDone size 39 (38) */
446 .global MACClockFire
448 MACClockFire:
283:mac.c ****
284:mac.c **** /*************************************************************************
285:mac.c **** *功能描述:CTS或ACK超时后尝试重发
286:mac.c **** *参数说明:包地址
287:mac.c **** *返回值:
288:mac.c **** **************************************************************************/
289:mac.c **** static void tryToResend(uint8_t delay)
290:mac.c **** {
291:mac.c **** if (numRetry < MAC_RETRY_LIMIT) {
292:mac.c **** numRetry++;
293:mac.c **** state = IDLE;
294:mac.c **** if (delay == 0) // 无延迟,立即重发
295:mac.c **** tryToSend();
296:mac.c **** else
297:mac.c **** retryTime = delay;
298:mac.c **** } else {
299:mac.c **** // 超过重发次数,发送失败
300:mac.c **** txMsgDone(); // txFragCount < txFragsAll;
301:mac.c **** }
302:mac.c **** }
303:mac.c ****
304:mac.c **** /*************************************************************************
305:mac.c **** *功能描述:MAC定时维护,1ms一次
306:mac.c **** *参数说明:
307:mac.c **** *返回值:
308:mac.c **** **************************************************************************/
309:mac.c **** void MACClockFire()
310:mac.c **** {
450 .LM64:
451 /* prologue: frame size=0 */
452 /* prologue end (size=0) */
311:mac.c **** // 本地时钟
312:mac.c **** clockTime++;
454 .LM65:
455 0176 8091 0000 lds r24,clockTime
456 017a 9091 0000 lds r25,(clockTime)+1
457 017e A091 0000 lds r26,(clockTime)+2
458 0182 B091 0000 lds r27,(clockTime)+3
459 0186 0196 adiw r24,1
460 0188 A11D adc r26,__zero_reg__
461 018a B11D adc r27,__zero_reg__
462 018c 8093 0000 sts clockTime,r24
463 0190 9093 0000 sts (clockTime)+1,r25
464 0194 A093 0000 sts (clockTime)+2,r26
465 0198 B093 0000 sts (clockTime)+3,r27
313:mac.c ****
314:mac.c **** // ----------------------------generic timer-------------------------
315:mac.c **** // ----------------------------处理超时事件--------------------------
316:mac.c **** if (geneTime > 0) { // 为零时不执行
467 .LM66:
468 019c 8091 0000 lds r24,geneTime
469 01a0 9091 0000 lds r25,(geneTime)+1
470 01a4 0097 sbiw r24,0
471 01a6 E1F0 breq .L25
317:mac.c **** geneTime--;
473 .LM67:
474 01a8 0197 sbiw r24,1
475 01aa 9093 0000 sts (geneTime)+1,r25
476 01ae 8093 0000 sts geneTime,r24
318:mac.c **** if (geneTime == 0) {
478 .LM68:
479 01b2 892B or r24,r25
480 01b4 A9F4 brne .L25
319:mac.c **** if (state == WAIT_CTS) { // CTS timeout CTS等待超时
482 .LM69:
483 01b6 8091 0000 lds r24,state
484 01ba 8530 cpi r24,lo8(5)
485 01bc 89F0 breq .L25
320:mac.c **** } else if (state == WAIT_ACK) { // ACK timeout等待超时
487 .LM70:
488 01be 8730 cpi r24,lo8(7)
489 01c0 79F0 breq .L25
321:mac.c **** } else if (state == TX_PKT) { // 发送完成时限到达时仍未发送完成,即发包超时
491 .LM71:
492 01c2 8330 cpi r24,lo8(3)
493 01c4 69F4 brne .L25
322:mac.c **** PhysicalIdle();
495 .LM72:
496 01c6 0E94 0000 call PhysicalIdle
323:mac.c **** radioState = RADIO_IDLE;
498 .LM73:
499 01ca 81E0 ldi r24,lo8(1)
500 01cc 8093 0000 sts radioState,r24
324:mac.c **** state = IDLE;
502 .LM74:
503 01d0 8093 0000 sts state,r24
325:mac.c **** if (txRequest == 1) {
505 .LM75:
506 01d4 8091 0000 lds r24,txRequest
507 01d8 8130 cpi r24,lo8(1)
508 01da 11F4 brne .L25
326:mac.c **** tryToSend();
510 .LM76:
511 01dc 0E94 0000 call tryToSend
512 .L25:
327:mac.c **** }
328:mac.c **** } else if (state == WAIT_DATA) {
329:mac.c **** }
330:mac.c **** }
331:mac.c **** }
332:mac.c ****
333:mac.c **** if (retryTime > 0) {
514 .LM77:
515 01e0 8091 0000 lds r24,retryTime
516 01e4 8823 tst r24
517 01e6 49F0 breq .L24
334:mac.c **** retryTime--;
519 .LM78:
520 01e8 8150 subi r24,lo8(-(-1))
521 01ea 8093 0000 sts retryTime,r24
335:mac.c **** if (retryTime == 0) {
523 .LM79:
524 01ee 8823 tst r24
525 01f0 21F4 brne .L24
336:mac.c **** tryToSend();
527 .LM80:
528 01f2 0E94 0000 call tryToSend
337:mac.c **** LedGreenToggle();
530 .LM81:
531 01f6 0E94 0000 call LedGreenToggle
532 .L24:
533 01fa 0895 ret
534 /* epilogue: frame size=0 */
535 01fc 0895 ret
536 /* epilogue end (size=1) */
537 /* function MACClockFire size 68 (67) */
540 .global MACChannelBusy
542 MACChannelBusy:
338:mac.c **** }
339:mac.c **** }
340:mac.c **** }
341:mac.c ****
342:mac.c **** /*************************************************************************
343:mac.c **** *功能描述:物理层调用,通知MAC层信道忙,MAC转入空闲态,可以接收数据
344:mac.c **** *参数说明:
345:mac.c **** *返回值: 执行结果
346:mac.c **** **************************************************************************/
347:mac.c **** result_t MACChannelBusy()
348:mac.c **** {
544 .LM82:
545 /* prologue: frame size=0 */
546 /* prologue end (size=0) */
349:mac.c **** if (state == CARR_SENSE) {
548 .LM83:
549 01fe 8091 0000 lds r24,state
550 0202 8230 cpi r24,lo8(2)
551 0204 31F4 brne .L38
350:mac.c **** state = IDLE;
553 .LM84:
554 0206 81E0 ldi r24,lo8(1)
555 0208 8093 0000 sts state,r24
351:mac.c ****
352:mac.c **** retryTime = EIFS;
557 .LM85:
558 020c 8AE0 ldi r24,lo8(10)
559 020e 8093 0000 sts retryTime,r24
560 .L38:
353:mac.c **** }
354:mac.c **** return SUCCESS;
355:mac.c **** }
562 .LM86:
563 0212 81E0 ldi r24,lo8(1)
564 0214 90E0 ldi r25,hi8(1)
565 /* epilogue: frame size=0 */
566 0216 0895 ret
567 /* epilogue end (size=1) */
568 /* function MACChannelBusy size 13 (12) */
571 .global MACChannelIdle
573 MACChannelIdle:
356:mac.c ****
357:mac.c **** /*************************************************************************
358:mac.c **** *功能描述:物理层调用,通知MAC层信道闲,根据发送方式发送数据包
359:mac.c **** *参数说明:
360:mac.c **** *返回值: 执行结果
361:mac.c **** **************************************************************************/
362:mac.c **** result_t MACChannelIdle()
363:mac.c **** {
575 .LM87:
576 /* prologue: frame size=0 */
577 /* prologue end (size=0) */
364:mac.c **** if (state != CARR_SENSE)
579 .LM88:
580 0218 8091 0000 lds r24,state
581 021c 8230 cpi r24,lo8(2)
582 021e 19F0 breq .L40
365:mac.c **** return FAIL;
584 .LM89:
585 0220 80E0 ldi r24,lo8(0)
586 0222 90E0 ldi r25,hi8(0)
587 0224 0895 ret
588 .L40:
366:mac.c **** if (howToSend == BCAST_DATA) {
590 .LM90:
591 0226 8091 0000 lds r24,howToSend
592 022a 8823 tst r24
593 022c 99F4 brne .L43
594 .LBB2:
595 .LBB3:
597 .LM91:
598 022e 6091 0000 lds r22,txPktLen
599 0232 8091 0000 lds r24,dataPkt
600 0236 9091 0000 lds r25,(dataPkt)+1
601 023a 0E94 0000 call PhysicalTxPkt
603 .LM92:
604 023e 83E0 ldi r24,lo8(3)
605 0240 8093 0000 sts radioState,r24
607 .LM93:
608 0244 8093 0000 sts state,r24
610 .LM94:
611 0248 80ED ldi r24,lo8(2000)
612 024a 97E0 ldi r25,hi8(2000)
613 024c 9093 0000 sts (geneTime)+1,r25
614 0250 8093 0000 sts geneTime,r24
615 .L43:
616 .LBE3:
617 .LBE2:
367:mac.c **** startBcast();
368:mac.c **** } else if (howToSend == SEND_RTS) {
369:mac.c **** sendRTS();
370:mac.c **** }
371:mac.c **** return SUCCESS;
619 .LM95:
620 0254 81E0 ldi r24,lo8(1)
621 0256 90E0 ldi r25,hi8(1)
372:mac.c **** }
623 .LM96:
624 0258 0895 ret
625 /* epilogue: frame size=0 */
626 025a 0895 ret
627 /* epilogue end (size=1) */
628 /* function MACChannelIdle size 34 (33) */
632 .global MACStartSymDetected
634 MACStartSymDetected:
373:mac.c ****
374:mac.c **** /*************************************************************************
375:mac.c **** *功能描述:物理层调用,检测到起始字符,通知MAC准备接收数据包
376:mac.c **** *参数说明:
377:mac.c **** *返回值: 执行结果
378:mac.c **** **************************************************************************/
379:mac.c **** result_t MACStartSymDetected(void* pkt)
380:mac.c **** {
636 .LM97:
637 /* prologue: frame size=0 */
638 /* prologue end (size=0) */
381:mac.c **** radioState = RADIO_RX;
640 .LM98:
641 025c 82E0 ldi r24,lo8(2)
642 025e 8093 0000 sts radioState,r24
382:mac.c **** if (state == IDLE || state == CARR_SENSE) {
644 .LM99:
645 0262 8091 0000 lds r24,state
646 0266 8150 subi r24,lo8(-(-1))
647 0268 8230 cpi r24,lo8(2)
648 026a 28F4 brsh .L47
383:mac.c **** state = BACKOFF;
650 .LM100:
651 026c 84E0 ldi r24,lo8(4)
652 026e 8093 0000 sts state,r24
384:mac.c **** retryTime = 0;
654 .LM101:
655 0272 1092 0000 sts retryTime,__zero_reg__
656 .L47:
385:mac.c **** }
386:mac.c **** return SUCCESS;
387:mac.c **** }
658 .LM102:
659 0276 81E0 ldi r24,lo8(1)
660 0278 90E0 ldi r25,hi8(1)
661 /* epilogue: frame size=0 */
662 027a 0895 ret
663 /* epilogue end (size=1) */
664 /* function MACStartSymDetected size 16 (15) */
668 handleErrPkt:
388:mac.c ****
389:mac.c **** /*************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -