📄 cc1000avr.lis
字号:
011A 9498 cbi 0x12,4
011C .dbline 296
011C ; Data=Data<<1;
011C AA0C lsl R10
011E .dbline 297
011E ; Debug=(1<<PDATA);
011E 48E0 ldi R20,8
0120 .dbline 298
0120 ; if ((PIND&Debug)==0) {
0120 20B2 in R2,0x10
0122 2422 and R2,R20
0124 21F4 brne L40
0126 .dbline 298
0126 .dbline 299
0126 ; Data&=0xFE;
0126 8A2D mov R24,R10
0128 8E7F andi R24,254
012A A82E mov R10,R24
012C .dbline 300
012C 03C0 xjmp L41
012E L40:
012E .dbline 300
012E ; } else {
012E .dbline 301
012E ; Data|=0x01;
012E 8A2D mov R24,R10
0130 8160 ori R24,1
0132 A82E mov R10,R24
0134 .dbline 302
0134 ; }
0134 L41:
0134 .dbline 303
0134 949A sbi 0x12,4
0136 .dbline 304
0136 L37:
0136 .dbline 293
0136 6395 inc R22
0138 L39:
0138 .dbline 293
0138 6830 cpi R22,8
013A 78F3 brlo L36
013C .dbline 307
013C ; PORTD|=(1<<PCLK); //PCLK=1
013C ; }
013C ;
013C ;
013C ; DDRD|=(1<<PDATA); /* Set up PDATA as an output again */
013C 8B9A sbi 0x11,3
013E .dbline 309
013E ;
013E ; return Data;
013E 0A2D mov R16,R10
0140 .dbline -2
0140 L29:
0140 0E940000 xcall pop_gset3
0144 .dbline 0 ; func end
0144 0895 ret
0146 .dbsym r Debug 20 c
0146 .dbsym r BitCounter 22 c
0146 .dbsym r Data 10 c
0146 .dbsym r addr 16 c
0146 .dbend
0146 .dbfunc e ResetCC1000 _ResetCC1000 fV
0146 ; MainValue -> R20
.even
0146 _ResetCC1000::
0146 0E940000 xcall push_gset1
014A .dbline -1
014A .dbline 381
014A ; }
014A ; /****************************************************************************/////////////////////////新的READ
014A ; /* This routine reads from a single CC1000 register */
014A ; /****************************************************************************/
014A ; /*
014A ; char ReadFromCC1000Register(char addr)
014A ; {
014A ; char BitCounter;
014A ; char Data;
014A ; char Debug;
014A ;
014A ;
014A ; PORTA|=(1<<PALE); //PALE=1
014A ;
014A ; Data=addr<<1;
014A ; PORTA&=~(1<<PALE);
014A ;
014A ; /* Send address bits */
014A ; /* for (BitCounter=0;BitCounter<7;BitCounter++)
014A ; {
014A ; PORTB|=(1<<PCLK); // PCLK=1
014A ; if ((Data&0x80)==0) {
014A ; PORTB&=~(1<<PDATA); // PDATA=0
014A ; }
014A ; else {
014A ; PORTB|=(1<<PDATA); // PDATA=1
014A ; }
014A ; Data=Data<<1;
014A ; PORTB&=~(1<<PCLK); //PCLK=0;
014A ; }
014A ;
014A ; /* Send read/write bit */
014A ; /* Ignore bit in data, always use 0 */
014A ; /*
014A ; PORTB|=(1<<PCLK); //PCLK=1
014A ; PORTB&=~(1<<PDATA); //PDATA=0
014A ; PORTB&=~(1<<PCLK); //PCLK=0
014A ;
014A ;
014A ; PORTB|=(1<<PCLK); //PCLK=1
014A ; PORTA|=(1<<PALE); //PALE=1
014A ;
014A ; /* Receive data bits */
014A ; /*
014A ; PORTB|=(1<<PDATA); //PDATA=1
014A ;
014A ; DDRD&=~(1<<PDATA); /* Set up PDATA as an input */
014A ; /*
014A ; for (BitCounter=0;BitCounter<8;BitCounter++)
014A ; {
014A ; PORTB&=~(1<<PCLK); //PCLK=0
014A ; Data=Data<<1;
014A ; Debug=(1<<PDATA);
014A ; if ((PIND&Debug)==0) {
014A ; Data&=0xFE;
014A ; } else {
014A ; Data|=0x01;
014A ; }
014A ; PORTB|=(1<<PCLK); //PCLK=1
014A ; }
014A ;
014A ;
014A ; DDRD|=(1<<PDATA); /* Set up PDATA as an output again */
014A ;
014A ; /* return Data;
014A ; }
014A ; /****************************************************************************/
014A ; /* This routine resets the CC1000, clearing all registers. */
014A ; /****************************************************************************/
014A ;
014A ; void ResetCC1000(void)
014A ; {
014A .dbline 384
014A ; char MainValue;
014A ;
014A ; MainValue=ReadFromCC1000Register(CC1000_MAIN);
014A 0027 clr R16
014C CADF xcall _ReadFromCC1000Register
014E 402F mov R20,R16
0150 .dbline 385
0150 ; WriteToCC1000Register(CC1000_MAIN,MainValue & 0xFE); // Reset CC1000
0150 242F mov R18,R20
0152 2E7F andi R18,254
0154 0027 clr R16
0156 A2DF xcall _WriteToCC1000Register
0158 .dbline 386
0158 ; WriteToCC1000Register(CC1000_MAIN,MainValue | 0x01); // Bring CC1000 out of reset
0158 242F mov R18,R20
015A 2160 ori R18,1
015C 0027 clr R16
015E 9EDF xcall _WriteToCC1000Register
0160 .dbline -2
0160 L42:
0160 0E940000 xcall pop_gset1
0164 .dbline 0 ; func end
0164 0895 ret
0166 .dbsym r MainValue 20 c
0166 .dbend
0166 .dbfunc e CalibrateCC1000 _CalibrateCC1000 fc
0166 ; TimeOutCounter -> R20,R21
.even
0166 _CalibrateCC1000::
0166 0E940000 xcall push_gset1
016A .dbline -1
016A .dbline 397
016A ; }
016A ;
016A ;
016A ; /****************************************************************************/
016A ; /* This routine calibrates the CC1000 */
016A ; /* Returns 0 if calibration fails, non-zero otherwise. Checks the LOCK */
016A ; /* to check for success. */
016A ; /****************************************************************************/
016A ;
016A ; char CalibrateCC1000(void)
016A ; {
016A .dbline 400
016A ; int TimeOutCounter;
016A ;
016A ; WriteToCC1000Register(CC1000_PA_POW,0x00); // Turn off PA to avoid spurs
016A 2227 clr R18
016C 0BE0 ldi R16,11
016E 96DF xcall _WriteToCC1000Register
0170 .dbline 402
0170 ; // during calibration in TX mode
0170 ; WriteToCC1000Register(CC1000_CAL,0xA6); // Start calibration
0170 26EA ldi R18,166
0172 0EE0 ldi R16,14
0174 93DF xcall _WriteToCC1000Register
0176 .dbline 405
0176 4EEF ldi R20,32766
0178 5FE7 ldi R21,127
017A 02C0 xjmp L47
017C L44:
017C .dbline 405
017C L45:
017C .dbline 405
017C 4150 subi R20,1
017E 5040 sbci R21,0
0180 L47:
0180 .dbline 405
0180 ;
0180 ; // Wait for calibration complete
0180 ; for(TimeOutCounter=CAL_TIMEOUT; ((ReadFromCC1000Register(CC1000_CAL)&0x08)==0)&&(TimeOutCounter>0); TimeOutCounter--);
0180 0EE0 ldi R16,14
0182 AFDF xcall _ReadFromCC1000Register
0184 03FD sbrc R16,3
0186 05C0 rjmp L48
0188 2224 clr R2
018A 3324 clr R3
018C 2416 cp R2,R20
018E 3506 cpc R3,R21
0190 ACF3 brlt L44
0192 L48:
0192 .dbline 407
0192 ;
0192 ; WriteToCC1000Register(CC1000_CAL,0x26); /* End calibration */
0192 26E2 ldi R18,38
0194 0EE0 ldi R16,14
0196 82DF xcall _WriteToCC1000Register
0198 .dbline 408
0198 ; WriteToCC1000Register(CC1000_PA_POW,PA_VALUE); /* Restore PA setting */
0198 20EF ldi R18,240
019A 0BE0 ldi R16,11
019C 7FDF xcall _WriteToCC1000Register
019E .dbline 410
019E 4EEF ldi R20,32766
01A0 5FE7 ldi R21,127
01A2 02C0 xjmp L52
01A4 L49:
01A4 .dbline 410
01A4 L50:
01A4 .dbline 410
01A4 4150 subi R20,1
01A6 5040 sbci R21,0
01A8 L52:
01A8 .dbline 410
01A8 ; // Wait for lock
01A8 ; for(TimeOutCounter=LOCK_TIMEOUT; ((ReadFromCC1000Register(CC1000_LOCK)&0x01)==0)&&(TimeOutCounter>0); TimeOutCounter--);
01A8 0DE0 ldi R16,13
01AA 9BDF xcall _ReadFromCC1000Register
01AC 00FD sbrc R16,0
01AE 05C0 rjmp L53
01B0 2224 clr R2
01B2 3324 clr R3
01B4 2416 cp R2,R20
01B6 3506 cpc R3,R21
01B8 ACF3 brlt L49
01BA L53:
01BA .dbline 414
01BA ;
01BA ;
01BA ;
01BA ; return ((ReadFromCC1000Register(CC1000_LOCK)&0x01)==1);
01BA 0DE0 ldi R16,13
01BC 92DF xcall _ReadFromCC1000Register
01BE 802F mov R24,R16
01C0 8170 andi R24,1
01C2 8130 cpi R24,1
01C4 19F4 brne L54
01C6 41E0 ldi R20,1
01C8 50E0 ldi R21,0
01CA 02C0 xjmp L55
01CC L54:
01CC 4427 clr R20
01CE 5527 clr R21
01D0 L55:
01D0 042F mov R16,R20
01D2 .dbline -2
01D2 L43:
01D2 0E940000 xcall pop_gset1
01D6 .dbline 0 ; func end
01D6 0895 ret
01D8 .dbsym r TimeOutCounter 20 I
01D8 .dbend
01D8 .dbfunc e SetupCC1000RX _SetupCC1000RX fc
01D8 ; lock_status -> R20
01D8 ; i -> R20,R21
01D8 ; RXPLL -> R22
01D8 ; RXCurrent -> R20
.even
01D8 _SetupCC1000RX::
01D8 0E940000 xcall push_gset2
01DC 622F mov R22,R18
01DE 402F mov R20,R16
01E0 .dbline -1
01E0 .dbline 425
01E0 ; //return (1);
01E0 ; }
01E0 ;
01E0 ; /****************************************************************************/
01E0 ; /* This routine puts the CC1000 into RX mode (from TX). When switching to */
01E0 ; /* RX from PD, use WakeupC1000ToRX first */
01E0 ; /****************************************************************************/
01E0 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -