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

📄 radiocontrol.lst

📁 一个WSN的树状路由,对于那些学WSN路由方面的朋友应该有说帮助.
💻 LST
📖 第 1 页 / 共 3 页
字号:
 165:radiocontrol.c **** 	csVal1 = 0x180;
 301               	.LM39:
 302 00e0 80E8      		ldi r24,lo8(384)
 303 00e2 91E0      		ldi r25,hi8(384)
 304 00e4 9093 0000 		sts (csVal1)+1,r25
 305 00e8 8093 0000 		sts csVal1,r24
 166:radiocontrol.c **** 	return SUCCESS;
 307               	.LM40:
 308 00ec 81E0      		ldi r24,lo8(1)
 309 00ee 90E0      		ldi r25,hi8(1)
 167:radiocontrol.c **** 	
 168:radiocontrol.c **** 		
 169:radiocontrol.c **** }
 311               	.LM41:
 312 00f0 0895      		ret
 313               	/* epilogue: frame size=0 */
 314 00f2 0895      		ret
 315               	/* epilogue end (size=1) */
 316               	/* function RadiocontrolCarrierSenseStart size 47 (46) */
 320               	.global	RadiocontrolRSSIADCDataReady
 322               	RadiocontrolRSSIADCDataReady:
 170:radiocontrol.c **** 
 171:radiocontrol.c **** /*************************************************************************
 172:radiocontrol.c **** *功能描述:ADC中断调用,表明RSSI数据到达,判断信道空闲与否
 173:radiocontrol.c **** *参数说明:ADC采集到的数据
 174:radiocontrol.c **** *返回值:  成功
 175:radiocontrol.c **** **************************************************************************/
 176:radiocontrol.c **** result_t RadiocontrolRSSIADCDataReady(uint16_t data)	// 判断信道是否空闲
 177:radiocontrol.c **** {
 324               	.LM42:
 325               	/* prologue: frame size=0 */
 326               	/* prologue end (size=0) */
 327 00f4 9C01      		movw r18,r24
 178:radiocontrol.c **** 	if (state == IDLE && carrSenTime > 0) {
 329               	.LM43:
 330 00f6 8091 0000 		lds r24,state
 331 00fa 8230      		cpi r24,lo8(2)
 332 00fc 09F0      		breq .+2
 333 00fe 3EC0      		rjmp .L13
 335               	.LM44:
 336 0100 8091 0000 		lds r24,carrSenTime
 337 0104 9091 0000 		lds r25,(carrSenTime)+1
 338 0108 892B      		or r24,r25
 339 010a C1F1      		breq .L13
 179:radiocontrol.c **** 		csValAve = (csVal1 + data) >> 1;				// 相邻两次监听的平均值;
 341               	.LM45:
 342 010c 8091 0000 		lds r24,csVal1
 343 0110 9091 0000 		lds r25,(csVal1)+1
 344 0114 820F      		add r24,r18
 345 0116 931F      		adc r25,r19
 346 0118 9695      		lsr r25
 347 011a 8795      		ror r24
 348 011c 9093 0000 		sts (csValAve)+1,r25
 349 0120 8093 0000 		sts csValAve,r24
 180:radiocontrol.c **** 		if (csValAve < BUSY_THRESHOLD) {				// 因为CC1000提供的是反电压值,所以值越小,信号越强;
 351               	.LM46:
 352 0124 8F3E      		cpi r24,239
 353 0126 9105      		cpc r25,__zero_reg__
 354 0128 78F4      		brsh .L14
 181:radiocontrol.c ****             idlecount = 0;
 356               	.LM47:
 357 012a 1092 0000 		sts idlecount,__zero_reg__
 182:radiocontrol.c **** 			if (backofftime <= 1) {
 359               	.LM48:
 360 012e 8091 0000 		lds r24,backofftime
 361 0132 9091 0000 		lds r25,(backofftime)+1
 362 0136 0297      		sbiw r24,2
 363 0138 08F5      		brsh .L13
 183:radiocontrol.c **** 			carrSenTime = 0 ;
 365               	.LM49:
 366 013a 1092 0000 		sts (carrSenTime)+1,__zero_reg__
 367 013e 1092 0000 		sts carrSenTime,__zero_reg__
 184:radiocontrol.c **** 			MACChannelBusy();
 369               	.LM50:
 370 0142 0E94 0000 		call MACChannelBusy
 371 0146 1AC0      		rjmp .L13
 372               	.L14:
 185:radiocontrol.c **** 			//监听信道的状态
 186:radiocontrol.c **** 			} 
 187:radiocontrol.c **** 		} else {
 188:radiocontrol.c ****             idlecount = idlecount + 1;
 374               	.LM51:
 375 0148 8091 0000 		lds r24,idlecount
 376 014c 8F5F      		subi r24,lo8(-(1))
 377 014e 8093 0000 		sts idlecount,r24
 189:radiocontrol.c **** 			if ( idlecount >= (DIFS*LISTEN_RATE>>3)){
 379               	.LM52:
 380 0152 8831      		cpi r24,lo8(24)
 381 0154 98F0      		brlo .L13
 190:radiocontrol.c **** 		        backofftime = backofftime - 1;
 383               	.LM53:
 384 0156 8091 0000 		lds r24,backofftime
 385 015a 9091 0000 		lds r25,(backofftime)+1
 386 015e 0197      		sbiw r24,1
 387 0160 9093 0000 		sts (backofftime)+1,r25
 388 0164 8093 0000 		sts backofftime,r24
 191:radiocontrol.c ****                     if( backofftime <=1){  
 390               	.LM54:
 391 0168 0297      		sbiw r24,2
 392 016a 40F4      		brsh .L13
 192:radiocontrol.c ****                     carrSenTime = 0 ;  
 394               	.LM55:
 395 016c 1092 0000 		sts (carrSenTime)+1,__zero_reg__
 396 0170 1092 0000 		sts carrSenTime,__zero_reg__
 193:radiocontrol.c ****                     idlecount = 0; 
 398               	.LM56:
 399 0174 1092 0000 		sts idlecount,__zero_reg__
 194:radiocontrol.c **** 					MACChannelIdle();
 401               	.LM57:
 402 0178 0E94 0000 		call MACChannelIdle
 403               	.L13:
 195:radiocontrol.c **** 					}
 196:radiocontrol.c **** 			      
 197:radiocontrol.c **** 			}
 198:radiocontrol.c **** 		}
 199:radiocontrol.c **** 	}
 200:radiocontrol.c **** 	return SUCCESS;
 201:radiocontrol.c **** }
 405               	.LM58:
 406 017c 81E0      		ldi r24,lo8(1)
 407 017e 90E0      		ldi r25,hi8(1)
 408               	/* epilogue: frame size=0 */
 409 0180 0895      		ret
 410               	/* epilogue end (size=1) */
 411               	/* function RadiocontrolRSSIADCDataReady size 73 (72) */
 414               	.global	RadiocontrolStartTx
 416               	RadiocontrolStartTx:
 202:radiocontrol.c **** 
 203:radiocontrol.c **** /*************************************************************************
 204:radiocontrol.c **** *功能描述:启动发送数据包的流程,并准备要发送的导频字节,CC1000、SPI进入发送态
 205:radiocontrol.c **** *参数说明:无
 206:radiocontrol.c **** *返回值:  成功
 207:radiocontrol.c **** **************************************************************************/
 208:radiocontrol.c **** result_t RadiocontrolStartTx()
 209:radiocontrol.c **** {
 418               	.LM59:
 419               	/* prologue: frame size=0 */
 420               	/* prologue end (size=0) */
 210:radiocontrol.c **** 	char temp;
 211:radiocontrol.c **** 	* (volatile unsigned char *)(0x0D + 0x20) = 0x00;	// 关SPI中断
 422               	.LM60:
 423 0182 1DB8      		out 45-0x20,__zero_reg__
 212:radiocontrol.c **** 	if (state == SLEEP) {								// 如果睡眠则唤醒
 425               	.LM61:
 426 0184 8091 0000 		lds r24,state
 427 0188 8130      		cpi r24,lo8(1)
 428 018a 11F4      		brne .L20
 213:radiocontrol.c **** 		CC1000ControlStdControlStart();
 430               	.LM62:
 431 018c 0E94 0000 		call CC1000ControlStdControlStart
 432               	.L20:
 214:radiocontrol.c **** 	}
 215:radiocontrol.c **** 	nextByte = 0xaa;									// 缓存下一个要发送的字节
 434               	.LM63:
 435 0190 9AEA      		ldi r25,lo8(-86)
 436 0192 9093 0000 		sts nextByte,r25
 216:radiocontrol.c **** 	txCount = 2;
 438               	.LM64:
 439 0196 82E0      		ldi r24,lo8(2)
 440 0198 8093 0000 		sts txCount,r24
 217:radiocontrol.c **** 	temp = * (volatile unsigned char *)(0x0E + 0x20);   // 清空SPSR寄存器
 442               	.LM65:
 443 019c 8EB1      		in r24,46-0x20
 218:radiocontrol.c **** 	* (volatile unsigned char *)(0x0F + 0x20) = 0xaa;;  //将要发送的第一个字节写入SPDR
 445               	.LM66:
 446 019e 9FB9      		out 47-0x20,r25
 219:radiocontrol.c **** 	
 220:radiocontrol.c **** 	//进入发送模式
 221:radiocontrol.c **** 	CC1000ControlTxMode();						
 448               	.LM67:
 449 01a0 0E94 0000 		call CC1000ControlTxMode
 222:radiocontrol.c **** 	OSH_MAKE_MISO_OUTPUT();
 451               	.LM68:
 452 01a4 0E94 0000 		call OSH_MAKE_MISO_OUTPUT
 223:radiocontrol.c **** 	OSH_MAKE_MOSI_OUTPUT();
 454               	.LM69:
 455 01a8 0E94 0000 		call OSH_MAKE_MOSI_OUTPUT
 224:radiocontrol.c **** 	* (volatile unsigned char *)(0x0D + 0x20) = 0xc0;    // 开SPI中断
 457               	.LM70:
 458 01ac 80EC      		ldi r24,lo8(-64)
 459 01ae 8DB9      		out 45-0x20,r24
 225:radiocontrol.c **** 	
 226:radiocontrol.c **** 	state = TRANSMIT;
 461               	.LM71:
 462 01b0 85E0      		ldi r24,lo8(5)
 463 01b2 8093 0000 		sts state,r24
 227:radiocontrol.c **** 	return SUCCESS;
 228:radiocontrol.c **** }
 465               	.LM72:
 466 01b6 81E0      		ldi r24,lo8(1)
 467 01b8 90E0      		ldi r25,hi8(1)
 468               	/* epilogue: frame size=0 */
 469 01ba 0895      		ret
 470               	/* epilogue end (size=1) */
 471               	/* function RadiocontrolStartTx size 29 (28) */
 476               	.global	RadiocontrolTxNextByte
 478               	RadiocontrolTxNextByte:
 229:radiocontrol.c **** 
 230:radiocontrol.c **** /*************************************************************************
 231:radiocontrol.c **** *功能描述:供上层调用,把下一个要发送的字节存入发送缓冲
 232:radiocontrol.c **** *参数说明:要发送的字节
 233:radiocontrol.c **** *返回值:  成功
 234:radiocontrol.c **** **************************************************************************/
 235:radiocontrol.c **** result_t RadiocontrolTxNextByte(char data)				// 准备下一个要发送的字节
 236:radiocontrol.c **** {
 480               	.LM73:
 481               	/* prologue: frame size=0 */
 482               	/* prologue end (size=0) */
 237:radiocontrol.c **** 	nextByte = data;
 484               	.LM74:
 485 01bc 8093 0000 		sts nextByte,r24
 238:radiocontrol.c **** 	return SUCCESS;
 239:radiocontrol.c **** }
 487               	.LM75:
 488 01c0 81E0      		ldi r24,lo8(1)
 489 01c2 90E0      		ldi r25,hi8(1)
 490               	/* epilogue: frame size=0 */
 491 01c4 0895      		ret
 492               	/* epilogue end (size=1) */
 493               	/* function RadiocontrolTxNextByte size 5 (4) */
 496               	.global	__vector_17
 498               	__vector_17:
 240:radiocontrol.c **** 
 241:radiocontrol.c **** /*************************************************************************
 242:radiocontrol.c **** *功能描述:SPI中断服务程序,由CC1000的时钟信号引发,与CC1000同步,即数据率相同
 243:radiocontrol.c **** *          根据本地状态进行相应的处理,为上层提供服务
 244:radiocontrol.c **** *参数说明:无
 245:radiocontrol.c **** *返回值:  成功
 246:radiocontrol.c **** **************************************************************************/
 247:radiocontrol.c **** void __attribute((signal))   __vector_17(void)
 248:radiocontrol.c **** {   
 500               	.LM76:
 501               	/* prologue: frame size=0 */
 502 01c6 1F92      		push __zero_reg__
 503 01c8 0F92      		push __tmp_reg__
 504 01ca 0FB6      		in __tmp_reg__,__SREG__
 505 01cc 0F92      		push __tmp_reg__
 506 01ce 1124      		clr __zero_reg__
 507 01d0 2F93      		push r18
 508 01d2 3F93      		push r19
 509 01d4 4F93      		push r20
 510 01d6 5F93      		push r21
 511 01d8 6F93      		push r22
 512 01da 7F93      		push r23
 513 01dc 8F93      		push r24
 514 01de 9F93      		push r25
 515 01e0 AF93      		push r26
 516 01e2 BF93      		push r27
 517 01e4 EF93      		push r30
 518 01e6 FF93      		push r31
 519               	/* prologue end (size=17) */
 249:radiocontrol.c **** 	uint8_t data;
 250:radiocontrol.c **** 	data = * (volatile unsigned char *)(0x0F + 0x20);		// 从SPDR读入字节
 521               	.LM77:
 522 01e8 2FB1      		in r18,47-0x20
 251:radiocontrol.c **** 	if (bInvertRxData) data = ~data;
 524               	.LM78:
 525 01ea 8091 0000 		lds r24,bInvertRxData
 526 01ee 8111      		cpse r24,__zero_reg__
 528               	.LM79:
 529 01f0 2095      		com r18
 530               	.L23:
 252:radiocontrol.c **** 	
 253:radiocontrol.c **** 	if (state == TRANSMIT) {								// 发送状态
 532               	.LM80:
 533 01f2 8091 0000 		lds r24,state
 534 01f6 8530      		cpi r24,lo8(5)
 535 01f8 C9F4      		brne .L24
 254:radiocontrol.c **** 		* (volatile unsigned char *)(0x0F + 0x20) = nextByte;// 发送缓存中的字节
 537               	.LM81:
 538 01fa 8091 0000 		lds r24,nextByte
 539 01fe 8FB9      		out 47-0x20,r24
 255:radiocontrol.c **** 		if (txCount < PREAMBLE_LEN) {						// 继续发送导频
 541               	.LM82:
 542 0200 9091 0000 		lds r25,txCount
 543 0204 9231      		cpi r25,lo8(18)
 544 0206 10F4      		brsh .L25
 256:radiocontrol.c ****             nextByte = 0xaa;
 546               	.LM83:
 547 0208 8AEA      		ldi r24,lo8(-86)
 548 020a 07C0      		rjmp .L59
 549               	.L25:
 257:radiocontrol.c ****             txCount++;
 258:radiocontrol.c **** 		} else if (txCount < PREAMBLE_LEN + sizeof(start)) {// 导频发送完毕
 551               	.LM84:
 552 020c 9431      		cpi r25,lo8(20)
 553 020e 58F4      		brsh .L27
 259:radiocontrol.c ****             nextByte = start[txCount - PREAMBLE_LEN];		// 发两个同步字节;
 555               	.LM85:
 556 0210 E92F      		mov r30,r25
 557 0212 FF27      		clr r31
 558 0214 E050      		subi r30,lo8(-(start-18))
 559 0216 F040      		sbci r31,hi8(-(start-18))
 560 0218 8081      		ld r24,Z
 561               	.L59:
 562 021a 8093 0000 		sts nextByte,r24
 260:radiocontrol.c ****             txCount++;
 564               	.LM86:
 565 021e 9F5F      		subi r25,lo8(-(1))
 566 0220 9093 0000 		sts txCount,r25
 567 0224 A6C0      		rjmp .L22
 568               	.L27:
 261:radiocontrol.c **** 		} else { 	
 262:radiocontrol.c **** 			PhysicalTxByteReady();
 570               	.LM87:
 571 0226 0E94 0000 		call PhysicalTxByteReady
 572 022a A3C0      		rjmp .L22
 573               	.L24:
 263:radiocontrol.c ****             //加入对上层函数的调用							// 通知上层发送数据包;
 264:radiocontrol.c **** 		}
 265:radiocontrol.c **** 	} else if (state == IDLE) {								// 空闲
 575               	.LM88:
 576 022c 8230      		cpi r24,lo8(2)
 577 022e 11F5      		brne .L30
 266:radiocontrol.c **** 		bManchesterBad = * (volatile unsigned char *)(0x1A + 0x20) & 0x40;// CHP_OUT位
 579               	.LM89:
 580 0230 8AB3      		in r24,58-0x20
 581 0232 8074      		andi r24,lo8(64)
 582 0234 8093 0000 		sts bManchesterBad,r24
 267:radiocontrol.c **** 		if ((!bManchesterBad) && (data == 0xaa || data == 0x55)) {
 584               	.LM90:
 585 0238 8823      		tst r24
 586 023a 79F4      		brne .L31
 587 023c 2A3A      		cpi r18,lo8(-86)
 588 023e 11F0      		breq .L32
 589 0240 2535      		cpi r18,lo8(85)
 590 0242 59F4      		brne .L31
 591               	.L32:
 268:radiocontrol.c ****             PreambleCount++;
 593               	.LM91:

⌨️ 快捷键说明

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