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