📄 cc1100.lis
字号:
0274 ;
0274 ; while(1)
0274 ; {
0274 .dbline 231
0274 ; status = spiReadStatus(0x35);
0274 05E3 ldi R16,53
0276 02DF rcall _spiReadStatus
0278 402F mov R20,R16
027A .dbline 232
027A ; if(status == 1)
027A 0130 cpi R16,1
027C 09F4 brne L191
027E .dbline 233
027E ; break;
027E 01C0 rjmp L190
0280 L191:
0280 .dbline 234
0280 L189:
0280 .dbline 229
0280 F9CF rjmp L188
0282 L190:
0282 .dbline 240
0282 ; }
0282 ; /*
0282 ;
0282 ; while(!GDO0_PIN);
0282 ; while(GDO0_PIN);
0282 ; */
0282 ; fCC1100 = IDLE;
0282 2224 clr R2
0284 20920000 sts _fCC1100,R2
0288 .dbline -2
0288 L187:
0288 2196 adiw R28,1
028A 00D0 rcall pop_gset2
028C .dbline 0 ; func end
028C 0895 ret
028E .dbsym r status 20 c
028E .dbsym r size 22 c
028E .dbsym r txBuffer 20 pc
028E .dbend
028E .dbfunc e spiReceivePacket _spiReceivePacket fc
028E ; rxStatus -> y+2
028E ; packetLength -> R20
028E ; status -> R20
028E ; length -> R22
028E ; rxBuffer -> R10,R11
.even
028E _spiReceivePacket::
028E 00D0 rcall push_gset3
0290 622F mov R22,R18
0292 5801 movw R10,R16
0294 2497 sbiw R28,4
0296 .dbline -1
0296 .dbline 244
0296 ; }
0296 ;
0296 ; BOOL spiReceivePacket(BYTE *rxBuffer,UINT8 length)
0296 ; {
0296 .dbline 248
0296 ;
0296 ; UINT8 packetLength;
0296 ; BYTE rxStatus[2];
0296 ; BYTE status = 0;
0296 4427 clr R20
0298 .dbline 250
0298 ;
0298 ; memset(rxBuffer,0,10);
0298 8AE0 ldi R24,10
029A 90E0 ldi R25,0
029C 9983 std y+1,R25
029E 8883 std y+0,R24
02A0 2227 clr R18
02A2 3327 clr R19
02A4 8501 movw R16,R10
02A6 00D0 rcall _memset
02A8 .dbline 252
02A8 ;
02A8 ; spiStrobe(CC1100_SRX);
02A8 04E3 ldi R16,52
02AA 1FDF rcall _spiStrobe
02AC .dbline 253
02AC ; fCC1100 = RECIEVE;
02AC 82E0 ldi R24,2
02AE 80930000 sts _fCC1100,R24
02B2 06C0 rjmp L195
02B4 L194:
02B4 .dbline 257
02B4 ;
02B4 ;
02B4 ; while(1)
02B4 ; {
02B4 .dbline 258
02B4 ; status = spiReadStatus(0x35);
02B4 05E3 ldi R16,53
02B6 E2DE rcall _spiReadStatus
02B8 402F mov R20,R16
02BA .dbline 260
02BA ;
02BA ; if(status == 1)
02BA 0130 cpi R16,1
02BC 09F4 brne L197
02BE .dbline 261
02BE ; {
02BE .dbline 262
02BE ; break;
02BE 01C0 rjmp L196
02C0 L197:
02C0 .dbline 264
02C0 L195:
02C0 .dbline 256
02C0 F9CF rjmp L194
02C2 L196:
02C2 .dbline 265
02C2 ; }
02C2 ; }
02C2 ; fCC1100 = IDLE;
02C2 2224 clr R2
02C4 20920000 sts _fCC1100,R2
02C8 .dbline 267
02C8 ;
02C8 ; if ((spiReadStatus(CC1100_RXBYTES) & BYTES_IN_RXFIFO))
02C8 0BE3 ldi R16,59
02CA D8DE rcall _spiReadStatus
02CC 802F mov R24,R16
02CE 8F77 andi R24,127
02D0 C1F0 breq L199
02D2 .dbline 268
02D2 ; {
02D2 .dbline 270
02D2 ; // Read the first byte, also is the length byte
02D2 ; packetLength = spiReadReg(CC1100_RXFIFO);
02D2 0FE3 ldi R16,63
02D4 BEDE rcall _spiReadReg
02D6 402F mov R20,R16
02D8 .dbline 273
02D8 ;
02D8 ; // Read data from RX FIFO and store in rxBuffer
02D8 ; if (packetLength <= length)
02D8 6017 cp R22,R16
02DA 70F0 brlo L201
02DC .dbline 274
02DC ; {
02DC .dbline 275
02DC ; spiReadBurstReg(CC1100_RXFIFO, rxBuffer, packetLength);
02DC 4883 std y+0,R20
02DE 9501 movw R18,R10
02E0 0FE3 ldi R16,63
02E2 E3DE rcall _spiReadBurstReg
02E4 .dbline 276
02E4 ; length = packetLength;
02E4 642F mov R22,R20
02E6 .dbline 277
02E6 ; spiReadBurstReg(CC1100_RXFIFO, rxStatus, 2);
02E6 82E0 ldi R24,2
02E8 8883 std y+0,R24
02EA 9E01 movw R18,R28
02EC 2E5F subi R18,254 ; offset = 2
02EE 3F4F sbci R19,255
02F0 0FE3 ldi R16,63
02F2 DBDE rcall _spiReadBurstReg
02F4 .dbline 279
02F4 ;
02F4 ; return TRUE;
02F4 01E0 ldi R16,1
02F6 06C0 rjmp L193
02F8 L201:
02F8 .dbline 282
02F8 ; }
02F8 ; else
02F8 ; {
02F8 .dbline 283
02F8 ; length = packetLength;
02F8 642F mov R22,R20
02FA .dbline 285
02FA ;
02FA ; spiStrobe(CC1100_SFRX);
02FA 0AE3 ldi R16,58
02FC F6DE rcall _spiStrobe
02FE .dbline 286
02FE ; return FALSE;
02FE 0027 clr R16
0300 01C0 rjmp L193
0302 L199:
0302 .dbline 289
0302 ; }
0302 ; }
0302 ; return FALSE;
0302 0027 clr R16
0304 .dbline -2
0304 L193:
0304 2496 adiw R28,4
0306 00D0 rcall pop_gset3
0308 .dbline 0 ; func end
0308 0895 ret
030A .dbsym l rxStatus 2 A[2:2]c
030A .dbsym r packetLength 20 c
030A .dbsym r status 20 c
030A .dbsym r length 22 c
030A .dbsym r rxBuffer 10 pc
030A .dbend
030A .dbfunc e recPacket _recPacket fV
030A ; rxStatus -> y+1
030A ; packetLength -> R20
030A ; length -> R22
030A ; rxBuffer -> R10,R11
.even
030A _recPacket::
030A 00D0 rcall push_gset3
030C 622F mov R22,R18
030E 5801 movw R10,R16
0310 2397 sbiw R28,3
0312 .dbline -1
0312 .dbline 293
0312 ; }
0312 ;
0312 ; void recPacket(BYTE *rxBuffer,UINT8 length)
0312 ; {
0312 .dbline 299
0312 ;
0312 ; UINT8 packetLength;
0312 ; BYTE rxStatus[2];
0312 ;
0312 ;
0312 ; if ((spiReadStatus(CC1100_RXBYTES) & BYTES_IN_RXFIFO))
0312 0BE3 ldi R16,59
0314 B3DE rcall _spiReadStatus
0316 802F mov R24,R16
0318 8F77 andi R24,127
031A 99F0 breq L204
031C .dbline 300
031C ; {
031C .dbline 301
031C ; packetLength = spiReadReg(CC1100_RXFIFO);
031C 0FE3 ldi R16,63
031E 99DE rcall _spiReadReg
0320 402F mov R20,R16
0322 .dbline 304
0322 ;
0322 ; // Read data from RX FIFO and store in rxBuffer
0322 ; if (packetLength <= length)
0322 6017 cp R22,R16
0324 68F0 brlo L206
0326 .dbline 305
0326 ; {
0326 .dbline 306
0326 ; spiReadBurstReg(CC1100_RXFIFO, rxBuffer, packetLength);
0326 4883 std y+0,R20
0328 9501 movw R18,R10
032A 0FE3 ldi R16,63
032C BEDE rcall _spiReadBurstReg
032E .dbline 307
032E ; length = packetLength;
032E 642F mov R22,R20
0330 .dbline 308
0330 ; spiReadBurstReg(CC1100_RXFIFO, rxStatus, 2);
0330 82E0 ldi R24,2
0332 8883 std y+0,R24
0334 9E01 movw R18,R28
0336 2F5F subi R18,255 ; offset = 1
0338 3F4F sbci R19,255
033A 0FE3 ldi R16,63
033C B6DE rcall _spiReadBurstReg
033E .dbline 312
033E ;
033E ;
033E ;
033E ; }
033E 01C0 rjmp L207
0340 L206:
0340 .dbline 314
0340 ; else
0340 ; {
0340 .dbline 315
0340 ; length = packetLength;
0340 642F mov R22,R20
0342 .dbline 319
0342 ;
0342 ;
0342 ;
0342 ; }
0342 L207:
0342 .dbline 320
0342 ; }
0342 L204:
0342 .dbline 321
0342 ; spiStrobe(CC1100_SFRX);
0342 0AE3 ldi R16,58
0344 D2DE rcall _spiStrobe
0346 .dbline 322
0346 ; fCC1100 = IDLE;
0346 2224 clr R2
0348 20920000 sts _fCC1100,R2
034C .dbline -2
034C L203:
034C 2396 adiw R28,3
034E 00D0 rcall pop_gset3
0350 .dbline 0 ; func end
0350 0895 ret
0352 .dbsym l rxStatus 1 A[2:2]c
0352 .dbsym r packetLength 20 c
0352 .dbsym r length 22 c
0352 .dbsym r rxBuffer 10 pc
0352 .dbend
0352 .dbfunc e initWorMode _initWorMode fV
.even
0352 _initWorMode::
0352 .dbline -1
0352 .dbline 326
0352 ; }
0352 ;
0352 ; void initWorMode(void)
0352 ; {
0352 .dbline 330
0352 ; // Enable automatic initial calibration of RCosc.
0352 ; // Set T_event1 ~ 1.4 ms, enough for XOSC stabilize and FS calibration before RX.
0352 ; // Enable RC oscillator before starting with WOR (or else it will not wake up).
0352 ; spiWriteReg(CC1100_WORCTRL, 0x78); // Not using AUTO_SYNC function.
0352 28E7 ldi R18,120
0354 00E2 ldi R16,32
0356 D5DE rcall _spiWriteReg
0358 .dbline 336
0358 ;
0358 ; // Set Event0 timeout = 1 s (RX polling interval)
0358 ; // WOR_RES = 0
0358 ; // T_event0 = 750 / f_xosc * EVENT0 * 2^(5*WOR_RES) = 1 s,f_xosc = 27 MHz
0358 ; // => EVENT0 = 0x8CA0
0358 ; spiWriteReg(CC1100_WOREVT1, 0x8C); // High byte Event0 timeout
0358 2CE8 ldi R18,140
035A 0EE1 ldi R16,30
035C D2DE rcall _spiWriteReg
035E .dbline 337
035E ; spiWriteReg(CC1100_WOREVT0, 0xA0); // Low byte Event0 timeout.
035E 20EA ldi R18,160
0360 0FE1 ldi R16,31
0362 CFDE rcall _spiWriteReg
0364 .dbline 342
0364 ;
0364 ; // Setting Rx_timeout =2.596 ms.
0364 ; // MCSM2.RX_TIME = 000b
0364 ; // => Rx_timeout = EVENT0*C(RX_TIME, WOR_RES)
0364 ; spiWriteReg(CC1100_MCSM2, 0x00);
0364 2227 clr R18
0366 06E1 ldi R16,22
0368 CCDE rcall _spiWriteReg
036A .dbline 345
036A ;
036A ; // Enable automatic FS calibration when going from IDLE to RX/TX/FSTXON (in between EVENT0 and EVENT1)
036A ; spiWriteReg(CC1100_MCSM0, 0x18);
036A 28E1 ldi R18,24
036C 08E1 ldi R16,24
036E C9DE rcall _spiWriteReg
0370 .dbline 347
0370 ;
0370 ; spiStrobe(CC1100_SWORRST);
0370 0CE3 ldi R16,60
0372 BBDE rcall _spiStrobe
0374 .dbline 348
0374 ; spiStrobe(CC1100_SWOR);
0374 08E3 ldi R16,56
0376 B9DE rcall _spiStrobe
0378 .dbline 350
0378 ;
0378 ; fCC1100 = SLEEP;
0378 83E0 ldi R24,3
037A 80930000 sts _fCC1100,R24
037E .dbline -2
037E L208:
037E .dbline 0 ; func end
037E 0895 ret
0380 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -