📄 cc1000avr.lis
字号:
0084 .dbline 156
0084 9498 cbi 0x12,4
0086 .dbline 157
0086 L22:
0086 .dbline 146
0086 A394 inc R10
0088 L24:
0088 .dbline 146
0088 8A2D mov R24,R10
008A 8830 cpi R24,8
008C 98F3 brlo L21
008E .dbline 158
008E 949A sbi 0x12,4
0090 .dbline 159
0090 L12:
0090 .dbline 115
0090 4395 inc R20
0092 L14:
0092 .dbline 115
0092 4017 cp R20,R16
0094 78F2 brlo L11
0096 .dbline -2
0096 L10:
0096 0E940000 xcall pop_gset3
009A .dbline 0 ; func end
009A 0895 ret
009C .dbsym r WordCounter 20 c
009C .dbsym r BitCounter 10 c
009C .dbsym r Data 22 S
009C .dbsym r Configuration 18 pS
009C .dbsym r Count 16 c
009C .dbend
009C .dbfunc e WriteToCC1000Register _WriteToCC1000Register fV
009C ; val -> y+0
009C ; data -> R20
009C ; addr -> R22
.even
009C _WriteToCC1000Register::
009C 0E940000 xcall push_gset2
00A0 422F mov R20,R18
00A2 602F mov R22,R16
00A4 2297 sbiw R28,2
00A6 .dbline -1
00A6 .dbline 228
00A6 ; Data=Data<<1;
00A6 ; PORTD&=~(1<<PCLK); //PCLK=0
00A6 ; }
00A6 ; PORTD|=(1<<PCLK); //PCLK=1
00A6 ; } /* Finished with word */
00A6 ; }
00A6 ;
00A6 ; /****************************************************************************//////////////////////新的CONFIG
00A6 ; /* This routine sends new configuration data to the CC1000 */
00A6 ; /* Based on bit bashing (general I/O pin use) */
00A6 ; /****************************************************************************/
00A6 ; /*
00A6 ; void ConfigureCC1000(char Count, short Configuration[])
00A6 ; {
00A6 ; char BitCounter;
00A6 ; char WordCounter;
00A6 ; short Data;
00A6 ;
00A6 ;
00A6 ;
00A6 ; PORTA|=(1<<PALE); //PALE=1
00A6 ;
00A6 ; for (WordCounter=0;WordCounter<Count;WordCounter++)
00A6 ; {
00A6 ; Data=Configuration[WordCounter];
00A6 ; PORTA&=~(1<<PALE); // PALE=0
00A6 ;
00A6 ; /* Send address bits */
00A6 ; /* for (BitCounter=0;BitCounter<7;BitCounter++)
00A6 ; {
00A6 ; PORTB|=(1<<PCLK); // PCLK=1
00A6 ; if ((Data&0x8000)==0) {
00A6 ; PORTB&=~(1<<PDATA); // PDATA=0
00A6 ; }
00A6 ; else {
00A6 ; PORTB|=(1<<PDATA); // PDATA=1
00A6 ; }
00A6 ; Data=Data<<1;
00A6 ; PORTB&=~(1<<PCLK); //PCLK=0;
00A6 ; }
00A6 ;
00A6 ; /* Send read/write bit */
00A6 ; /* Ignore bit in data, always use 1 */
00A6 ; /*
00A6 ; PORTB|=(1<<PCLK); //PCLK=1
00A6 ; PORTB|=(1<<PDATA); //PDATA=1
00A6 ; PORTB&=~(1<<PCLK); //PCLK=0
00A6 ; Data=Data<<1;
00A6 ; PORTB|=(1<<PCLK); //PCLK=1
00A6 ; PORTA|=(1<<PALE); //PALE=1
00A6 ;
00A6 ; /* Send data bits */
00A6 ; /*
00A6 ; for (BitCounter=0;BitCounter<8;BitCounter++)
00A6 ; {
00A6 ; PORTB|=(1<<PCLK); //PCLK=1
00A6 ; if ((Data&0x8000)==0) {
00A6 ; PORTB&=~(1<<PDATA); // PDATA=0
00A6 ; }
00A6 ; else {
00A6 ; PORTB|=(1<<PDATA); // PDATA=1
00A6 ; }
00A6 ; Data=Data<<1;
00A6 ; PORTB&=~(1<<PCLK); //PCLK=0
00A6 ; }
00A6 ; PORTB|=(1<<PCLK); //PCLK=1
00A6 ; } /* Finished with word */
00A6 ; /* }
00A6 ; /****************************************************************************/
00A6 ; /* This routine writes to a single CC1000 register */
00A6 ; /****************************************************************************/
00A6 ;
00A6 ; void WriteToCC1000Register(char addr, char data)
00A6 ; {
00A6 .dbline 231
00A6 ; short val;
00A6 ;
00A6 ; val=(addr&0x7F)<<9 | (data&0xFF);
00A6 29E0 ldi R18,9
00A8 30E0 ldi R19,0
00AA 062F mov R16,R22
00AC 1127 clr R17
00AE 0F77 andi R16,127
00B0 1070 andi R17,0
00B2 0E940000 xcall lsl16
00B6 1801 movw R2,R16
00B8 842F mov R24,R20
00BA 9927 clr R25
00BC 9070 andi R25,0
00BE 282A or R2,R24
00C0 392A or R3,R25
00C2 3982 std y+1,R3
00C4 2882 std y+0,R2
00C6 .dbline 232
00C6 ; ConfigureCC1000(1,&val);
00C6 9E01 movw R18,R28
00C8 01E0 ldi R16,1
00CA AFDF xcall _ConfigureCC1000
00CC .dbline -2
00CC L27:
00CC 2296 adiw R28,2
00CE 0E940000 xcall pop_gset2
00D2 .dbline 0 ; func end
00D2 0895 ret
00D4 .dbsym l val 0 S
00D4 .dbsym r data 20 c
00D4 .dbsym r addr 22 c
00D4 .dbend
00D4 .dbfunc e WriteToCC1000RegisterWord _WriteToCC1000RegisterWord fV
00D4 ; addranddata -> y+0
.even
00D4 _WriteToCC1000RegisterWord::
00D4 1A93 st -y,r17
00D6 0A93 st -y,r16
00D8 .dbline -1
00D8 .dbline 241
00D8 ; }
00D8 ;
00D8 ; /****************************************************************************/
00D8 ; /* This routine writes to a single CC1000 register, with data and address */
00D8 ; /* given in the same variable */
00D8 ; /****************************************************************************/
00D8 ;
00D8 ; void WriteToCC1000RegisterWord(short addranddata)
00D8 ; {
00D8 .dbline 243
00D8 ;
00D8 ; ConfigureCC1000(1,&addranddata);
00D8 9E01 movw R18,R28
00DA 01E0 ldi R16,1
00DC A6DF xcall _ConfigureCC1000
00DE .dbline -2
00DE L28:
00DE 2296 adiw R28,2
00E0 .dbline 0 ; func end
00E0 0895 ret
00E2 .dbsym l addranddata 0 S
00E2 .dbend
00E2 .dbfunc e ReadFromCC1000Register _ReadFromCC1000Register fc
00E2 ; Debug -> R20
00E2 ; BitCounter -> R22
00E2 ; Data -> R10
00E2 ; addr -> R16
.even
00E2 _ReadFromCC1000Register::
00E2 0E940000 xcall push_gset3
00E6 .dbline -1
00E6 .dbline 251
00E6 ; }
00E6 ;
00E6 ; /****************************************************************************/////////////////////////原始的READ
00E6 ; /* This routine reads from a single CC1000 register */
00E6 ; /****************************************************************************/
00E6 ;
00E6 ; char ReadFromCC1000Register(char addr)
00E6 ; {
00E6 .dbline 257
00E6 ; char BitCounter;
00E6 ; char Data;
00E6 ; char Debug;
00E6 ;
00E6 ;
00E6 ; PORTD|=(1<<PALE); //PALE=1
00E6 959A sbi 0x12,5
00E8 .dbline 259
00E8 ;
00E8 ; Data=addr<<1;
00E8 A02E mov R10,R16
00EA AA0C lsl R10
00EC .dbline 260
00EC ; PORTD&=~(1<<PALE);
00EC 9598 cbi 0x12,5
00EE .dbline 263
00EE ;
00EE ; /*Send address bits */
00EE ; for (BitCounter=0;BitCounter<7;BitCounter++)
00EE 6627 clr R22
00F0 09C0 xjmp L33
00F2 L30:
00F2 .dbline 264
00F2 ; {
00F2 .dbline 265
00F2 ; PORTD|=(1<<PCLK); // PCLK=1
00F2 949A sbi 0x12,4
00F4 .dbline 266
00F4 ; if ((Data&0x80)==0) {
00F4 A7FC sbrc R10,7
00F6 02C0 rjmp L34
00F8 .dbline 266
00F8 .dbline 267
00F8 ; PORTD&=~(1<<PDATA); // PDATA=0
00F8 9398 cbi 0x12,3
00FA .dbline 268
00FA ; }
00FA 01C0 xjmp L35
00FC L34:
00FC .dbline 269
00FC ; else {
00FC .dbline 270
00FC ; PORTD|=(1<<PDATA); // PDATA=1
00FC 939A sbi 0x12,3
00FE .dbline 271
00FE ; }
00FE L35:
00FE .dbline 272
00FE AA0C lsl R10
0100 .dbline 273
0100 9498 cbi 0x12,4
0102 .dbline 274
0102 L31:
0102 .dbline 263
0102 6395 inc R22
0104 L33:
0104 .dbline 263
0104 6730 cpi R22,7
0106 A8F3 brlo L30
0108 .dbline 279
0108 ; Data=Data<<1;
0108 ; PORTD&=~(1<<PCLK); //PCLK=0;
0108 ; }
0108 ;
0108 ; /*Send read/write bit */
0108 ; /* Ignore bit in data, always use 0 */
0108 ;
0108 ; PORTD|=(1<<PCLK); //PCLK=1
0108 949A sbi 0x12,4
010A .dbline 280
010A ; PORTD&=~(1<<PDATA); //PDATA=0
010A 9398 cbi 0x12,3
010C .dbline 281
010C ; PORTD&=~(1<<PCLK); //PCLK=0
010C 9498 cbi 0x12,4
010E .dbline 284
010E ;
010E ;
010E ; PORTD|=(1<<PCLK); //PCLK=1
010E 949A sbi 0x12,4
0110 .dbline 285
0110 ; PORTD|=(1<<PALE); //PALE=1
0110 959A sbi 0x12,5
0112 .dbline 289
0112 ;
0112 ; /* Receive data bits */
0112 ;
0112 ; PORTD|=(1<<PDATA); //PDATA=1
0112 939A sbi 0x12,3
0114 .dbline 291
0114 ;
0114 ; DDRD&=~(1<<PDATA); /* Set up PDATA as an input */
0114 8B98 cbi 0x11,3
0116 .dbline 293
0116 ;
0116 ; for (BitCounter=0;BitCounter<8;BitCounter++)
0116 6627 clr R22
0118 0FC0 xjmp L39
011A L36:
011A .dbline 294
011A ; {
011A .dbline 295
011A ; PORTD&=~(1<<PCLK); //PCLK=0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -