www.pudn.com > M8_cc1100_receive.rar > cc1100.lis
.module cc1100.c
.area lit(rom, con, rel)
0000 _rfSettings::
0000 00 .byte 0
0001 0B .byte 11
0002 00 .byte 0
0003 10 .byte 16
0004 A7 .byte 167
0005 62 .byte 98
0006 2D .byte 45
0007 3B .byte 59
0008 73 .byte 115
0009 A2 .byte 162
000A F8 .byte 248
000B 00 .byte 0
000C 00 .byte 0
000D B6 .byte 182
000E 10 .byte 16
000F 18 .byte 24
0010 1D .byte 29
0011 1C .byte 28
0012 C7 .byte 199
0013 00 .byte 0
0014 B2 .byte 178
0015 EA .byte 234
0016 0A .byte 10
0017 00 .byte 0
0018 11 .byte 17
0019 59 .byte 89
001A 88 .byte 136
001B 31 .byte 49
001C 0B .byte 11
001D 06 .byte 6
001E 06 .byte 6
001F 05 .byte 5
0020 45 .byte 69
0021 F0 .byte 240
0022 F0 .byte 240
0023 .dbfile E:\学习基地\IMPORT~1\CC1100-RF-Design\cc1100-design\Firmware\M8_cc1100_receive\cc1100.c
0023 .dbsym e rfSettings _rfSettings kX
.area text(rom, con, rel)
0000 .dbfile E:\学习基地\IMPORT~1\CC1100-RF-Design\cc1100-design\Firmware\M8_cc1100_receive\cc1100.c
0000 .dbfunc e delay _delay fV
0000 ; i -> R20,R21
0000 ; s -> R16,R17
.even
0000 _delay::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 105
0002 ; /*C**************************************************************************
0002 ; * NAME: cc1100.c
0002 ; *----------------------------------------------------------------------------
0002 ; * Copyright (c) 2007 endylu
0002 ; *----------------------------------------------------------------------------
0002 ; * RELEASE: M8-cc1100
0002 ; * REVISION: 1.0
0002 ; *----------------------------------------------------------------------------
0002 ; * PURPOSE:
0002 ; * This file include cc1100 receive and send function
0002 ; *****************************************************************************/
0002 ;
0002 ; /*_____ I N C L U D E S ____________________________________________________*/
0002 ;
0002 ; #include
0002 ; #include
0002 ; #include "main.h"
0002 ; /*_____ M A C R O S ________________________________________________________*/
0002 ;
0002 ;
0002 ; /*_____ D E F I N I T I O N ________________________________________________*/
0002 ;
0002 ;
0002 ; //------------------------------------------------------------------------------------------------------
0002 ; // Chipcon
0002 ; // Product = CC1100
0002 ; // Chip version = E
0002 ; // Crystal accuracy = 40 ppm
0002 ; // X-tal frequency = 26 MHz
0002 ; // RF output power = 0 dBm
0002 ; // RX filterbandwidth = 540.000000 kHz
0002 ; // Deviation = 0.000000
0002 ; // Datarate = 250.000000 kbps
0002 ; // Modulation = (7) MSK
0002 ; // Manchester enable = (0) Manchester disabled
0002 ; // RF Frequency = 433.000000 MHz
0002 ; // Channel spacing = 199.951172 kHz
0002 ; // Channel number = 0
0002 ; // Optimization = Sensitivity
0002 ; // Sync mode = (3) 30/32 sync word bits detected
0002 ; // Format of RX/TX data = (0) Normal mode, use FIFOs for RX and TX
0002 ; // CRC operation = (1) CRC calculation in TX and CRC check in RX enabled
0002 ; // Forward Error Correction = (0) FEC disabled
0002 ; // Length configuration = (1) Variable length packets, packet length configured by the first received byte after sync word.
0002 ; // Packetlength = 255
0002 ; // Preamble count = (2) 4 bytes
0002 ; // Append status = 1
0002 ; // Address check = (0) No address check
0002 ; // FIFO autoflush = 0
0002 ; // Device address = 0
0002 ; // GDO0 signal selection = ( 6) Asserts when sync word has been sent / received, and de-asserts at the end of the packet
0002 ; // GDO2 signal selection = (11) Serial Clock
0002 ; const RF_SETTINGS rfSettings = {
0002 ; 0x00,
0002 ; 0x0B, // FSCTRL1 Frequency synthesizer control.
0002 ; 0x00, // FSCTRL0 Frequency synthesizer control.
0002 ; 0x10, // FREQ2 Frequency control word, high byte.
0002 ; 0xA7, // FREQ1 Frequency control word, middle byte.
0002 ; 0x62, // FREQ0 Frequency control word, low byte.
0002 ; 0x2D, // MDMCFG4 Modem configuration.
0002 ; 0x3B, // MDMCFG3 Modem configuration.
0002 ; 0x73, // MDMCFG2 Modem configuration.
0002 ; 0xa2, // MDMCFG1 Modem configuration.
0002 ; 0xF8, // MDMCFG0 Modem configuration.
0002 ;
0002 ; 0x00, // CHANNR Channel number.
0002 ; 0x00, // DEVIATN Modem deviation setting (when FSK modulation is enabled).
0002 ; 0xB6, // FREND1 Front end RX configuration.
0002 ; 0x10, // FREND0 Front end RX configuration.
0002 ; 0x18, // MCSM0 Main Radio Control State Machine configuration.
0002 ; 0x1D, // FOCCFG Frequency Offset Compensation Configuration.
0002 ; 0x1C, // BSCFG Bit synchronization Configuration.
0002 ; 0xC7, // AGCCTRL2 AGC control.
0002 ; 0x00, // AGCCTRL1 AGC control.
0002 ; 0xB2, // AGCCTRL0 AGC control.
0002 ;
0002 ; 0xEA, // FSCAL3 Frequency synthesizer calibration.
0002 ; 0x0A, // FSCAL2 Frequency synthesizer calibration.
0002 ; 0x00, // FSCAL1 Frequency synthesizer calibration.
0002 ; 0x11, // FSCAL0 Frequency synthesizer calibration.
0002 ; 0x59, // FSTEST Frequency synthesizer calibration.
0002 ; 0x88, // TEST2 Various test settings.
0002 ; 0x31, // TEST1 Various test settings.
0002 ; 0x0B, // TEST0 Various test settings.
0002 ; 0x06, //IOCFG2 GDO2 output pin configuration.
0002 ; 0x06, // IOCFG0 GDO0 output pin configuration. Refer to SmartRF?Studio User Manual for detailed pseudo register explanation.
0002 ;
0002 ; 0x05, // PKTCTRL1 Packet automation control.
0002 ; 0x45, // PKTCTRL0 Packet automation control.
0002 ; ID_Oneself, // ADDR Device address.
0002 ; 0xf0, // PKTLEN Packet length.
0002 ; };
0002 ;
0002 ; /*_____ D E C L A R A T I O N ______________________________________________*/
0002 ;
0002 ;
0002 ;
0002 ; //*****************************************************************************************
0002 ; //函数名:delay(unsigned int s)
0002 ; //输入:时间
0002 ; //输出:无
0002 ; //功能描述:普通廷时
0002 ; //*****************************************************************************************
0002 ; void delay(unsigned int s)
0002 ; {
0002 .dbline 107
0002 4427 clr R20
0004 5527 clr R21
0006 02C0 rjmp L5
0008 L2:
0008 .dbline 107
0008 L3:
0008 .dbline 107
0008 4F5F subi R20,255 ; offset = 1
000A 5F4F sbci R21,255
000C L5:
000C .dbline 107
000C ; unsigned int i;
000C ; for(i=0; i R16,R17
.even
0026 _halWait::
0026 .dbline -1
0026 .dbline 112
0026 ; }
0026 ;
0026 ;
0026 ; void halWait(INT16U timeout) {
0026 L11:
0026 .dbline 113
0026 ; do {
0026 .dbline 114
0026 ; _nop_();
0026 0000 nop
0028 .dbline 115
0028 ; _nop_();
0028 0000 nop
002A .dbline 116
002A ; _nop_();
002A 0000 nop
002C .dbline 117
002C ; _nop_();
002C 0000 nop
002E .dbline 118
002E ; _nop_();
002E 0000 nop
0030 .dbline 119
0030 ; _nop_();
0030 0000 nop
0032 .dbline 120
0032 ; _nop_();
0032 0000 nop
0034 .dbline 121
0034 ; _nop_();
0034 0000 nop
0036 .dbline 122
0036 ; _nop_();
0036 0000 nop
0038 .dbline 123
0038 ; _nop_();
0038 0000 nop
003A .dbline 124
003A ; _nop_();
003A 0000 nop
003C .dbline 125
003C ; _nop_();
003C 0000 nop
003E .dbline 126
003E ; _nop_();
003E 0000 nop
0040 .dbline 127
0040 ; _nop_();
0040 0000 nop
0042 .dbline 128
0042 ; _nop_();
0042 0000 nop
0044 .dbline 129
0044 L12:
0044 .dbline 129
0044 ; } while (--timeout);
0044 C801 movw R24,R16
0046 0197 sbiw R24,1
0048 8C01 movw R16,R24
004A 0030 cpi R16,0
004C 0107 cpc R16,R17
004E 59F7 brne L11
0050 X0:
0050 .dbline -2
0050 L10:
0050 .dbline 0 ; func end
0050 0895 ret
0052 .dbsym r timeout 16 i
0052 .dbend
0052 .dbfunc e UartInit _UartInit fV
.even
0052 _UartInit::
0052 .dbline -1
0052 .dbline 139
0052 ; }
0052 ;
0052 ; /*****************************************************************************************
0052 ; //函数名:UartInit()
0052 ; //输入:无
0052 ; //输出:无
0052 ; //功能描述:串口初始化程序
0052 ; /*****************************************************************************************/
0052 ; void UartInit(void) //用232串口发数据到PC,收集数据
0052 ; {
0052 .dbline 140
0052 ; UCSRB=(1< R20
0080 ; i -> R22
0080 ; dat -> R16
.even
0080 _SpiTxRxByte::
0080 00D0 rcall push_gset2
0082 .dbline -1
0082 .dbline 182
0082 ; }
0082 ;
0082 ; //*****************************************************************************************
0082 ; //函数名:SpisendByte(INT8U dat)
0082 ; //输入:发送的数据
0082 ; //输出:无
0082 ; //功能描述:SPI发送一个字节
0082 ; //*****************************************************************************************
0082 ; INT8U SpiTxRxByte(INT8U dat)
0082 ; {
0082 .dbline 184
0082 ; INT8U i,temp;
0082 ; temp = 0;
0082 4427 clr R20
0084 .dbline 186
0084 ;
0084 ; SCK_0;
0084 C598 cbi 0x18,5
0086 .dbline 186
0086 .dbline 187
0086 ; for(i=0; i<8; i++)
0086 6627 clr R22
0088 11C0 rjmp L21
008A L18:
008A .dbline 188
008A ; {
008A .dbline 189
008A ; if(dat & 0x80)
008A 07FF sbrs R16,7
008C 02C0 rjmp L22
008E .dbline 190
008E ; {
008E .dbline 191
008E ; MOSI_1;
008E C39A sbi 0x18,3
0090 .dbline 191
0090 .dbline 192
0090 ; }
0090 01C0 rjmp L23
0092 L22:
0092 .dbline 193
0092 C398 cbi 0x18,3
0094 L23:
0094 .dbline 193
0094 ; else MOSI_0;
0094 .dbline 194
0094 ; dat <<= 1;
0094 000F lsl R16
0096 .dbline 196
0096 ;
0096 ; SCK_1;
0096 C59A sbi 0x18,5
0098 .dbline 196
0098 .dbline 197
0098 ; _nop_();
0098 0000 nop
009A .dbline 198
009A ; _nop_();
009A 0000 nop
009C .dbline 200
009C ;
009C ; temp <<= 1;
009C 440F lsl R20
009E .dbline 201
009E ; if(MISO)temp++;
009E B49B sbis 0x16,4
00A0 01C0 rjmp L24
00A2 .dbline 201
00A2 4395 inc R20
00A4 L24:
00A4 .dbline 202
00A4 C598 cbi 0x18,5
00A6 .dbline 202
00A6 .dbline 203
00A6 0000 nop
00A8 .dbline 204
00A8 0000 nop
00AA .dbline 205
00AA L19:
00AA .dbline 187
00AA 6395 inc R22
00AC L21:
00AC .dbline 187
00AC 6830 cpi R22,8
00AE 68F3 brlo L18
00B0 .dbline 206
00B0 ; SCK_0;
00B0 ; _nop_();
00B0 ; _nop_();
00B0 ; }
00B0 ; return temp;
00B0 042F mov R16,R20
00B2 .dbline -2
00B2 L17:
00B2 00D0 rcall pop_gset2
00B4 .dbline 0 ; func end
00B4 0895 ret
00B6 .dbsym r temp 20 c
00B6 .dbsym r i 22 c
00B6 .dbsym r dat 16 c
00B6 .dbend
00B6 .dbfunc e RESET_CC1100 _RESET_CC1100 fV
.even
00B6 _RESET_CC1100::
00B6 .dbline -1
00B6 .dbline 216
00B6 ; }
00B6 ;
00B6 ; //*****************************************************************************************
00B6 ; //函数名:void RESET_CC1100(void)
00B6 ; //输入:无
00B6 ; //输出:无
00B6 ; //功能描述:复位CC1100
00B6 ; //*****************************************************************************************
00B6 ; void RESET_CC1100(void)
00B6 ; {
00B6 .dbline 217
00B6 ; CSN_0;
00B6 C298 cbi 0x18,2
00B8 .dbline 217
00B8 L27:
00B8 .dbline 218
00B8 L28:
00B8 .dbline 218
00B8 ; while (GDO0);
00B8 8299 sbic 0x10,2
00BA FECF rjmp L27
00BC .dbline 219
00BC ; SpiTxRxByte(CCxxx0_SRES); //写入复位命令
00BC 00E3 ldi R16,48
00BE E0DF rcall _SpiTxRxByte
00C0 L30:
00C0 .dbline 220
00C0 L31:
00C0 .dbline 220
00C0 ; while (GDO0);
00C0 8299 sbic 0x10,2
00C2 FECF rjmp L30
00C4 .dbline 221
00C4 ; CSN_1;
00C4 C29A sbi 0x18,2
00C6 .dbline 221
00C6 .dbline -2
00C6 L26:
00C6 .dbline 0 ; func end
00C6 0895 ret
00C8 .dbend
00C8 .dbfunc e POWER_UP_RESET_CC1100 _POWER_UP_RESET_CC1100 fV
.even
00C8 _POWER_UP_RESET_CC1100::
00C8 .dbline -1
00C8 .dbline 231
00C8 ; }
00C8 ;
00C8 ; //*****************************************************************************************
00C8 ; //函数名:void POWER_UP_RESET_CC1100(void)
00C8 ; //输入:无
00C8 ; //输出:无
00C8 ; //功能描述:上电复位CC1100
00C8 ; //*****************************************************************************************
00C8 ; void POWER_UP_RESET_CC1100(void)
00C8 ; {
00C8 .dbline 232
00C8 ; CSN_1;
00C8 C29A sbi 0x18,2
00CA .dbline 232
00CA .dbline 233
00CA ; halWait(1);
00CA 01E0 ldi R16,1
00CC 10E0 ldi R17,0
00CE ABDF rcall _halWait
00D0 .dbline 234
00D0 ; CSN_0;
00D0 C298 cbi 0x18,2
00D2 .dbline 234
00D2 .dbline 235
00D2 ; halWait(1);
00D2 01E0 ldi R16,1
00D4 10E0 ldi R17,0
00D6 A7DF rcall _halWait
00D8 .dbline 236
00D8 ; CSN_1;
00D8 C29A sbi 0x18,2
00DA .dbline 236
00DA .dbline 237
00DA ; halWait(41);
00DA 09E2 ldi R16,41
00DC 10E0 ldi R17,0
00DE A3DF rcall _halWait
00E0 .dbline 238
00E0 ; RESET_CC1100(); //复位CC1100
00E0 EADF rcall _RESET_CC1100
00E2 .dbline -2
00E2 L33:
00E2 .dbline 0 ; func end
00E2 0895 ret
00E4 .dbend
00E4 .dbfunc e halSpiWriteReg _halSpiWriteReg fV
00E4 ; value -> R20
00E4 ; addr -> R22
.even
00E4 _halSpiWriteReg::
00E4 00D0 rcall push_gset2
00E6 422F mov R20,R18
00E8 602F mov R22,R16
00EA .dbline -1
00EA .dbline 248
00EA ; }
00EA ;
00EA ; //*****************************************************************************************
00EA ; //函数名:void halSpiWriteReg(INT8U addr, INT8U value)
00EA ; //输入:地址和配置字
00EA ; //输出:无
00EA ; //功能描述:SPI写寄存器
00EA ; //*****************************************************************************************
00EA ; void halSpiWriteReg(INT8U addr, INT8U value)
00EA ; {
00EA .dbline 249
00EA ; CSN_0;
00EA C298 cbi 0x18,2
00EC .dbline 249
00EC L35:
00EC .dbline 250
00EC L36:
00EC .dbline 250
00EC ; while (GDO0);
00EC 8299 sbic 0x10,2
00EE FECF rjmp L35
00F0 .dbline 251
00F0 ; SpiTxRxByte(addr); //写地址
00F0 062F mov R16,R22
00F2 C6DF rcall _SpiTxRxByte
00F4 .dbline 252
00F4 ; SpiTxRxByte(value); //写入配置
00F4 042F mov R16,R20
00F6 C4DF rcall _SpiTxRxByte
00F8 .dbline 253
00F8 ; CSN_1;
00F8 C29A sbi 0x18,2
00FA .dbline 253
00FA .dbline -2
00FA L34:
00FA 00D0 rcall pop_gset2
00FC .dbline 0 ; func end
00FC 0895 ret
00FE .dbsym r value 20 c
00FE .dbsym r addr 22 c
00FE .dbend
00FE .dbfunc e halSpiWriteBurstReg _halSpiWriteBurstReg fV
00FE ; temp -> R20
00FE ; i -> R22
00FE ; count -> R10
00FE ; buffer -> R12,R13
00FE ; addr -> R20
.even
00FE _halSpiWriteBurstReg::
00FE 00D0 rcall push_gset4
0100 6901 movw R12,R18
0102 402F mov R20,R16
0104 A884 ldd R10,y+8
0106 .dbline -1
0106 .dbline 263
0106 ; }
0106 ;
0106 ; //*****************************************************************************************
0106 ; //函数名:void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
0106 ; //输入:地址,写入缓冲区,写入个数
0106 ; //输出:无
0106 ; //功能描述:SPI连续写配置寄存器
0106 ; //*****************************************************************************************
0106 ; void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
0106 ; {
0106 .dbline 265
0106 ; INT8U i, temp;
0106 ; temp = addr | WRITE_BURST;
0106 4064 ori R20,64
0108 .dbline 266
0108 ; CSN_0;
0108 C298 cbi 0x18,2
010A .dbline 266
010A L39:
010A .dbline 267
010A L40:
010A .dbline 267
010A ; while (GDO0);
010A 8299 sbic 0x10,2
010C FECF rjmp L39
010E .dbline 268
010E ; SpiTxRxByte(temp);
010E 042F mov R16,R20
0110 B7DF rcall _SpiTxRxByte
0112 .dbline 269
0112 ; for (i = 0; i < count; i++)
0112 6627 clr R22
0114 07C0 rjmp L45
0116 L42:
0116 .dbline 270
0116 .dbline 271
0116 E62F mov R30,R22
0118 FF27 clr R31
011A EC0D add R30,R12
011C FD1D adc R31,R13
011E 0081 ldd R16,z+0
0120 AFDF rcall _SpiTxRxByte
0122 .dbline 272
0122 L43:
0122 .dbline 269
0122 6395 inc R22
0124 L45:
0124 .dbline 269
0124 6A15 cp R22,R10
0126 B8F3 brlo L42
0128 .dbline 273
0128 ; {
0128 ; SpiTxRxByte(buffer[i]);
0128 ; }
0128 ; CSN_1;
0128 C29A sbi 0x18,2
012A .dbline 273
012A .dbline -2
012A L38:
012A 00D0 rcall pop_gset4
012C .dbline 0 ; func end
012C 0895 ret
012E .dbsym r temp 20 c
012E .dbsym r i 22 c
012E .dbsym r count 10 c
012E .dbsym r buffer 12 pc
012E .dbsym r addr 20 c
012E .dbend
012E .dbfunc e halSpiStrobe _halSpiStrobe fV
012E ; strobe -> R20
.even
012E _halSpiStrobe::
012E 00D0 rcall push_gset1
0130 402F mov R20,R16
0132 .dbline -1
0132 .dbline 283
0132 ; }
0132 ;
0132 ; //*****************************************************************************************
0132 ; //函数名:void halSpiStrobe(INT8U strobe)
0132 ; //输入:命令
0132 ; //输出:无
0132 ; //功能描述:SPI写命令
0132 ; //*****************************************************************************************
0132 ; void halSpiStrobe(INT8U strobe)
0132 ; {
0132 .dbline 284
0132 ; CSN_0;
0132 C298 cbi 0x18,2
0134 .dbline 284
0134 L47:
0134 .dbline 285
0134 L48:
0134 .dbline 285
0134 ; while (GDO0);
0134 8299 sbic 0x10,2
0136 FECF rjmp L47
0138 .dbline 286
0138 ; SpiTxRxByte(strobe); //写入命令
0138 042F mov R16,R20
013A A2DF rcall _SpiTxRxByte
013C .dbline 287
013C ; CSN_1;
013C C29A sbi 0x18,2
013E .dbline 287
013E .dbline -2
013E L46:
013E 00D0 rcall pop_gset1
0140 .dbline 0 ; func end
0140 0895 ret
0142 .dbsym r strobe 20 c
0142 .dbend
0142 .dbfunc e halSpiReadReg _halSpiReadReg fc
0142 ; value -> R20
0142 ; temp -> R22
0142 ; addr -> R20
.even
0142 _halSpiReadReg::
0142 00D0 rcall push_gset2
0144 402F mov R20,R16
0146 .dbline -1
0146 .dbline 301
0146 ; }
0146 ;
0146 ;
0146 ;
0146 ;
0146 ;
0146 ; //*****************************************************************************************
0146 ; //函数名:INT8U halSpiReadReg(INT8U addr)
0146 ; //输入:地址
0146 ; //输出:该寄存器的配置字
0146 ; //功能描述:SPI读寄存器
0146 ; //*****************************************************************************************
0146 ; INT8U halSpiReadReg(INT8U addr)
0146 ; {
0146 .dbline 303
0146 ; INT8U temp, value;
0146 ; temp = addr|READ_SINGLE;//读寄存器命令
0146 642F mov R22,R20
0148 6068 ori R22,128
014A .dbline 304
014A ; CSN_0;
014A C298 cbi 0x18,2
014C .dbline 304
014C L51:
014C .dbline 305
014C L52:
014C .dbline 305
014C ; while (GDO0);
014C 8299 sbic 0x10,2
014E FECF rjmp L51
0150 .dbline 306
0150 ; SpiTxRxByte(temp);
0150 062F mov R16,R22
0152 96DF rcall _SpiTxRxByte
0154 .dbline 307
0154 ; value = SpiTxRxByte(0);
0154 0027 clr R16
0156 94DF rcall _SpiTxRxByte
0158 402F mov R20,R16
015A .dbline 308
015A ; CSN_1;
015A C29A sbi 0x18,2
015C .dbline 308
015C .dbline 309
015C ; return value;
015C .dbline -2
015C L50:
015C 00D0 rcall pop_gset2
015E .dbline 0 ; func end
015E 0895 ret
0160 .dbsym r value 20 c
0160 .dbsym r temp 22 c
0160 .dbsym r addr 20 c
0160 .dbend
0160 .dbfunc e halSpiReadBurstReg _halSpiReadBurstReg fV
0160 ; temp -> R20
0160 ; i -> R22
0160 ; count -> R10
0160 ; buffer -> R12,R13
0160 ; addr -> R20
.even
0160 _halSpiReadBurstReg::
0160 00D0 rcall push_gset4
0162 6901 movw R12,R18
0164 402F mov R20,R16
0166 A884 ldd R10,y+8
0168 .dbline -1
0168 .dbline 320
0168 ; }
0168 ;
0168 ;
0168 ; //*****************************************************************************************
0168 ; //函数名:void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
0168 ; //输入:地址,读出数据后暂存的缓冲区,读出配置个数
0168 ; //输出:无
0168 ; //功能描述:SPI连续写配置寄存器
0168 ; //*****************************************************************************************
0168 ; void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
0168 ; {
0168 .dbline 322
0168 ; INT8U i,temp;
0168 ; temp = addr | READ_BURST; //写入要读的配置寄存器地址和读命令
0168 406C ori R20,192
016A .dbline 323
016A ; CSN_0;
016A C298 cbi 0x18,2
016C .dbline 323
016C L55:
016C .dbline 324
016C L56:
016C .dbline 324
016C ; while (GDO0);
016C 8299 sbic 0x10,2
016E FECF rjmp L55
0170 .dbline 325
0170 ; SpiTxRxByte(temp);
0170 042F mov R16,R20
0172 86DF rcall _SpiTxRxByte
0174 .dbline 326
0174 ; for (i = 0; i < count; i++)
0174 6627 clr R22
0176 08C0 rjmp L61
0178 L58:
0178 .dbline 327
0178 .dbline 328
0178 0027 clr R16
017A 82DF rcall _SpiTxRxByte
017C E62F mov R30,R22
017E FF27 clr R31
0180 EC0D add R30,R12
0182 FD1D adc R31,R13
0184 0083 std z+0,R16
0186 .dbline 329
0186 L59:
0186 .dbline 326
0186 6395 inc R22
0188 L61:
0188 .dbline 326
0188 6A15 cp R22,R10
018A B0F3 brlo L58
018C .dbline 330
018C ; {
018C ; buffer[i] = SpiTxRxByte(0);
018C ; }
018C ; CSN_1;
018C C29A sbi 0x18,2
018E .dbline 330
018E .dbline -2
018E L54:
018E 00D0 rcall pop_gset4
0190 .dbline 0 ; func end
0190 0895 ret
0192 .dbsym r temp 20 c
0192 .dbsym r i 22 c
0192 .dbsym r count 10 c
0192 .dbsym r buffer 12 pc
0192 .dbsym r addr 20 c
0192 .dbend
0192 .dbfunc e halSpiReadStatus _halSpiReadStatus fc
0192 ; temp -> R20
0192 ; value -> R22
0192 ; addr -> R20
.even
0192 _halSpiReadStatus::
0192 00D0 rcall push_gset2
0194 402F mov R20,R16
0196 .dbline -1
0196 .dbline 341
0196 ; }
0196 ;
0196 ;
0196 ; //*****************************************************************************************
0196 ; //函数名:INT8U halSpiReadReg(INT8U addr)
0196 ; //输入:地址
0196 ; //输出:该状态寄存器当前值
0196 ; //功能描述:SPI读状态寄存器
0196 ; //*****************************************************************************************
0196 ; INT8U halSpiReadStatus(INT8U addr)
0196 ; {
0196 .dbline 343
0196 ; INT8U value,temp;
0196 ; temp = addr | READ_BURST; //写入要读的状态寄存器的地址同时写入读命令
0196 406C ori R20,192
0198 .dbline 344
0198 ; CSN_0;
0198 C298 cbi 0x18,2
019A .dbline 344
019A L63:
019A .dbline 345
019A L64:
019A .dbline 345
019A ; while (GDO0);
019A 8299 sbic 0x10,2
019C FECF rjmp L63
019E .dbline 346
019E ; SpiTxRxByte(temp);
019E 042F mov R16,R20
01A0 6FDF rcall _SpiTxRxByte
01A2 .dbline 347
01A2 ; value = SpiTxRxByte(0);
01A2 0027 clr R16
01A4 6DDF rcall _SpiTxRxByte
01A6 602F mov R22,R16
01A8 .dbline 348
01A8 ; CSN_1;
01A8 C29A sbi 0x18,2
01AA .dbline 348
01AA .dbline 349
01AA ; return value;
01AA .dbline -2
01AA L62:
01AA 00D0 rcall pop_gset2
01AC .dbline 0 ; func end
01AC 0895 ret
01AE .dbsym r temp 20 c
01AE .dbsym r value 22 c
01AE .dbsym r addr 20 c
01AE .dbend
01AE .dbfunc e halRfWriteRfSettings _halRfWriteRfSettings fV
.even
01AE _halRfWriteRfSettings::
01AE .dbline -1
01AE .dbline 360
01AE ; }
01AE ;
01AE ;
01AE ; //*****************************************************************************************
01AE ; //函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
01AE ; //输入:无
01AE ; //输出:无
01AE ; //功能描述:配置CC1100的寄存器
01AE ; //*****************************************************************************************
01AE ; void halRfWriteRfSettings(void)
01AE ; {
01AE .dbline 363
01AE ; //halSpiWriteReg(CCxxx0_FIFOTHR,0x09);
01AE ; //halSpiWriteReg(CCxxx0_MCSM1,0x00); //CCA,没有作通
01AE ; halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL2);//自已加的
01AE E0E0 ldi R30,<_rfSettings
01B0 F0E0 ldi R31,>_rfSettings
01B2 2491 lpm R18,Z
01B4 0CE0 ldi R16,12
01B6 96DF rcall _halSpiWriteReg
01B8 .dbline 365
01B8 ; // Write register settings
01B8 ; halSpiWriteReg(CCxxx0_FSCTRL1, rfSettings.FSCTRL1);
01B8 E0E0 ldi R30,<_rfSettings+1
01BA F0E0 ldi R31,>_rfSettings+1
01BC 2491 lpm R18,Z
01BE 0BE0 ldi R16,11
01C0 91DF rcall _halSpiWriteReg
01C2 .dbline 366
01C2 ; halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL0);
01C2 E0E0 ldi R30,<_rfSettings+2
01C4 F0E0 ldi R31,>_rfSettings+2
01C6 2491 lpm R18,Z
01C8 0CE0 ldi R16,12
01CA 8CDF rcall _halSpiWriteReg
01CC .dbline 367
01CC ; halSpiWriteReg(CCxxx0_FREQ2, rfSettings.FREQ2);
01CC E0E0 ldi R30,<_rfSettings+3
01CE F0E0 ldi R31,>_rfSettings+3
01D0 2491 lpm R18,Z
01D2 0DE0 ldi R16,13
01D4 87DF rcall _halSpiWriteReg
01D6 .dbline 368
01D6 ; halSpiWriteReg(CCxxx0_FREQ1, rfSettings.FREQ1);
01D6 E0E0 ldi R30,<_rfSettings+4
01D8 F0E0 ldi R31,>_rfSettings+4
01DA 2491 lpm R18,Z
01DC 0EE0 ldi R16,14
01DE 82DF rcall _halSpiWriteReg
01E0 .dbline 369
01E0 ; halSpiWriteReg(CCxxx0_FREQ0, rfSettings.FREQ0);
01E0 E0E0 ldi R30,<_rfSettings+5
01E2 F0E0 ldi R31,>_rfSettings+5
01E4 2491 lpm R18,Z
01E6 0FE0 ldi R16,15
01E8 7DDF rcall _halSpiWriteReg
01EA .dbline 370
01EA ; halSpiWriteReg(CCxxx0_MDMCFG4, rfSettings.MDMCFG4);
01EA E0E0 ldi R30,<_rfSettings+6
01EC F0E0 ldi R31,>_rfSettings+6
01EE 2491 lpm R18,Z
01F0 00E1 ldi R16,16
01F2 78DF rcall _halSpiWriteReg
01F4 .dbline 371
01F4 ; halSpiWriteReg(CCxxx0_MDMCFG3, rfSettings.MDMCFG3);
01F4 E0E0 ldi R30,<_rfSettings+7
01F6 F0E0 ldi R31,>_rfSettings+7
01F8 2491 lpm R18,Z
01FA 01E1 ldi R16,17
01FC 73DF rcall _halSpiWriteReg
01FE .dbline 372
01FE ; halSpiWriteReg(CCxxx0_MDMCFG2, rfSettings.MDMCFG2);
01FE E0E0 ldi R30,<_rfSettings+8
0200 F0E0 ldi R31,>_rfSettings+8
0202 2491 lpm R18,Z
0204 02E1 ldi R16,18
0206 6EDF rcall _halSpiWriteReg
0208 .dbline 373
0208 ; halSpiWriteReg(CCxxx0_MDMCFG1, rfSettings.MDMCFG1);
0208 E0E0 ldi R30,<_rfSettings+9
020A F0E0 ldi R31,>_rfSettings+9
020C 2491 lpm R18,Z
020E 03E1 ldi R16,19
0210 69DF rcall _halSpiWriteReg
0212 .dbline 374
0212 ; halSpiWriteReg(CCxxx0_MDMCFG0, rfSettings.MDMCFG0);
0212 E0E0 ldi R30,<_rfSettings+10
0214 F0E0 ldi R31,>_rfSettings+10
0216 2491 lpm R18,Z
0218 04E1 ldi R16,20
021A 64DF rcall _halSpiWriteReg
021C .dbline 375
021C ; halSpiWriteReg(CCxxx0_CHANNR, rfSettings.CHANNR);
021C E0E0 ldi R30,<_rfSettings+11
021E F0E0 ldi R31,>_rfSettings+11
0220 2491 lpm R18,Z
0222 0AE0 ldi R16,10
0224 5FDF rcall _halSpiWriteReg
0226 .dbline 376
0226 ; halSpiWriteReg(CCxxx0_DEVIATN, rfSettings.DEVIATN);
0226 E0E0 ldi R30,<_rfSettings+12
0228 F0E0 ldi R31,>_rfSettings+12
022A 2491 lpm R18,Z
022C 05E1 ldi R16,21
022E 5ADF rcall _halSpiWriteReg
0230 .dbline 377
0230 ; halSpiWriteReg(CCxxx0_FREND1, rfSettings.FREND1);
0230 E0E0 ldi R30,<_rfSettings+13
0232 F0E0 ldi R31,>_rfSettings+13
0234 2491 lpm R18,Z
0236 01E2 ldi R16,33
0238 55DF rcall _halSpiWriteReg
023A .dbline 378
023A ; halSpiWriteReg(CCxxx0_FREND0, rfSettings.FREND0);
023A E0E0 ldi R30,<_rfSettings+14
023C F0E0 ldi R31,>_rfSettings+14
023E 2491 lpm R18,Z
0240 02E2 ldi R16,34
0242 50DF rcall _halSpiWriteReg
0244 .dbline 379
0244 ; halSpiWriteReg(CCxxx0_MCSM0 , rfSettings.MCSM0 );
0244 E0E0 ldi R30,<_rfSettings+15
0246 F0E0 ldi R31,>_rfSettings+15
0248 2491 lpm R18,Z
024A 08E1 ldi R16,24
024C 4BDF rcall _halSpiWriteReg
024E .dbline 380
024E ; halSpiWriteReg(CCxxx0_FOCCFG, rfSettings.FOCCFG);
024E E0E0 ldi R30,<_rfSettings+16
0250 F0E0 ldi R31,>_rfSettings+16
0252 2491 lpm R18,Z
0254 09E1 ldi R16,25
0256 46DF rcall _halSpiWriteReg
0258 .dbline 381
0258 ; halSpiWriteReg(CCxxx0_BSCFG, rfSettings.BSCFG);
0258 E0E0 ldi R30,<_rfSettings+17
025A F0E0 ldi R31,>_rfSettings+17
025C 2491 lpm R18,Z
025E 0AE1 ldi R16,26
0260 41DF rcall _halSpiWriteReg
0262 .dbline 382
0262 ; halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
0262 E0E0 ldi R30,<_rfSettings+18
0264 F0E0 ldi R31,>_rfSettings+18
0266 2491 lpm R18,Z
0268 0BE1 ldi R16,27
026A 3CDF rcall _halSpiWriteReg
026C .dbline 383
026C ; halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
026C E0E0 ldi R30,<_rfSettings+19
026E F0E0 ldi R31,>_rfSettings+19
0270 2491 lpm R18,Z
0272 0CE1 ldi R16,28
0274 37DF rcall _halSpiWriteReg
0276 .dbline 384
0276 ; halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
0276 E0E0 ldi R30,<_rfSettings+20
0278 F0E0 ldi R31,>_rfSettings+20
027A 2491 lpm R18,Z
027C 0DE1 ldi R16,29
027E 32DF rcall _halSpiWriteReg
0280 .dbline 385
0280 ; halSpiWriteReg(CCxxx0_FSCAL3, rfSettings.FSCAL3);
0280 E0E0 ldi R30,<_rfSettings+21
0282 F0E0 ldi R31,>_rfSettings+21
0284 2491 lpm R18,Z
0286 03E2 ldi R16,35
0288 2DDF rcall _halSpiWriteReg
028A .dbline 386
028A ; halSpiWriteReg(CCxxx0_FSCAL2, rfSettings.FSCAL2);
028A E0E0 ldi R30,<_rfSettings+22
028C F0E0 ldi R31,>_rfSettings+22
028E 2491 lpm R18,Z
0290 04E2 ldi R16,36
0292 28DF rcall _halSpiWriteReg
0294 .dbline 387
0294 ; halSpiWriteReg(CCxxx0_FSCAL1, rfSettings.FSCAL1);
0294 E0E0 ldi R30,<_rfSettings+23
0296 F0E0 ldi R31,>_rfSettings+23
0298 2491 lpm R18,Z
029A 05E2 ldi R16,37
029C 23DF rcall _halSpiWriteReg
029E .dbline 388
029E ; halSpiWriteReg(CCxxx0_FSCAL0, rfSettings.FSCAL0);
029E E0E0 ldi R30,<_rfSettings+24
02A0 F0E0 ldi R31,>_rfSettings+24
02A2 2491 lpm R18,Z
02A4 06E2 ldi R16,38
02A6 1EDF rcall _halSpiWriteReg
02A8 .dbline 389
02A8 ; halSpiWriteReg(CCxxx0_FSTEST, rfSettings.FSTEST);
02A8 E0E0 ldi R30,<_rfSettings+25
02AA F0E0 ldi R31,>_rfSettings+25
02AC 2491 lpm R18,Z
02AE 09E2 ldi R16,41
02B0 19DF rcall _halSpiWriteReg
02B2 .dbline 390
02B2 ; halSpiWriteReg(CCxxx0_TEST2, rfSettings.TEST2);
02B2 E0E0 ldi R30,<_rfSettings+26
02B4 F0E0 ldi R31,>_rfSettings+26
02B6 2491 lpm R18,Z
02B8 0CE2 ldi R16,44
02BA 14DF rcall _halSpiWriteReg
02BC .dbline 391
02BC ; halSpiWriteReg(CCxxx0_TEST1, rfSettings.TEST1);
02BC E0E0 ldi R30,<_rfSettings+27
02BE F0E0 ldi R31,>_rfSettings+27
02C0 2491 lpm R18,Z
02C2 0DE2 ldi R16,45
02C4 0FDF rcall _halSpiWriteReg
02C6 .dbline 392
02C6 ; halSpiWriteReg(CCxxx0_TEST0, rfSettings.TEST0);
02C6 E0E0 ldi R30,<_rfSettings+28
02C8 F0E0 ldi R31,>_rfSettings+28
02CA 2491 lpm R18,Z
02CC 0EE2 ldi R16,46
02CE 0ADF rcall _halSpiWriteReg
02D0 .dbline 393
02D0 ; halSpiWriteReg(CCxxx0_IOCFG2, rfSettings.IOCFG2);
02D0 E0E0 ldi R30,<_rfSettings+29
02D2 F0E0 ldi R31,>_rfSettings+29
02D4 2491 lpm R18,Z
02D6 0027 clr R16
02D8 05DF rcall _halSpiWriteReg
02DA .dbline 394
02DA ; halSpiWriteReg(CCxxx0_IOCFG0, rfSettings.IOCFG0);
02DA E0E0 ldi R30,<_rfSettings+30
02DC F0E0 ldi R31,>_rfSettings+30
02DE 2491 lpm R18,Z
02E0 02E0 ldi R16,2
02E2 00DF rcall _halSpiWriteReg
02E4 .dbline 395
02E4 ; halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
02E4 E0E0 ldi R30,<_rfSettings+31
02E6 F0E0 ldi R31,>_rfSettings+31
02E8 2491 lpm R18,Z
02EA 07E0 ldi R16,7
02EC FBDE rcall _halSpiWriteReg
02EE .dbline 396
02EE ; halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
02EE E0E0 ldi R30,<_rfSettings+32
02F0 F0E0 ldi R31,>_rfSettings+32
02F2 2491 lpm R18,Z
02F4 08E0 ldi R16,8
02F6 F6DE rcall _halSpiWriteReg
02F8 .dbline 397
02F8 ; halSpiWriteReg(CCxxx0_ADDR, rfSettings.ADDR);
02F8 E0E0 ldi R30,<_rfSettings+33
02FA F0E0 ldi R31,>_rfSettings+33
02FC 2491 lpm R18,Z
02FE 09E0 ldi R16,9
0300 F1DE rcall _halSpiWriteReg
0302 .dbline 398
0302 ; halSpiWriteReg(CCxxx0_PKTLEN, rfSettings.PKTLEN);
0302 E0E0 ldi R30,<_rfSettings+34
0304 F0E0 ldi R31,>_rfSettings+34
0306 2491 lpm R18,Z
0308 06E0 ldi R16,6
030A ECDE rcall _halSpiWriteReg
030C .dbline -2
030C L66:
030C .dbline 0 ; func end
030C 0895 ret
030E .dbend
030E .dbfunc e halRfSendPacket _halRfSendPacket fV
030E ; size -> R22
030E ; txBuffer -> R20,R21
.even
030E _halRfSendPacket::
030E 00D0 rcall push_gset2
0310 622F mov R22,R18
0312 A801 movw R20,R16
0314 2197 sbiw R28,1
0316 .dbline -1
0316 .dbline 413
0316 ; }
0316 ;
0316 ;
0316 ;
0316 ;
0316 ;
0316 ;
0316 ; //*****************************************************************************************
0316 ; //函数名:
0316 ; //输入:
0316 ; //输出:
0316 ; //功能描述:CC1100发送主叫数据
0316 ; //*****************************************************************************************
0316 ; void halRfSendPacket(INT8U *txBuffer, INT8U size)
0316 ; {
0316 .dbline 415
0316 ;
0316 ; halSpiWriteReg(CCxxx0_TXFIFO, size+2);
0316 262F mov R18,R22
0318 2E5F subi R18,254 ; addi 2
031A 0FE3 ldi R16,63
031C E3DE rcall _halSpiWriteReg
031E .dbline 416
031E ; halSpiWriteReg(CCxxx0_TXFIFO, ID_Opponent);
031E 20EF ldi R18,240
0320 0FE3 ldi R16,63
0322 E0DE rcall _halSpiWriteReg
0324 .dbline 417
0324 ; halSpiWriteReg(CCxxx0_TXFIFO, ID_Oneself);
0324 20EF ldi R18,240
0326 0FE3 ldi R16,63
0328 DDDE rcall _halSpiWriteReg
032A .dbline 419
032A ;
032A ; halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
032A 6883 std y+0,R22
032C 9A01 movw R18,R20
032E 0FE3 ldi R16,63
0330 E6DE rcall _halSpiWriteBurstReg
0332 .dbline 422
0332 ;
0332 ;
0332 ; halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
0332 05E3 ldi R16,53
0334 FCDE rcall _halSpiStrobe
0336 L102:
0336 .dbline 425
0336 L103:
0336 .dbline 425
0336 ;
0336 ; // Wait for GDO0 to be set - > sync transmitted
0336 ; while (!GDO0);
0336 20B2 in R2,0x10
0338 2220 tst R2
033A 19F4 brne L105
033C 41E0 ldi R20,1
033E 50E0 ldi R21,0
0340 02C0 rjmp L106
0342 L105:
0342 4427 clr R20
0344 5527 clr R21
0346 L106:
0346 42FD sbrc R20,2
0348 F6CF rjmp L102
034A L107:
034A .dbline 428
034A L108:
034A .dbline 428
034A ;
034A ; // Wait for GDO0 to be set - > sync transmitted
034A ; while (GDO0);
034A 8299 sbic 0x10,2
034C FECF rjmp L107
034E .dbline 430
034E ;
034E ; halSpiStrobe(CCxxx0_SFTX); //清洗发送缓冲区
034E 0BE3 ldi R16,59
0350 EEDE rcall _halSpiStrobe
0352 .dbline -2
0352 L101:
0352 2196 adiw R28,1
0354 00D0 rcall pop_gset2
0356 .dbline 0 ; func end
0356 0895 ret
0358 .dbsym r size 22 c
0358 .dbsym r txBuffer 20 pc
0358 .dbend