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

📄 radiocontrol.lst

📁 adhoc信息节点程序源代码(点对多点)——for atmega128
💻 LST
📖 第 1 页 / 共 3 页
字号:
 268               	/* function RadiocontrolCarrierSenseStart size 29 (28) */
 272               	.global	RadiocontrolRSSIADCDataReady
 274               	RadiocontrolRSSIADCDataReady:
 153:radiocontrol.c **** 
 154:radiocontrol.c **** /*************************************************************************
 155:radiocontrol.c **** *功能描述:ADC中断调用,表明RSSI数据到达,判断信道空闲与否
 156:radiocontrol.c **** *参数说明:ADC采集到的数据
 157:radiocontrol.c **** *返回值:  成功
 158:radiocontrol.c **** **************************************************************************/
 159:radiocontrol.c **** result_t RadiocontrolRSSIADCDataReady(uint16_t data)	// 判断信道是否空闲
 160:radiocontrol.c **** {
 276               	.LM37:
 277               	/* prologue: frame size=0 */
 278               	/* prologue end (size=0) */
 279 00b8 9C01      		movw r18,r24
 161:radiocontrol.c **** 	if (state == IDLE && carrSenTime > 0) {
 281               	.LM38:
 282 00ba 8091 0000 		lds r24,state
 283 00be 8230      		cpi r24,lo8(2)
 284 00c0 F1F4      		brne .L13
 286               	.LM39:
 287 00c2 8091 0000 		lds r24,carrSenTime
 288 00c6 9091 0000 		lds r25,(carrSenTime)+1
 289 00ca 892B      		or r24,r25
 290 00cc C1F0      		breq .L13
 162:radiocontrol.c **** 		csValAve = (csVal1 + data) >> 1;				// 相邻两次监听的平均值;
 292               	.LM40:
 293 00ce 8091 0000 		lds r24,csVal1
 294 00d2 9091 0000 		lds r25,(csVal1)+1
 295 00d6 820F      		add r24,r18
 296 00d8 931F      		adc r25,r19
 297 00da 9695      		lsr r25
 298 00dc 8795      		ror r24
 299 00de 9093 0000 		sts (csValAve)+1,r25
 300 00e2 8093 0000 		sts csValAve,r24
 163:radiocontrol.c **** 		if (csValAve < BUSY_THRESHOLD) {				// 因为CC1000提供的是反电压值,所以值越小,信号越强;
 302               	.LM41:
 303 00e6 8F3E      		cpi r24,239
 304 00e8 9105      		cpc r25,__zero_reg__
 305 00ea 38F4      		brsh .L14
 164:radiocontrol.c ****             carrSenTime = 0;
 307               	.LM42:
 308 00ec 1092 0000 		sts (carrSenTime)+1,__zero_reg__
 309 00f0 1092 0000 		sts carrSenTime,__zero_reg__
 165:radiocontrol.c **** 			MACChannelBusy();
 311               	.LM43:
 312 00f4 0E94 0000 		call MACChannelBusy
 313 00f8 02C0      		rjmp .L13
 314               	.L14:
 166:radiocontrol.c ****             //加入对上层函数的调用, 通知信道忙
 167:radiocontrol.c **** 		} else {
 168:radiocontrol.c **** 			MACChannelIdle();
 316               	.LM44:
 317 00fa 0E94 0000 		call MACChannelIdle
 318               	.L13:
 169:radiocontrol.c **** 		}
 170:radiocontrol.c **** 	}
 171:radiocontrol.c **** 	return SUCCESS;
 172:radiocontrol.c **** }
 320               	.LM45:
 321 00fe 81E0      		ldi r24,lo8(1)
 322 0100 90E0      		ldi r25,hi8(1)
 323               	/* epilogue: frame size=0 */
 324 0102 0895      		ret
 325               	/* epilogue end (size=1) */
 326               	/* function RadiocontrolRSSIADCDataReady size 38 (37) */
 329               	.global	RadiocontrolStartTx
 331               	RadiocontrolStartTx:
 173:radiocontrol.c **** 
 174:radiocontrol.c **** /*************************************************************************
 175:radiocontrol.c **** *功能描述:启动发送数据包的流程,并准备要发送的导频字节,CC1000、SPI进入发送态
 176:radiocontrol.c **** *参数说明:无
 177:radiocontrol.c **** *返回值:  成功
 178:radiocontrol.c **** **************************************************************************/
 179:radiocontrol.c **** result_t RadiocontrolStartTx()
 180:radiocontrol.c **** {
 333               	.LM46:
 334               	/* prologue: frame size=0 */
 335               	/* prologue end (size=0) */
 181:radiocontrol.c **** 	char temp;
 182:radiocontrol.c **** 	* (volatile unsigned char *)(0x0D + 0x20) = 0x00;	// 关SPI中断
 337               	.LM47:
 338 0104 1DB8      		out 45-0x20,__zero_reg__
 183:radiocontrol.c **** 	if (state == SLEEP) {								// 如果睡眠则唤醒
 340               	.LM48:
 341 0106 8091 0000 		lds r24,state
 342 010a 8130      		cpi r24,lo8(1)
 343 010c 11F4      		brne .L17
 184:radiocontrol.c **** 		CC1000ControlStdControlStart();
 345               	.LM49:
 346 010e 0E94 0000 		call CC1000ControlStdControlStart
 347               	.L17:
 185:radiocontrol.c **** 	}
 186:radiocontrol.c **** 	nextByte = 0xaa;									// 缓存下一个要发送的字节
 349               	.LM50:
 350 0112 9AEA      		ldi r25,lo8(-86)
 351 0114 9093 0000 		sts nextByte,r25
 187:radiocontrol.c **** 	txCount = 2;
 353               	.LM51:
 354 0118 82E0      		ldi r24,lo8(2)
 355 011a 8093 0000 		sts txCount,r24
 188:radiocontrol.c **** 	temp = * (volatile unsigned char *)(0x0E + 0x20);   // 清空SPSR寄存器
 357               	.LM52:
 358 011e 8EB1      		in r24,46-0x20
 189:radiocontrol.c **** 	* (volatile unsigned char *)(0x0F + 0x20) = 0xaa;;  //将要发送的第一个字节写入SPDR
 360               	.LM53:
 361 0120 9FB9      		out 47-0x20,r25
 190:radiocontrol.c **** 	
 191:radiocontrol.c **** 	//进入发送模式
 192:radiocontrol.c **** 	CC1000ControlTxMode();						
 363               	.LM54:
 364 0122 0E94 0000 		call CC1000ControlTxMode
 193:radiocontrol.c **** 	OSH_MAKE_MISO_OUTPUT();
 366               	.LM55:
 367 0126 0E94 0000 		call OSH_MAKE_MISO_OUTPUT
 194:radiocontrol.c **** 	OSH_MAKE_MOSI_OUTPUT();
 369               	.LM56:
 370 012a 0E94 0000 		call OSH_MAKE_MOSI_OUTPUT
 195:radiocontrol.c **** 	* (volatile unsigned char *)(0x0D + 0x20) = 0xc0;    // 开SPI中断
 372               	.LM57:
 373 012e 80EC      		ldi r24,lo8(-64)
 374 0130 8DB9      		out 45-0x20,r24
 196:radiocontrol.c **** 	
 197:radiocontrol.c **** 	state = TRANSMIT;
 376               	.LM58:
 377 0132 85E0      		ldi r24,lo8(5)
 378 0134 8093 0000 		sts state,r24
 198:radiocontrol.c **** 	return SUCCESS;
 199:radiocontrol.c **** }
 380               	.LM59:
 381 0138 81E0      		ldi r24,lo8(1)
 382 013a 90E0      		ldi r25,hi8(1)
 383               	/* epilogue: frame size=0 */
 384 013c 0895      		ret
 385               	/* epilogue end (size=1) */
 386               	/* function RadiocontrolStartTx size 29 (28) */
 391               	.global	RadiocontrolTxNextByte
 393               	RadiocontrolTxNextByte:
 200:radiocontrol.c **** 
 201:radiocontrol.c **** /*************************************************************************
 202:radiocontrol.c **** *功能描述:供上层调用,把下一个要发送的字节存入发送缓冲
 203:radiocontrol.c **** *参数说明:要发送的字节
 204:radiocontrol.c **** *返回值:  成功
 205:radiocontrol.c **** **************************************************************************/
 206:radiocontrol.c **** result_t RadiocontrolTxNextByte(char data)				// 准备下一个要发送的字节
 207:radiocontrol.c **** {
 395               	.LM60:
 396               	/* prologue: frame size=0 */
 397               	/* prologue end (size=0) */
 208:radiocontrol.c **** 	nextByte = data;
 399               	.LM61:
 400 013e 8093 0000 		sts nextByte,r24
 209:radiocontrol.c **** //	uartDebug_txByte(data);
 210:radiocontrol.c **** 	return SUCCESS;
 211:radiocontrol.c **** }
 402               	.LM62:
 403 0142 81E0      		ldi r24,lo8(1)
 404 0144 90E0      		ldi r25,hi8(1)
 405               	/* epilogue: frame size=0 */
 406 0146 0895      		ret
 407               	/* epilogue end (size=1) */
 408               	/* function RadiocontrolTxNextByte size 5 (4) */
 411               	.global	__vector_17
 413               	__vector_17:
 212:radiocontrol.c **** 
 213:radiocontrol.c **** /*************************************************************************
 214:radiocontrol.c **** *功能描述:SPI中断服务程序,由CC1000的时钟信号引发,与CC1000同步,即数据率相同
 215:radiocontrol.c **** *          根据本地状态进行相应的处理,为上层提供服务
 216:radiocontrol.c **** *参数说明:无
 217:radiocontrol.c **** *返回值:  成功
 218:radiocontrol.c **** **************************************************************************/
 219:radiocontrol.c **** void __attribute((signal))   __vector_17(void)
 220:radiocontrol.c **** {
 415               	.LM63:
 416               	/* prologue: frame size=0 */
 417 0148 1F92      		push __zero_reg__
 418 014a 0F92      		push __tmp_reg__
 419 014c 0FB6      		in __tmp_reg__,__SREG__
 420 014e 0F92      		push __tmp_reg__
 421 0150 1124      		clr __zero_reg__
 422 0152 2F93      		push r18
 423 0154 3F93      		push r19
 424 0156 4F93      		push r20
 425 0158 5F93      		push r21
 426 015a 6F93      		push r22
 427 015c 7F93      		push r23
 428 015e 8F93      		push r24
 429 0160 9F93      		push r25
 430 0162 AF93      		push r26
 431 0164 BF93      		push r27
 432 0166 EF93      		push r30
 433 0168 FF93      		push r31
 434               	/* prologue end (size=17) */
 221:radiocontrol.c **** 	uint8_t data;
 222:radiocontrol.c **** 	data = * (volatile unsigned char *)(0x0F + 0x20);		// 从SPDR读入字节
 436               	.LM64:
 437 016a 2FB1      		in r18,47-0x20
 223:radiocontrol.c **** 	if (bInvertRxData) data = ~data;
 439               	.LM65:
 440 016c 8091 0000 		lds r24,bInvertRxData
 441 0170 8111      		cpse r24,__zero_reg__
 443               	.LM66:
 444 0172 2095      		com r18
 445               	.L20:
 224:radiocontrol.c **** 	
 225:radiocontrol.c **** 	if (state == TRANSMIT) {								// 发送状态
 447               	.LM67:
 448 0174 8091 0000 		lds r24,state
 449 0178 8530      		cpi r24,lo8(5)
 450 017a C9F4      		brne .L21
 226:radiocontrol.c **** 		* (volatile unsigned char *)(0x0F + 0x20) = nextByte;// 发送缓存中的字节
 452               	.LM68:
 453 017c 8091 0000 		lds r24,nextByte
 454 0180 8FB9      		out 47-0x20,r24
 227:radiocontrol.c **** 		if (txCount < PREAMBLE_LEN) {						// 继续发送导频
 456               	.LM69:
 457 0182 9091 0000 		lds r25,txCount
 458 0186 9231      		cpi r25,lo8(18)
 459 0188 10F4      		brsh .L22
 228:radiocontrol.c ****             nextByte = 0xaa;
 461               	.LM70:
 462 018a 8AEA      		ldi r24,lo8(-86)
 463 018c 07C0      		rjmp .L57
 464               	.L22:
 229:radiocontrol.c ****             txCount++;
 230:radiocontrol.c **** 		} else if (txCount < PREAMBLE_LEN + sizeof(start)) {// 导频发送完毕
 466               	.LM71:
 467 018e 9431      		cpi r25,lo8(20)
 468 0190 58F4      		brsh .L24
 231:radiocontrol.c ****             nextByte = start[txCount - PREAMBLE_LEN];		// 发两个同步字节;
 470               	.LM72:
 471 0192 E92F      		mov r30,r25
 472 0194 FF27      		clr r31
 473 0196 E050      		subi r30,lo8(-(start-18))
 474 0198 F040      		sbci r31,hi8(-(start-18))
 475 019a 8081      		ld r24,Z
 476               	.L57:
 477 019c 8093 0000 		sts nextByte,r24
 232:radiocontrol.c ****             txCount++;
 479               	.LM73:
 480 01a0 9F5F      		subi r25,lo8(-(1))
 481 01a2 9093 0000 		sts txCount,r25
 482 01a6 B2C0      		rjmp .L19
 483               	.L24:
 233:radiocontrol.c **** 		} else {
 234:radiocontrol.c **** 			PhysicalTxByteReady();
 485               	.LM74:
 486 01a8 0E94 0000 		call PhysicalTxByteReady
 487 01ac AFC0      		rjmp .L19
 488               	.L21:
 235:radiocontrol.c ****             //加入对上层函数的调用							// 通知上层发送数据包;
 236:radiocontrol.c **** 		}
 237:radiocontrol.c **** 	} else if (state == IDLE) {								// 空闲
 490               	.LM75:
 491 01ae 8230      		cpi r24,lo8(2)
 492 01b0 71F5      		brne .L27
 238:radiocontrol.c **** 		bManchesterBad = * (volatile unsigned char *)(0x1A + 0x20) & 0x40;// CHP_OUT位
 494               	.LM76:
 495 01b2 8AB3      		in r24,58-0x20
 496 01b4 8074      		andi r24,lo8(64)
 497 01b6 8093 0000 		sts bManchesterBad,r24
 239:radiocontrol.c **** 		if ((!bManchesterBad) && (data == 0xaa || data == 0x55)) {
 499               	.LM77:
 500 01ba 8823      		tst r24
 501 01bc D9F4      		brne .L28
 502 01be 2A3A      		cpi r18,lo8(-86)
 503 01c0 11F0      		breq .L29
 504 01c2 2535      		cpi r18,lo8(85)
 505 01c4 B9F4      		brne .L28
 506               	.L29:
 240:radiocontrol.c ****             PreambleCount++;
 508               	.LM78:
 509 01c6 8091 0000 		lds r24,PreambleCount
 510 01ca 8F5F      		subi r24,lo8(-(1))
 511 01cc 8093 0000 		sts PreambleCount,r24
 241:radiocontrol.c ****             if (PreambleCount > VALID_PRECURSOR) {			// 接收到足够的导频字节
 513               	.LM79:
 514 01d0 8630      		cpi r24,lo8(6)
 515 01d2 90F0      		brlo .L32
 242:radiocontrol.c **** 				state = SYNC_START;
 517               	.LM80:
 518 01d4 83E0      		ldi r24,lo8(3)
 519 01d6 8093 0000 		sts state,r24
 243:radiocontrol.c **** 				if (carrSenTime > 0) {						// MAC层正在进行载波监听
 521               	.LM81:
 522 01da 8091 0000 		lds r24,carrSenTime
 523 01de 9091 0000 		lds r25,(carrSenTime)+1
 524 01e2 892B      		or r24,r25
 525 01e4 49F0      		breq .L32
 244:radiocontrol.c **** 					carrSenTime = 0;						// 停止监听
 527               	.LM82:
 528 01e6 1092 0000 		sts (carrSenTime)+1,__zero_reg__
 529 01ea 1092 0000 		sts carrSenTime,__zero_reg__
 245:radiocontrol.c **** 					MACChannelBusy();
 531               	.LM83:
 532 01ee 0E94 0000 		call MACChannelBusy
 533 01f2 02C0      		rjmp .L32
 534               	.L28:
 246:radiocontrol.c **** 				}
 247:radiocontrol.c ****             }
 248:radiocontrol.c **** 		} else {
 249:radiocontrol.c **** 			PreambleCount = 0;								// 导频计数置0
 536               	.LM84:
 537 01f4 1092 0000 		sts PreambleCount,__zero_reg__
 538               	.L32:
 250:radiocontrol.c **** 		}

⌨️ 快捷键说明

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