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

📄 cc1000avr.lis

📁 CC1000通信
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01E0           ; 
 01E0           ; char SetupCC1000RX(char RXCurrent,char RXPLL)
 01E0           ; {
 01E0                   .dbline 429
 01E0           ;   int i;
 01E0           ;   char lock_status;
 01E0           ; 
 01E0           ;   WriteToCC1000Register(CC1000_MAIN,0x11);    // Switch into RX, switch to freq. reg A
 01E0 21E1              ldi R18,17
 01E2 0027              clr R16
 01E4 5BDF              xcall _WriteToCC1000Register
 01E6                   .dbline 430
 01E6           ;   WriteToCC1000Register(CC1000_PLL,RXPLL);   // Use RX refdiv setting
 01E6 262F              mov R18,R22
 01E8 0CE0              ldi R16,12
 01EA 58DF              xcall _WriteToCC1000Register
 01EC                   .dbline 431
 01EC           ;   WriteToCC1000Register(CC1000_CURRENT,RXCurrent); // Program VCO current for RX
 01EC 242F              mov R18,R20
 01EE 09E0              ldi R16,9
 01F0 55DF              xcall _WriteToCC1000Register
 01F2                   .dbline 434
 01F2           ; 
 01F2           ;   // Wait 250us before monitoring LOCK
 01F2           ;   delaycc(12);
 01F2 0CE0              ldi R16,12
 01F4 10E0              ldi R17,0
 01F6 04DF              xcall _delaycc
 01F8                   .dbline 437
 01F8 4EEF              ldi R20,32766
 01FA 5FE7              ldi R21,127
 01FC 02C0              xjmp L60
 01FE           L57:
 01FE                   .dbline 437
 01FE           L58:
 01FE                   .dbline 437
 01FE 4150              subi R20,1
 0200 5040              sbci R21,0
 0202           L60:
 0202                   .dbline 437
 0202           ; 
 0202           ;   // Wait for lock
 0202           ;   for(i=LOCK_TIMEOUT; ((ReadFromCC1000Register(CC1000_LOCK)&0x01)==0)&&(i>0); i--);
 0202 0DE0              ldi R16,13
 0204 6EDF              xcall _ReadFromCC1000Register
 0206 00FD              sbrc R16,0
 0208 05C0              rjmp L61
 020A 2224              clr R2
 020C 3324              clr R3
 020E 2416              cp R2,R20
 0210 3506              cpc R3,R21
 0212 ACF3              brlt L57
 0214           L61:
 0214                   .dbline 440
 0214           ; 
 0214           ;   // If PLL in lock
 0214           ;   if ((ReadFromCC1000Register(CC1000_LOCK)&0x01)==0x01){
 0214 0DE0              ldi R16,13
 0216 65DF              xcall _ReadFromCC1000Register
 0218 802F              mov R24,R16
 021A 8170              andi R24,1
 021C 8130              cpi R24,1
 021E 11F4              brne L62
 0220                   .dbline 440
 0220                   .dbline 442
 0220           ;     // Indicate PLL in LOCK
 0220           ;     lock_status = LOCK_OK;
 0220 41E0              ldi R20,1
 0222                   .dbline 444
 0222 07C0              xjmp L63
 0224           L62:
 0224                   .dbline 444
 0224           ;   // Else (PLL out of LOCK)
 0224           ;   }else{
 0224                   .dbline 446
 0224           ;     // If recalibration ok
 0224           ;     if(CalibrateCC1000()){
 0224 A0DF              xcall _CalibrateCC1000
 0226 0023              tst R16
 0228 11F0              breq L64
 022A                   .dbline 446
 022A                   .dbline 448
 022A           ;       // Indicate PLL in LOCK
 022A           ;       lock_status = LOCK_RECAL_OK;
 022A 42E0              ldi R20,2
 022C                   .dbline 450
 022C 02C0              xjmp L65
 022E           L64:
 022E                   .dbline 450
 022E           ;     // Else (recalibration failed)
 022E           ;     }else{
 022E                   .dbline 452
 022E           ;       // Reset frequency syncthesizer (ref.: Errata Note 01)
 022E           ;       ResetFreqSynth();
 022E B1D0              xcall _ResetFreqSynth
 0230                   .dbline 454
 0230           ;       // Indicate PLL out of LOCK
 0230           ;       lock_status = LOCK_NOK;
 0230 4427              clr R20
 0232                   .dbline 455
 0232           ;     }
 0232           L65:
 0232                   .dbline 456
 0232           ;   }
 0232           L63:
 0232                   .dbline 459
 0232           ; 
 0232           ;   // Return LOCK status to application
 0232           ;   return (lock_status);
 0232 042F              mov R16,R20
 0234                   .dbline -2
 0234           L56:
 0234 0E940000          xcall pop_gset2
 0238                   .dbline 0 ; func end
 0238 0895              ret
 023A                   .dbsym r lock_status 20 c
 023A                   .dbsym r i 20 I
 023A                   .dbsym r RXPLL 22 c
 023A                   .dbsym r RXCurrent 20 c
 023A                   .dbend
 023A                   .dbfunc e SetupCC1000TX _SetupCC1000TX fc
 023A           ;    lock_status -> R20
 023A           ;              i -> R20,R21
 023A           ;          TXPLL -> R22
 023A           ;      TXCurrent -> R20
                        .even
 023A           _SetupCC1000TX::
 023A 0E940000          xcall push_gset2
 023E 622F              mov R22,R18
 0240 402F              mov R20,R16
 0242                   .dbline -1
 0242                   .dbline 468
 0242           ; }
 0242           ; 
 0242           ; /****************************************************************************/
 0242           ; /*  This routine puts the CC1000 into TX mode (from RX). When switching to  */
 0242           ; /*  TX from PD, use WakeupCC1000ToTX first                                  */
 0242           ; /****************************************************************************/
 0242           ; 
 0242           ; char SetupCC1000TX(char TXCurrent,char TXPLL)
 0242           ; {
 0242                   .dbline 472
 0242           ;   int i;
 0242           ;   char lock_status;
 0242           ; 
 0242           ;   WriteToCC1000Register(CC1000_PA_POW,0x00);   // Turn off PA to avoid frequency splatter
 0242 2227              clr R18
 0244 0BE0              ldi R16,11
 0246 2ADF              xcall _WriteToCC1000Register
 0248                   .dbline 474
 0248           ; 
 0248           ;   WriteToCC1000Register(CC1000_MAIN,0xE1);    // Switch into TX, switch to freq. reg B
 0248 21EE              ldi R18,225
 024A 0027              clr R16
 024C 27DF              xcall _WriteToCC1000Register
 024E                   .dbline 475
 024E           ;   WriteToCC1000Register(CC1000_PLL,TXPLL);   // Use TX refdiv setting
 024E 262F              mov R18,R22
 0250 0CE0              ldi R16,12
 0252 24DF              xcall _WriteToCC1000Register
 0254                   .dbline 476
 0254           ;   WriteToCC1000Register(CC1000_CURRENT,TXCurrent); // Program VCO current for TX
 0254 242F              mov R18,R20
 0256 09E0              ldi R16,9
 0258 21DF              xcall _WriteToCC1000Register
 025A                   .dbline 479
 025A           ; 
 025A           ;   // Wait 250us before monitoring LOCK
 025A           ;   delaycc(12);
 025A 0CE0              ldi R16,12
 025C 10E0              ldi R17,0
 025E D0DE              xcall _delaycc
 0260                   .dbline 482
 0260 4EEF              ldi R20,32766
 0262 5FE7              ldi R21,127
 0264 02C0              xjmp L70
 0266           L67:
 0266                   .dbline 482
 0266           L68:
 0266                   .dbline 482
 0266 4150              subi R20,1
 0268 5040              sbci R21,0
 026A           L70:
 026A                   .dbline 482
 026A           ; 
 026A           ;   // Wait for lock
 026A           ;   for(i=LOCK_TIMEOUT; ((ReadFromCC1000Register(CC1000_LOCK)&0x01)==0)&&(i>0); i--);
 026A 0DE0              ldi R16,13
 026C 3ADF              xcall _ReadFromCC1000Register
 026E 00FD              sbrc R16,0
 0270 05C0              rjmp L71
 0272 2224              clr R2
 0274 3324              clr R3
 0276 2416              cp R2,R20
 0278 3506              cpc R3,R21
 027A ACF3              brlt L67
 027C           L71:
 027C                   .dbline 485
 027C           ; 
 027C           ;   // If PLL in lock
 027C           ;   if ((ReadFromCC1000Register(CC1000_LOCK)&0x01)==0x01){
 027C 0DE0              ldi R16,13
 027E 31DF              xcall _ReadFromCC1000Register
 0280 802F              mov R24,R16
 0282 8170              andi R24,1
 0284 8130              cpi R24,1
 0286 11F4              brne L72
 0288                   .dbline 485
 0288                   .dbline 487
 0288           ;     // Indicate PLL in LOCK
 0288           ;     lock_status = LOCK_OK;
 0288 41E0              ldi R20,1
 028A                   .dbline 489
 028A 07C0              xjmp L73
 028C           L72:
 028C                   .dbline 489
 028C           ;   // Else (PLL out of LOCK)
 028C           ;   }else{
 028C                   .dbline 491
 028C           ;     // If recalibration ok
 028C           ;     if(CalibrateCC1000()){
 028C 6CDF              xcall _CalibrateCC1000
 028E 0023              tst R16
 0290 11F0              breq L74
 0292                   .dbline 491
 0292                   .dbline 493
 0292           ;       // Indicate PLL in LOCK
 0292           ;       lock_status = LOCK_RECAL_OK;
 0292 42E0              ldi R20,2
 0294                   .dbline 495
 0294 02C0              xjmp L75
 0296           L74:
 0296                   .dbline 495
 0296           ;     // Else (recalibration failed)
 0296           ;     }else{
 0296                   .dbline 497
 0296           ;       // Reset frequency syncthesizer (ref.: Errata Note 01)
 0296           ;       ResetFreqSynth();
 0296 7DD0              xcall _ResetFreqSynth
 0298                   .dbline 499
 0298           ;       // Indicate PLL out of LOCK
 0298           ;       lock_status = LOCK_NOK;
 0298 4427              clr R20
 029A                   .dbline 500
 029A           ;     }
 029A           L75:
 029A                   .dbline 501
 029A           ;   }
 029A           L73:
 029A                   .dbline 504
 029A           ; 
 029A           ;   // Increase output power
 029A           ;   WriteToCC1000Register(CC1000_PA_POW,PA_VALUE); // Restore PA setting
 029A 20EF              ldi R18,240
 029C 0BE0              ldi R16,11
 029E FEDE              xcall _WriteToCC1000Register
 02A0                   .dbline 507
 02A0           ;   
 02A0           ;   // Return LOCK status to application
 02A0           ;   return (lock_status);
 02A0 042F              mov R16,R20
 02A2                   .dbline -2
 02A2           L66:
 02A2 0E940000          xcall pop_gset2
 02A6                   .dbline 0 ; func end
 02A6 0895              ret
 02A8                   .dbsym r lock_status 20 c
 02A8                   .dbsym r i 20 I
 02A8                   .dbsym r TXPLL 22 c
 02A8                   .dbsym r TXCurrent 20 c
 02A8                   .dbend
 02A8                   .dbfunc e SetupCC1000PD _SetupCC1000PD fV
                        .even
 02A8           _SetupCC1000PD::
 02A8                   .dbline -1
 02A8                   .dbline 517
 02A8           ; }
 02A8           ; 
 02A8           ; /****************************************************************************/
 02A8           ; /*  This routine puts the CC1000 into power down mode. Use WakeUpCC1000ToRX */
 02A8           ; /*  followed by SetupCC1000RX or WakeupCC1000ToTX followed by SetupCC1000TX */
 02A8           ; /*  to wake up from power down                                              */
 02A8           ; /****************************************************************************/
 02A8           ; 
 02A8           ; void SetupCC1000PD(void)
 02A8           ; {
 02A8                   .dbline 518
 02A8           ;   WriteToCC1000Register(CC1000_MAIN,0x3F);    // Put CC1000 into power-down
 02A8 2FE3              ldi R18,63
 02AA 0027              clr R16
 02AC F7DE              xcall _WriteToCC1000Register
 02AE                   .dbline 519
 02AE           ;   WriteToCC1000Register(CC1000_PA_POW,0x00);  // Turn off PA to minimise current draw
 02AE 2227              clr R18
 02B0 0BE0              ldi R16,11
 02B2 F4DE              xcall _WriteToCC1000Register
 02B4                   .dbline -2
 02B4           L76:
 02B4                   .dbline 0 ; func end
 02B4 0895              ret
 02B6                   .dbend
 02B6                   .dbfunc e WakeUpCC1000ToRX _WakeUpCC1000ToRX fV
 02B6           ;              i -> <dead>
 02B6           ;          RXPLL -> R20

⌨️ 快捷键说明

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