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

📄 mac.lst

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