📄 uart.lst
字号:
0387 9380008B STS xx1,R24
0389 9B5D SBIS 0x0B,5
038A CFFE RJMP 0x0389
038B 9020008C LDS R2,xx0
(0550) WriteToCC1020Register(CC1020_VGA2,0xbf); //disable agc LNA2gain maximun
(0551) WriteToCC1020Register(CC1020_VGA3,0x20); //vga_setting=0
038D B82C OUT 0x0C,R2
(0552)
038E 9B5D SBIS 0x0B,5
038F CFFE RJMP 0x038E
0390 9508 RET
_ReadFromCC1020Register:
0391 D353 RCALL push_gset4
0392 2EA0 MOV R10,R16
(0553) //test rssi
0393 E380 LDI R24,0x30
0394 BB81 OUT 0x11,R24
0395 E083 LDI R24,3
0396 BB87 OUT 0x17,R24
0397 E00A LDI R16,0xA
(0554) /* for(int i=0x0300;i>0;i--);
0398 E010 LDI R17,0
0399 E020 LDI R18,0
(0555) RSSI1=ReadRSSIlevelCC1020()*4;
039A E030 LDI R19,0
039B DE04 RCALL _delay
039C 9895 CBI 0x12,5
(0556) for( vga=0;vga<31;vga++)
039D 2D8A MOV R24,R10
039E 778F ANDI R24,0x7F
039F 2EC8 MOV R12,R24
(0557) {
(0558) //WriteToCC1020Register(CC1020_VGA3,(0x20+vga)); //vga_setting=vga
(0559) RSSI2=ReadRSSIlevelCC1020();
(0560) if(RSSI2>RSSI1) break;
(0561) } */
_phafrerepol:
03A0 0CCC LSL R12
(0562)
(0563) //vga_setting=vga
(0564) WriteToCC1020Register(CC1020_VGA3,(0x20+15));
(0565) //enable agc
(0566) WriteToCC1020Register(CC1020_VGA2,0x55);
(0567) //set cs_level
_puvalrepol:
03A1 E088 LDI R24,0x8
(0568) WriteToCC1020Register(CC1020_VGA4,0x20+25);
(0569) // _NOP();
(0570) }
(0571)
_pulsefunrepol:
03A2 2EA8 MOV R10,R24
(0572) /****************************************************************************/
(0573) /* This routine wakes the CC1020 up from PD mode to RX mode */
(0574) /****************************************************************************/
(0575)
(0576) void WakeUpCC1020ToRX(unsigned char RXANALOG)
(0577) {
_staterepol:
03A3 C015 RJMP 0x03B9
(0578) volatile int i;
(0579)
(0580) // Turn on xtal oscillator core
(0581) WriteToCC1020Register(CC1020_MAIN,0x1B);
(0582)
(0583) // Setup bias current adjustment
_checkcommrepol:
03A4 98C1 CBI 0x18,1
(0584) WriteToCC1020Register(CC1020_ANALOG,RXANALOG);
(0585)
(0586) // Insert wait routine here, must wait for xtal oscillator to stabilise,
(0587) // typically takes 2-5ms.
(0588) for (i=0x4260; i > 0; i--);
(0589)
(0590) // Turn on bias generator
(0591) WriteToCC1020Register(CC1020_MAIN,0x19);
(0592)
03A5 2D8C MOV R24,R12
03A6 7880 ANDI R24,0x80
03A7 3880 CPI R24,0x80
(0593) // Wait for 150 usec
03A8 F411 BNE 0x03AB
03A9 9AC0 SBI 0x18,0
(0594) for (i=0x0210; i > 0; i--);
03AA C001 RJMP 0x03AC
03AB 98C0 CBI 0x18,0
(0595)
03AC E00A LDI R16,0xA
03AD E010 LDI R17,0
03AE E020 LDI R18,0
03AF E030 LDI R19,0
03B0 DDEF RCALL _delay
03B1 9AC1 SBI 0x18,1
(0596) // Turn on frequency synthesiser
03B2 E00A LDI R16,0xA
03B3 E010 LDI R17,0
03B4 E020 LDI R18,0
03B5 E030 LDI R19,0
(0597) WriteToCC1020Register(CC1020_MAIN,0x11);
03B6 DDE9 RCALL _delay
03B7 0CCC LSL R12
03B8 94AA DEC R10
03B9 2422 CLR R2
(0598)
03BA 142A CP R2,R10
03BB F340 BCS 0x03A4
03BC 24CC CLR R12
03BD 9AC0 SBI 0x18,0
(0599) }
(0600)
03BE E082 LDI R24,2
(0601) /****************************************************************************/
03BF BB87 OUT 0x17,R24
(0602) /* This routine wakes the CC1020 up from PD mode to TX mode */
03C0 E088 LDI R24,0x8
(0603) /****************************************************************************/
(0604)
(0605) void WakeUpCC1020ToTX(unsigned char TXANALOG)
(0606) {
(0607) volatile int i;
03C1 2EA8 MOV R10,R24
(0608)
03C2 C014 RJMP 0x03D7
(0609) // Turn on xtal oscillator core
(0610) WriteToCC1020Register(CC1020_MAIN,0xDB);
03C3 0CCC LSL R12
(0611)
(0612) // Setup bias current adjustment
03C4 98C1 CBI 0x18,1
(0613) WriteToCC1020Register(CC1020_ANALOG,TXANALOG);
(0614)
03C5 E00A LDI R16,0xA
03C6 E010 LDI R17,0
03C7 E020 LDI R18,0
03C8 E030 LDI R19,0
(0615) // Insert wait routine here, must wait for xtal oscillator to stabilise,
(0616) // typically takes 2-5ms.
(0617) for (i=0x42600; i > 0; i--);
03C9 DDD6 RCALL _delay
03CA B388 IN R24,0x18
03CB 7081 ANDI R24,1
03CC BB88 OUT 0x18,R24
03CD 3081 CPI R24,1
(0618)
(0619) // Turn on bias generator
(0620) WriteToCC1020Register(CC1020_MAIN,0xD9);
03CE F409 BNE 0x03D0
(0621)
03CF 94C3 INC R12
03D0 9AC1 SBI 0x18,1
03D1 E00A LDI R16,0xA
03D2 E010 LDI R17,0
(0622) // Wait for 150 usec
03D3 E020 LDI R18,0
(0623) for (i=0x02100; i > 0; i--);
03D4 E030 LDI R19,0
(0624)
03D5 DDCA RCALL _delay
03D6 94AA DEC R10
03D7 2422 CLR R2
03D8 142A CP R2,R10
(0625) // Turn on frequency synthesiser
03D9 F348 BCS 0x03C3
(0626) WriteToCC1020Register(CC1020_MAIN,0xD1);
03DA 98C1 CBI 0x18,1
(0627)
03DB 9A95 SBI 0x12,5
03DC E380 LDI R24,0x30
03DD BB81 OUT 0x11,R24
03DE E083 LDI R24,3
(0628) }
03DF BB87 OUT 0x17,R24
(0629)
03E0 2D0C MOV R16,R12
(0630) /****************************************************************************/
03E1 D2FD RCALL pop_gset4
03E2 9508 RET
_WriteToCC1020Register:
03E3 D2F2 RCALL push_arg4
03E4 D2FE RCALL push_gset5
(0631) /* This routine calibrates the CC1020 */
03E5 2EE2 MOV R14,R18
(0632) /* Returns 0 if calibration fails, non-zero otherwise. Checks the LOCK */
03E6 24CC CLR R12
(0633) /* to check for success. */
03E7 24AA CLR R10
03E8 E380 LDI R24,0x30
03E9 BB81 OUT 0x11,R24
03EA E083 LDI R24,3
(0634) /****************************************************************************/
03EB BB87 OUT 0x17,R24
(0635)
03EC E00A LDI R16,0xA
(0636) char CalibrateCC1020(unsigned char PA_POWER)
03ED E010 LDI R17,0
03EE E020 LDI R18,0
03EF E030 LDI R19,0
03F0 DDAF RCALL _delay
(0637) {
03F1 9895 CBI 0x12,5
(0638) volatile int TimeOutCounter;
03F2 858A LDD R24,Y+10
(0639) volatile int nCalAttempt;
03F3 778F ANDI R24,0x7F
03F4 2EC8 MOV R12,R24
03F5 0CCC LSL R12
03F6 94C3 INC R12
(0640)
03F7 E088 LDI R24,0x8
(0641) // Turn off PA to avoid spurs during calibration in TX mode
03F8 2EA8 MOV R10,R24
(0642) WriteToCC1020Register(CC1020_PA_POWER,0x00);
03F9 C015 RJMP 0x040F
03FA 98C1 CBI 0x18,1
03FB 2D8C MOV R24,R12
03FC 7880 ANDI R24,0x80
(0643)
03FD 3880 CPI R24,0x80
(0644) // Calibrate, and re-calibrate if necessary:
(0645) for (nCalAttempt = CAL_ATTEMPT_MAX; nCalAttempt>0; nCalAttempt--)
(0646) {
(0647)
03FE F411 BNE 0x0401
03FF 9AC0 SBI 0x18,0
0400 C001 RJMP 0x0402
(0648) // Start calibration
0401 98C0 CBI 0x18,0
0402 E00A LDI R16,0xA
(0649) WriteToCC1020Register(CC1020_CALIBRATE,0xB4);
0403 E010 LDI R17,0
0404 E020 LDI R18,0
(0650)
0405 E030 LDI R19,0
0406 DD99 RCALL _delay
(0651) // Monitor actual calibration start (ref. Errata Note 04 - CC1020)
0407 9AC1 SBI 0x18,1
0408 E00A LDI R16,0xA
(0652) for(TimeOutCounter=CAL_TIMEOUT; TimeOutCounter>0; TimeOutCounter--)
0409 E010 LDI R17,0
040A E020 LDI R18,0
(0653) {
040B E030 LDI R19,0
040C DD93 RCALL _delay
(0654) if((ReadFromCC1020Register(CC1020_STATUS)&0x80)==0x00) break;
040D 0CCC LSL R12
040E 94AA DEC R10
(0655) }
040F 2422 CLR R2
0410 142A CP R2,R10
(0656)
0411 F340 BCS 0x03FA
(0657) // Monitor calibration complete
(0658) // for(TimeOutCounter=CAL_TIMEOUT; ((ReadFromCC1020Register(CC1020_STATUS)&0x80)==0x00)&&(TimeOutCounter>0); TimeOutCounter--);
0412 2CCE MOV R12,R14
(0659) for(TimeOutCounter=CAL_TIMEOUT; TimeOutCounter>0; TimeOutCounter--)
0413 E088 LDI R24,0x8
0414 2EA8 MOV R10,R24
0415 C015 RJMP 0x042B
0416 98C1 CBI 0x18,1
(0660) {
(0661) if((ReadFromCC1020Register(CC1020_STATUS)&0x80)==0x80) break;
0417 2D8C MOV R24,R12
0418 7880 ANDI R24,0x80
(0662) }
0419 3880 CPI R24,0x80
(0663) // Monitor lock
041A F411 BNE 0x041D
041B 9AC0 SBI 0x18,0
041C C001 RJMP 0x041E
(0664) for(TimeOutCounter=LOCK_TIMEOUT; TimeOutCounter>0; TimeOutCounter--)
041D 98C0 CBI 0x18,0
(0665) {
(0666) if((ReadFromCC1020Register(CC1020_STATUS)&0x10)==0x10) break;
(0667) }
041E E00A LDI R16,0xA
(0668)
(0669) if(TimeOutCounter>0) break;
(0670) // Abort further recalibration attempts if successful LOCK
041F E010 LDI R17,0
0420 E020 LDI R18,0
0421 E030 LDI R19,0
0422 DD7D RCALL _delay
0423 9AC1 SBI 0x18,1
0424 E00A LDI R16,0xA
0425 E010 LDI R17,0
0426 E020 LDI R18,0
0427 E030 LDI R19,0
0428 DD77 RCALL _delay
0429 0CCC LSL R12
042A 94AA DEC R10
042B 2422 CLR R2
042C 142A CP R2,R10
042D F340 BCS 0x0416
042E 98C1 CBI 0x18,1
042F 9A95 SBI 0x12,5
0430 E380 LDI R24,0x30
0431 BB81 OUT 0x11,R24
0432 E083 LDI R24,3
0433 BB87 OUT 0x17,R24
0434 D2AC RCALL pop_gset5
(0671) // if((ReadFromCC1020Register(CC1020_STATUS)&0x10) == 0x10) {
(0672) // break;
0435 9624 ADIW R28,4
0436 9508 RET
_SetupAGC:
0437 EB2F LDI R18,0xBF
0438 E102 LDI R16,0x12
0439 DFA9 RCALL _WriteToCC1020Register
043A E220 LDI R18,0x20
043B E103 LDI R16,0x13
043C DFA6 RCALL _WriteToCC1020Register
043D E22F LDI R18,0x2F
043E E103 LDI R16,0x13
043F DFA3 RCALL _WriteToCC1020Register
0440 E525 LDI R18,0x55
0441 E102 LDI R16,0x12
0442 DFA0 RCALL _WriteToCC1020Register
0443 E329 LDI R18,0x39
0444 E104 LDI R16,0x14
0445 DF9D RCALL _WriteToCC1020Register
0446 9508 RET
(0673) // }
(0674) }
_WakeUpCC1020ToRX:
0447 D2A3 RCALL push_gset1
0448 2F40 MOV R20,R16
0449 9722 SBIW R28,2
044A E12B LDI R18,0x1B
044B 2700 CLR R16
044C DF96 RCALL _WriteToCC1020Register
044D 2F24 MOV R18,R20
044E E107 LDI R16,0x17
(0675)
044F DF93 RCALL _WriteToCC1020Register
0450 E680 LDI R24,0x60
0451 E492 LDI R25,0x42
0452 8399 STD Y+1,R25
0453 8388 STD Y+0,R24
0454 8188 LDD R24,Y+0
0455 8199 LDD R25,Y+1
0456 9701 SBIW R24,1
0457 8399 STD Y+1,R25
0458 8388 STD Y+0,R24
0459 2422 CLR R2
045A 2433 CLR R3
045B 1628 CP R2,R24
045C 0639 CPC R3,R25
045D F3B4 BLT 0x0454
045E E129 LDI R18,0x19
045F 2700 CLR R16
0460 DF82 RCALL _WriteToCC1020Register
0461 E180 LDI R24,0x10
0462 E092 LDI R25,2
0463 8399 STD Y+1,R25
0464 8388 STD Y+0,R24
0465 8188 LDD R24,Y+0
0466 8199 LDD R25,Y+1
(0676) // Restore PA setting
0467 9701 SBIW R24,1
0468 8399 STD Y+1,R25
0469 8388 STD Y+0,R24
046A 2422 CLR R2
046B 2433 CLR R3
046C 1628 CP R2,R24
046D 0639 CPC R3,R25
046E F3B4 BLT 0x0465
046F E121 LDI R18,0x11
0470 2700 CLR R16
0471 DF71 RCALL _WriteToCC1020Register
0472 9622 ADIW R28,2
0473 D27A RCALL pop_gset1
0474 9508 RET
_WakeUpCC1020ToTX:
0475 D271 RCALL push_gset3
0476 2EA0 MOV R10,R16
0477 9722 SBIW R28,2
0478 ED2B LDI R18,0xDB
0479 2700 CLR R16
047A DF68 RCALL _WriteToCC1020Register
047B 2D2A MOV R18,R10
047C E107 LDI R16,0x17
047D DF65 RCALL _WriteToCC1020Register
047E E040 LDI R20,0
047F E256 LDI R21,0x26
0480 E064 LDI R22,4
0481 E070 LDI R23,0
(0677) WriteToCC1020Register(CC1020_PA_POWER, PA_POWER);
0482 011A MOVW R2,R20
0483 8239 STD Y+1,R3
0484 8228 STD Y+0,R2
(0678) // if((ReadFromCC1020Register(CC1020_STATUS)&0x10)!=0x10) SMG=dpybuffer[3];
0485 C005 RJMP 0x048B
(0679) // Return state of LOCK_CONTINUOUS bit
0486 8188 LDD R24,Y+0
0487 8199 LDD R25,Y+1
0488 9701 SBIW R24,1
0489 8399 STD Y+1,R25
048A 8388 STD Y+0,R24
048B 2422 CLR R2
048C 2433 CLR R3
048D 8048 LDD R4,Y+0
048E 8059 LDD R5,Y+1
048F 1424 CP R2,R4
0490 0435 CPC R3,R5
0491 F3A4 BLT 0x0486
0492 ED29 LDI R18,0xD9
0493 2700 CLR R16
0494 DF4E RCALL _WriteToCC1020Register
0495 E080 LDI R24,0
0496 E291 LDI R25,0x21
0497 8399 STD Y+1,R25
(0680) return ((ReadFromCC1020Register(CC1020_STATUS)&0x10)==0x10);
(0681) }
0498 8388 STD Y+0,R24
0499 8188 LDD R24,Y+0
049A 8199 LDD R25,Y+1
049B 9701 SBIW R24,1
049C 8399 STD Y+1,R25
049D 8388 STD Y+0,R24
049E 2422 CLR R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -