📄 radiocontrol.lst
字号:
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 + -