📄 cc1100.lis
字号:
044C 0895 ret
.area vector(rom, abs)
.org 8
0008 0C942702 jmp _cc1100_rx_isr
.area text(rom, con, rel)
; packetLength -> R20
.even
044E _cc1100_rx_isr::
044E 0E940000 xcall push_lset
0452 0E940000 xcall push_gset1
0456 2197 sbiw R28,1
0458 ; }
0458 ; }
0458 ; /**************************************************/
0458 ;
0458 ; //接收到数据中断
0458 ;
0458 ; #pragma interrupt_handler cc1100_rx_isr:3
0458 ; void cc1100_rx_isr()
0458 ; {
0458 ; unsigned char packetLength;
0458 ; //led2Toggle();
0458 ; packetLength = halSpiReadReg(CCxxx0_RXFIFO);
0458 0FEF ldi R16,255
045A 36DF xcall _halSpiReadReg
045C 402F mov R20,R16
045E ; rxBuffer[0]=packetLength;
045E 40930100 sts _rxBuffer,R20
0462 ; if(rxBuffer[0] <= 32)
0462 80E2 ldi R24,32
0464 8017 cp R24,R16
0466 50F0 brlo L102
0468 ; {
0468 ; halSpiReadBurstReg(CCxxx0_RXFIFO, &rxBuffer[1], packetLength);
0468 4883 std y+0,R20
046A 20E0 ldi R18,<_rxBuffer+1
046C 30E0 ldi R19,>_rxBuffer+1
046E 0FEF ldi R16,255
0470 48DF xcall _halSpiReadBurstReg
0472 ; post(CC1100_receive);
0472 00E0 ldi R16,<PL_CC1100_receive
0474 10E0 ldi R17,>PL_CC1100_receive
0476 0E940000 xcall _post
047A ; }
047A 02C0 xjmp L103
047C L102:
047C ; else
047C ; {
047C ; halSpiStrobe(CCxxx0_SFRX);
047C 0AE3 ldi R16,58
047E 9DDE xcall _halSpiStrobe
0480 ; }
0480 L103:
0480 ; halSpiStrobe(CCxxx0_SFRX);
0480 0AE3 ldi R16,58
0482 9BDE xcall _halSpiStrobe
0484 ; halSpiStrobe(CCxxx0_SRX);
0484 04E3 ldi R16,52
0486 99DE xcall _halSpiStrobe
0488 L101:
0488 2196 adiw R28,1
048A 0E940000 xcall pop_gset1
048E 0E940000 xcall pop_lset
0492 .dbline 0 ; func end
0492 1895 reti
0494 ; nnn -> R20,R21
.even
0494 _CC1100_init::
0494 0E940000 xcall push_gset1
0498 2197 sbiw R28,1
049A ; }
049A ; /**************************************************/
049A ; //extern led2On();
049A ; //初始化
049A ; uint8_t CC1100_init()
049A ; {
049A ; uint16_t nnn;
049A ;
049A ; SET_CSN();
049A CADD xcall _SET_CSN
049C ; CLEAR_CLOCK();
049C B7DD xcall _CLEAR_CLOCK
049E ; CLEAR_IN();
049E C2DD xcall _CLEAR_IN
04A0 ;
04A0 ; CC1100_setInterrupt(0x00);
04A0 0027 clr R16
04A2 1127 clr R17
04A4 54D0 xcall _CC1100_setInterrupt
04A6 ; CC1100_POR();
04A6 BEDE xcall _CC1100_POR
04A8 4427 clr R20
04AA 5527 clr R21
04AC 02C0 xjmp L109
04AE L106:
04AE L107:
04AE 4F5F subi R20,255 ; offset = 1
04B0 5F4F sbci R21,255
04B2 L109:
04B2 ; for(nnn=0;nnn<500;nnn++);
04B2 443F cpi R20,244
04B4 E1E0 ldi R30,1
04B6 5E07 cpc R21,R30
04B8 D0F3 brlo L106
04BA ;
04BA ; halRfWriteRfSettings();
04BA 60DF xcall _halRfWriteRfSettings
04BC ; // led2On();
04BC ; halSpiWriteBurstReg(CCxxx0_PATABLE, paTable, sizeof(paTable));
04BC 88E0 ldi R24,8
04BE 8883 std y+0,R24
04C0 20E0 ldi R18,<_paTable
04C2 30E0 ldi R19,>_paTable
04C4 0EE3 ldi R16,62
04C6 8ADE xcall _halSpiWriteBurstReg
04C8 ;
04C8 ; CC1100_setInterrupt(0x00);
04C8 0027 clr R16
04CA 1127 clr R17
04CC 40D0 xcall _CC1100_setInterrupt
04CE ; CC1100_setStrobe(CCxxx0_SIDLE);
04CE 06E3 ldi R16,54
04D0 10E0 ldi R17,0
04D2 05D0 xcall _CC1100_setStrobe
04D4 ;
04D4 ; return 1;
04D4 01E0 ldi R16,1
04D6 L105:
04D6 2196 adiw R28,1
04D8 0E940000 xcall pop_gset1
04DC .dbline 0 ; func end
04DC 0895 ret
04DE ; state -> R20
.even
04DE _CC1100_setStrobe::
04DE 0E940000 xcall push_gset1
04E2 402F mov R20,R16
04E4 ; }
04E4 ; //设置状态
04E4 ; uint8_t CC1100_setStrobe(uint8_t state)
04E4 ; {
04E4 ; halSpiStrobe(state);
04E4 042F mov R16,R20
04E6 69DE xcall _halSpiStrobe
04E8 ; Dly1mS(5);
04E8 05E0 ldi R16,5
04EA 10E0 ldi R17,0
04EC C8DD xcall _Dly1mS
04EE ; return 1;
04EE 01E0 ldi R16,1
04F0 L110:
04F0 0E940000 xcall pop_gset1
04F4 .dbline 0 ; func end
04F4 0895 ret
04F6 ; value -> R22
04F6 ; address -> R20
.even
04F6 _CC1100_setRegister::
04F6 0E940000 xcall push_gset2
04FA 622F mov R22,R18
04FC 402F mov R20,R16
04FE ; }
04FE ; //写寄存器
04FE ; uint8_t CC1100_setRegister(uint8_t address,uint8_t value)
04FE ; {
04FE ; halSpiWriteReg(address,value);
04FE 262F mov R18,R22
0500 042F mov R16,R20
0502 46DE xcall _halSpiWriteReg
0504 ; return 1;
0504 01E0 ldi R16,1
0506 L111:
0506 0E940000 xcall pop_gset2
050A .dbline 0 ; func end
050A 0895 ret
050C ; address -> R20
.even
050C _CC1100_readRegister::
050C 0E940000 xcall push_gset1
0510 402F mov R20,R16
0512 ; }
0512 ; //读寄存器
0512 ; uint8_t CC1100_readRegister(uint8_t address)
0512 ; {
0512 ; rd_reg = halSpiReadReg(address);
0512 042F mov R16,R20
0514 D9DE xcall _halSpiReadReg
0516 00930000 sts _rd_reg,R16
051A ; return rd_reg;
051A L112:
051A 0E940000 xcall pop_gset1
051E .dbline 0 ; func end
051E 0895 ret
0520 ; address -> R20
.even
0520 _CC1100_readStatus::
0520 0E940000 xcall push_gset1
0524 402F mov R20,R16
0526 ; }
0526 ; //读状态
0526 ; uint8_t CC1100_readStatus(uint8_t address)
0526 ; {
0526 ; return halSpiReadStatus(address);
0526 042F mov R16,R20
0528 14DF xcall _halSpiReadStatus
052A L113:
052A 0E940000 xcall pop_gset1
052E .dbline 0 ; func end
052E 0895 ret
0530 ; count -> y+5
0530 ; buffer -> R22,R23
0530 ; addr -> R20
.even
0530 _CC1100_readBurstReg::
0530 0E940000 xcall push_gset2
0534 B901 movw R22,R18
0536 402F mov R20,R16
0538 2197 sbiw R28,1
053A ;
053A ; }
053A ; //连续读
053A ; uint8_t CC1100_readBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)
053A ; {
053A ; halSpiReadBurstReg(addr, buffer, count);
053A 0D80 ldd R0,y+5
053C 0882 std y+0,R0
053E 9B01 movw R18,R22
0540 042F mov R16,R20
0542 DFDE xcall _halSpiReadBurstReg
0544 ; return 1;
0544 01E0 ldi R16,1
0546 L114:
0546 2196 adiw R28,1
0548 0E940000 xcall pop_gset2
054C .dbline 0 ; func end
054C 0895 ret
054E ; flag -> R20
.even
054E _CC1100_setInterrupt::
054E 0E940000 xcall push_gset1
0552 402F mov R20,R16
0554 ; }
0554 ; //halSpiReadStatus
0554 ; //设置中断
0554 ; uint8_t CC1100_setInterrupt(uint8_t flag)
0554 ; {
0554 ; if(flag==0x00)
0554 4423 tst R20
0556 49F4 brne L116
0558 ; {
0558 ; EIFR=0x02;EICRA=0x08;EICRB=0x00;EIMSK=0x00;
0558 82E0 ldi R24,2
055A 88BF out 0x38,R24
055C 88E0 ldi R24,8
055E 80936A00 sts 106,R24
0562 2224 clr R2
0564 2ABE out 0x3a,R2
0566 29BE out 0x39,R2
0568 ; }
0568 12C0 xjmp L117
056A L116:
056A ; else if(flag==0x01)
056A 4130 cpi R20,1
056C 61F4 brne L118
056E ; {
056E ; EIFR=0x02;EICRA=0x08;EICRB=0x00;EIMSK=0x02;
056E 82E0 ldi R24,2
0570 88BF out 0x38,R24
0572 88E0 ldi R24,8
0574 80936A00 sts 106,R24
0578 2224 clr R2
057A 2ABE out 0x3a,R2
057C 82E0 ldi R24,2
057E 89BF out 0x39,R24
0580 ; halSpiStrobe(CCxxx0_SRX);
0580 04E3 ldi R16,52
0582 1BDE xcall _halSpiStrobe
0584 ; }
0584 04C0 xjmp L119
0586 L118:
0586 ; else if(flag==0x02)
0586 4230 cpi R20,2
0588 11F4 brne L120
058A ; {
058A ; halSpiStrobe(CCxxx0_SRX);
058A 04E3 ldi R16,52
058C 16DE xcall _halSpiStrobe
058E ; }
058E L120:
058E L119:
058E L117:
058E ; return 1;
058E 01E0 ldi R16,1
0590 L115:
0590 0E940000 xcall pop_gset1
0594 .dbline 0 ; func end
0594 0895 ret
0596 ; size -> R22
0596 ; txPtr -> R20,R21
.even
0596 _CC1100_sendRFburst::
0596 0E940000 xcall push_gset2
059A 622F mov R22,R18
059C A801 movw R20,R16
059E ; }
059E ;
059E ; //extern led1On();
059E ; //连续发
059E ; uint8_t CC1100_sendRFburst(uint8_t *txPtr,uint8_t size)
059E ; {
059E ; //led1On();
059E ; CC1100_setInterrupt(0x00); //关中断
059E 0027 clr R16
05A0 D6DF xcall _CC1100_setInterrupt
05A2 ; halSpiStrobe(CCxxx0_SIDLE);
05A2 06E3 ldi R16,54
05A4 0ADE xcall _halSpiStrobe
05A6 ; halRfSendPacket(txPtr, size);
05A6 262F mov R18,R22
05A8 8A01 movw R16,R20
05AA 6BDE xcall _halRfSendPacket
05AC ; //Dly1mS(100);
05AC ; if(SEND_DONE==0x01) //表明发送完成
05AC 80910800 lds R24,_SEND_DONE
05B0 8130 cpi R24,1
05B2 49F4 brne L123
05B4 ; {
05B4 ; SEND_DONE=0x00;
05B4 2224 clr R2
05B6 20920800 sts _SEND_DONE,R2
05BA ; //led2On();
05BA ; CC1100_sendDone(1);
05BA 01E0 ldi R16,1
05BC 10E0 ldi R17,0
05BE 0E940000 xcall _CC1100_sendDone
05C2 ; CC1100_setInterrupt(0x01); //开中断
05C2 01E0 ldi R16,1
05C4 C4DF xcall _CC1100_setInterrupt
05C6 ; }
05C6 L123:
05C6 ; return 1;
05C6 01E0 ldi R16,1
05C8 L122:
05C8 0E940000 xcall pop_gset2
05CC .dbline 0 ; func end
05CC 0895 ret
.area bss(ram, con, rel)
0000 _rd_reg::
0000 .blkb 1
0001 _rxBuffer::
0001 .blkb 32
.area func_lit
0000 0000 PL_CC1100_receive: .word `_CC1100_receive
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -