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

📄 physical.lst

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