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

📄 physical.lst

📁 一个WSN的树状路由,对于那些学WSN路由方面的朋友应该有说帮助.
💻 LST
📖 第 1 页 / 共 3 页
字号:
 279               	.LM32:
 280 00d8 80E0      		ldi r24,lo8(buffer2)
 281 00da 90E0      		ldi r25,hi8(buffer2)
 282 00dc 9093 0000 		sts (procBufPtr)+1,r25
 283 00e0 8093 0000 		sts procBufPtr,r24
 124:physical.c    **** 	procPtr = (char*)&buffer2;
 285               	.LM33:
 286 00e4 9093 0000 		sts (procPtr)+1,r25
 287 00e8 8093 0000 		sts procPtr,r24
 125:physical.c    **** 	recvBufState = FREE;
 289               	.LM34:
 290 00ec 1092 0000 		sts recvBufState,__zero_reg__
 126:physical.c    **** 	procBufState = FREE;
 292               	.LM35:
 293 00f0 1092 0000 		sts procBufState,__zero_reg__
 127:physical.c    **** 	RadiocontrolInit();
 295               	.LM36:
 296 00f4 0E94 0000 		call RadiocontrolInit
 128:physical.c    **** 	return SUCCESS;
 129:physical.c    **** }
 298               	.LM37:
 299 00f8 81E0      		ldi r24,lo8(1)
 300 00fa 90E0      		ldi r25,hi8(1)
 301               	/* epilogue: frame size=0 */
 302 00fc 0895      		ret
 303               	/* epilogue end (size=1) */
 304               	/* function PhysicalInit size 27 (26) */
 309               	.global	PhysicalTxPkt
 311               	PhysicalTxPkt:
 130:physical.c    **** 
 131:physical.c    **** /*************************************************************************
 132:physical.c    **** *功能描述:物理层进入空闲状态
 133:physical.c    **** *参数说明:无
 134:physical.c    **** *返回值:  无
 135:physical.c    **** **************************************************************************/
 136:physical.c    **** /*
 137:physical.c    **** static result_t PhysicalIdle(void)
 138:physical.c    **** {
 139:physical.c    **** 	RadiocontrolIdle();
 140:physical.c    **** 	state = IDLE;
 141:physical.c    **** 	return SUCCESS;
 142:physical.c    **** }
 143:physical.c    **** */
 144:physical.c    **** /*************************************************************************
 145:physical.c    **** *功能描述:物理层进入睡眠状态
 146:physical.c    **** *参数说明:无
 147:physical.c    **** *返回值:  无
 148:physical.c    **** **************************************************************************/
 149:physical.c    **** /*
 150:physical.c    **** static result_t PhysicalSleep(void)
 151:physical.c    **** {
 152:physical.c    **** 	RadiocontrolSleep();
 153:physical.c    **** 	state = IDLE;
 154:physical.c    **** 	return SUCCESS;
 155:physical.c    **** }
 156:physical.c    **** */
 157:physical.c    **** /*************************************************************************
 158:physical.c    **** *功能描述:物理层发送数据包接口函数,进入发送状态,启动整个发送流程
 159:physical.c    **** *参数说明:packet:数据包地址 length:物理层要发送的字节数
 160:physical.c    **** *返回值:  无
 161:physical.c    **** **************************************************************************/
 162:physical.c    **** result_t PhysicalTxPkt(void* packet, uint8_t length)
 163:physical.c    **** {
 313               	.LM38:
 314               	/* prologue: frame size=0 */
 315 00fe 0F93      		push r16
 316 0100 1F93      		push r17
 317 0102 CF93      		push r28
 318               	/* prologue end (size=3) */
 319 0104 8C01      		movw r16,r24
 320 0106 C62F      		mov r28,r22
 164:physical.c    **** 	if (length > MAX_PKT_LEN || length < MIN_PKT_LEN) 
 322               	.LM39:
 323 0108 862F      		mov r24,r22
 324 010a 8750      		subi r24,lo8(-(-7))
 325 010c 8633      		cpi r24,lo8(54)
 326 010e 20F4      		brsh .L22
 165:physical.c    **** 		return FAIL;
 166:physical.c    **** 	if (state != IDLE && state != RECEIVING) 
 328               	.LM40:
 329 0110 8091 0000 		lds r24,state
 330 0114 8230      		cpi r24,lo8(2)
 331 0116 18F0      		brlo .L21
 332               	.L22:
 167:physical.c    **** 		return FAIL;
 334               	.LM41:
 335 0118 80E0      		ldi r24,lo8(0)
 336 011a 90E0      		ldi r25,hi8(0)
 337 011c 1EC0      		rjmp .L19
 338               	.L21:
 168:physical.c    **** 
 169:physical.c    **** 	state = TRANSMITTING;
 340               	.LM42:
 341 011e 82E0      		ldi r24,lo8(2)
 342 0120 8093 0000 		sts state,r24
 170:physical.c    **** 	RadiocontrolStartTx();					 
 344               	.LM43:
 345 0124 0E94 0000 		call RadiocontrolStartTx
 171:physical.c    **** 	sendPtr = (char*)packet;
 347               	.LM44:
 348 0128 1093 0000 		sts (sendPtr)+1,r17
 349 012c 0093 0000 		sts sendPtr,r16
 172:physical.c    **** 	((OSMACMsgPtr)sendPtr)->length = length;  
 351               	.LM45:
 352 0130 F801      		movw r30,r16
 353 0132 C083      		st Z,r28
 173:physical.c    **** 	pktLength = length;						  
 355               	.LM46:
 356 0134 C093 0000 		sts pktLength,r28
 174:physical.c    **** 	txCount = 0;
 358               	.LM47:
 359 0138 1092 0000 		sts txCount,__zero_reg__
 175:physical.c    **** 
 176:physical.c    **** 	crcTx=update_crc(sendPtr[0], 0);
 361               	.LM48:
 362 013c E091 0000 		lds r30,sendPtr
 363 0140 F091 0000 		lds r31,(sendPtr)+1
 364 0144 60E0      		ldi r22,lo8(0)
 365 0146 70E0      		ldi r23,hi8(0)
 366 0148 8081      		ld r24,Z
 367 014a 0E94 0000 		call update_crc
 368 014e 9093 0000 		sts (crcTx)+1,r25
 369 0152 8093 0000 		sts crcTx,r24
 177:physical.c    **** 
 178:physical.c    **** 	return SUCCESS;
 371               	.LM49:
 372 0156 81E0      		ldi r24,lo8(1)
 373 0158 90E0      		ldi r25,hi8(1)
 374               	.L19:
 375               	/* epilogue: frame size=0 */
 376 015a CF91      		pop r28
 377 015c 1F91      		pop r17
 378 015e 0F91      		pop r16
 379 0160 0895      		ret
 380               	/* epilogue end (size=4) */
 381               	/* function PhysicalTxPkt size 50 (43) */
 384               	.global	PhysicalTxByteReady
 386               	PhysicalTxByteReady:
 179:physical.c    **** }
 180:physical.c    **** 
 181:physical.c    **** /*************************************************************************
 182:physical.c    **** *功能描述:发送未完成时,准备下一个要发送的字节,发送完成时进入空闲状态并通知上层
 183:physical.c    **** *参数说明:无
 184:physical.c    **** *返回值:  无
 185:physical.c    **** **************************************************************************/
 186:physical.c    **** result_t PhysicalTxByteReady(void)
 187:physical.c    **** {																// 射频控制模块获得数据包下一个字节
 388               	.LM50:
 389               	/* prologue: frame size=0 */
 390               	/* prologue end (size=0) */
 188:physical.c    **** 	if(state == TRANSMITTING) {
 392               	.LM51:
 393 0162 8091 0000 		lds r24,state
 394 0166 8230      		cpi r24,lo8(2)
 395 0168 09F0      		breq .+2
 396 016a 4CC0      		rjmp .L24
 189:physical.c    **** 		RadiocontrolTxNextByte(sendPtr[txCount]);
 398               	.LM52:
 399 016c 8091 0000 		lds r24,txCount
 400 0170 E091 0000 		lds r30,sendPtr
 401 0174 F091 0000 		lds r31,(sendPtr)+1
 402 0178 E80F      		add r30,r24
 403 017a F11D      		adc r31,__zero_reg__
 404 017c 8081      		ld r24,Z
 405 017e 0E94 0000 		call RadiocontrolTxNextByte
 190:physical.c    **** 		txCount++;
 407               	.LM53:
 408 0182 8091 0000 		lds r24,txCount
 409 0186 8F5F      		subi r24,lo8(-(1))
 410 0188 8093 0000 		sts txCount,r24
 191:physical.c    ****             if (txCount < pktLength) {								// 不是最后一个字节
 412               	.LM54:
 413 018c 9091 0000 		lds r25,pktLength
 414 0190 8917      		cp r24,r25
 415 0192 A0F5      		brsh .L25
 192:physical.c    **** 				if(txCount < pktLength - 2){						// 是否要计算CRC
 417               	.LM55:
 418 0194 E82F      		mov r30,r24
 419 0196 FF27      		clr r31
 420 0198 892F      		mov r24,r25
 421 019a 9927      		clr r25
 422 019c 0297      		sbiw r24,2
 423 019e E817      		cp r30,r24
 424 01a0 F907      		cpc r31,r25
 425 01a2 8CF4      		brge .L26
 193:physical.c    **** 					crcTx=update_crc(sendPtr[txCount], crcTx);	
 427               	.LM56:
 428 01a4 8091 0000 		lds r24,sendPtr
 429 01a8 9091 0000 		lds r25,(sendPtr)+1
 430 01ac E80F      		add r30,r24
 431 01ae F91F      		adc r31,r25
 432 01b0 6091 0000 		lds r22,crcTx
 433 01b4 7091 0000 		lds r23,(crcTx)+1
 434 01b8 8081      		ld r24,Z
 435 01ba 0E94 0000 		call update_crc
 436 01be 9093 0000 		sts (crcTx)+1,r25
 437 01c2 8093 0000 		sts crcTx,r24
 438               	.L26:
 194:physical.c    **** 				}
 195:physical.c    **** 				if(txCount == pktLength - 2){						// 存入CRC结果
 440               	.LM57:
 441 01c6 8091 0000 		lds r24,txCount
 442 01ca 282F      		mov r18,r24
 443 01cc 3327      		clr r19
 444 01ce 8091 0000 		lds r24,pktLength
 445 01d2 482F      		mov r20,r24
 446 01d4 5527      		clr r21
 447 01d6 CA01      		movw r24,r20
 448 01d8 0297      		sbiw r24,2
 449 01da 2817      		cp r18,r24
 450 01dc 3907      		cpc r19,r25
 451 01de 01F5      		brne .L30
 196:physical.c    **** 					*(int16_t *)(sendPtr + pktLength - 2) = crcTx;
 453               	.LM58:
 454 01e0 E091 0000 		lds r30,sendPtr
 455 01e4 F091 0000 		lds r31,(sendPtr)+1
 456 01e8 E40F      		add r30,r20
 457 01ea F51F      		adc r31,r21
 458 01ec 3297      		sbiw r30,2
 459 01ee 8091 0000 		lds r24,crcTx
 460 01f2 9091 0000 		lds r25,(crcTx)+1
 461 01f6 8083      		st Z,r24
 462 01f8 9183      		std Z+1,r25
 463 01fa 12C0      		rjmp .L30
 464               	.L25:
 197:physical.c    **** 				}
 198:physical.c    ****             } else {
 199:physical.c    **** 				if (txCount == pktLength) {							// 发送最后字节
 466               	.LM59:
 467 01fc 8917      		cp r24,r25
 468 01fe 81F4      		brne .L30
 200:physical.c    **** 					state = TRANSMITTING_LAST;
 470               	.LM60:
 471 0200 83E0      		ldi r24,lo8(3)
 472 0202 03C0      		rjmp .L34
 473               	.L24:
 201:physical.c    **** 				}
 202:physical.c    ****             }
 203:physical.c    **** 	} else if (state == TRANSMITTING_LAST) {
 475               	.LM61:
 476 0204 8330      		cpi r24,lo8(3)
 477 0206 21F4      		brne .L31
 204:physical.c    **** 		state = TRANSMITTING_DONE;
 479               	.LM62:
 480 0208 84E0      		ldi r24,lo8(4)
 481               	.L34:
 482 020a 8093 0000 		sts state,r24
 483 020e 08C0      		rjmp .L30
 484               	.L31:
 205:physical.c    **** 	} else if (state == TRANSMITTING_DONE) {
 486               	.LM63:
 487 0210 8430      		cpi r24,lo8(4)
 488 0212 31F4      		brne .L30
 206:physical.c    **** 		RadiocontrolIdle();											// 射频控制转入空闲
 490               	.LM64:
 491 0214 0E94 0000 		call RadiocontrolIdle
 207:physical.c    **** 		state = IDLE;
 493               	.LM65:
 494 0218 1092 0000 		sts state,__zero_reg__
 208:physical.c    **** 		// 通知上层发送完成
 209:physical.c    **** 	    packet_sent();
 496               	.LM66:
 497 021c 0E94 0000 		call packet_sent
 498               	.L30:
 210:physical.c    **** 	}	
 211:physical.c    **** 	return SUCCESS; 
 212:physical.c    **** }
 500               	.LM67:
 501 0220 81E0      		ldi r24,lo8(1)
 502 0222 90E0      		ldi r25,hi8(1)
 503               	/* epilogue: frame size=0 */
 504 0224 0895      		ret
 505               	/* epilogue end (size=1) */
 506               	/* function PhysicalTxByteReady size 98 (97) */
 509               	.global	PhysicalStartSymDetected
 511               	PhysicalStartSymDetected:
 213:physical.c    **** 
 214:physical.c    **** /*************************************************************************
 215:physical.c    **** *功能描述:检测到起始符号,通知MAC,准备接收数据,将缓存地址传给MAC

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -