⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac.lst

📁 adhoc信息节点程序源代码(点对多点)——for atmega128
💻 LST
📖 第 1 页 / 共 4 页
字号:
 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 + -