📄 receive.lst
字号:
__text_start:
__start:
0029 E5CF LDI R28,0x5F
002A E0D4 LDI R29,4
002B BFCD OUT 0x3D,R28
002C BFDE OUT 0x3E,R29
002D 51C0 SUBI R28,0x10
002E 40D0 SBCI R29,0
002F EA0A LDI R16,0xAA
0030 8308 STD Y+0,R16
0031 2400 CLR R0
0032 E6E8 LDI R30,0x68
0033 E0F0 LDI R31,0
0034 E010 LDI R17,0
0035 39EE CPI R30,0x9E
0036 07F1 CPC R31,R17
0037 F011 BEQ 0x003A
0038 9201 ST R0,Z+
0039 CFFB RJMP 0x0035
003A 8300 STD Z+0,R16
003B E4E9 LDI R30,0x49
003C E0F0 LDI R31,0
003D E6A0 LDI R26,0x60
003E E0B0 LDI R27,0
003F E010 LDI R17,0
0040 35E1 CPI R30,0x51
0041 07F1 CPC R31,R17
0042 F021 BEQ 0x0047
0043 95C8 LPM
0044 9631 ADIW R30,1
0045 920D ST R0,X+
0046 CFF9 RJMP 0x0040
0047 D1AD RCALL _main
_exit:
0048 CFFF RJMP _exit
_delay:
i --> R20
s --> R16
0049 D22C RCALL push_gset1
FILE: E:\学习基地\IMPORT~1\CC1100-RF-Design\cc1100-design\Firmware\M8_cc1100_receive\cc1100.c
(0001) /*C**************************************************************************
(0002) * NAME: cc1100.c
(0003) *----------------------------------------------------------------------------
(0004) * Copyright (c) 2007 endylu
(0005) *----------------------------------------------------------------------------
(0006) * RELEASE: M8-cc1100
(0007) * REVISION: 1.0
(0008) *----------------------------------------------------------------------------
(0009) * PURPOSE:
(0010) * This file include cc1100 receive and send function
(0011) *****************************************************************************/
(0012)
(0013) /*_____ I N C L U D E S ____________________________________________________*/
(0014)
(0015) #include <iom8v.h>
(0016) #include <macros.h>
(0017) #include "main.h"
(0018) /*_____ M A C R O S ________________________________________________________*/
(0019)
(0020)
(0021) /*_____ D E F I N I T I O N ________________________________________________*/
(0022)
(0023)
(0024) //------------------------------------------------------------------------------------------------------
(0025) // Chipcon
(0026) // Product = CC1100
(0027) // Chip version = E
(0028) // Crystal accuracy = 40 ppm
(0029) // X-tal frequency = 26 MHz
(0030) // RF output power = 0 dBm
(0031) // RX filterbandwidth = 540.000000 kHz
(0032) // Deviation = 0.000000
(0033) // Datarate = 250.000000 kbps
(0034) // Modulation = (7) MSK
(0035) // Manchester enable = (0) Manchester disabled
(0036) // RF Frequency = 433.000000 MHz
(0037) // Channel spacing = 199.951172 kHz
(0038) // Channel number = 0
(0039) // Optimization = Sensitivity
(0040) // Sync mode = (3) 30/32 sync word bits detected
(0041) // Format of RX/TX data = (0) Normal mode, use FIFOs for RX and TX
(0042) // CRC operation = (1) CRC calculation in TX and CRC check in RX enabled
(0043) // Forward Error Correction = (0) FEC disabled
(0044) // Length configuration = (1) Variable length packets, packet length configured by the first received byte after sync word.
(0045) // Packetlength = 255
(0046) // Preamble count = (2) 4 bytes
(0047) // Append status = 1
(0048) // Address check = (0) No address check
(0049) // FIFO autoflush = 0
(0050) // Device address = 0
(0051) // GDO0 signal selection = ( 6) Asserts when sync word has been sent / received, and de-asserts at the end of the packet
(0052) // GDO2 signal selection = (11) Serial Clock
(0053) const RF_SETTINGS rfSettings = {
(0054) 0x00,
(0055) 0x0B, // FSCTRL1 Frequency synthesizer control.
(0056) 0x00, // FSCTRL0 Frequency synthesizer control.
(0057) 0x10, // FREQ2 Frequency control word, high byte.
(0058) 0xA7, // FREQ1 Frequency control word, middle byte.
(0059) 0x62, // FREQ0 Frequency control word, low byte.
(0060) 0x2D, // MDMCFG4 Modem configuration.
(0061) 0x3B, // MDMCFG3 Modem configuration.
(0062) 0x73, // MDMCFG2 Modem configuration.
(0063) 0xa2, // MDMCFG1 Modem configuration.
(0064) 0xF8, // MDMCFG0 Modem configuration.
(0065)
(0066) 0x00, // CHANNR Channel number.
(0067) 0x00, // DEVIATN Modem deviation setting (when FSK modulation is enabled).
(0068) 0xB6, // FREND1 Front end RX configuration.
(0069) 0x10, // FREND0 Front end RX configuration.
(0070) 0x18, // MCSM0 Main Radio Control State Machine configuration.
(0071) 0x1D, // FOCCFG Frequency Offset Compensation Configuration.
(0072) 0x1C, // BSCFG Bit synchronization Configuration.
(0073) 0xC7, // AGCCTRL2 AGC control.
(0074) 0x00, // AGCCTRL1 AGC control.
(0075) 0xB2, // AGCCTRL0 AGC control.
(0076)
(0077) 0xEA, // FSCAL3 Frequency synthesizer calibration.
(0078) 0x0A, // FSCAL2 Frequency synthesizer calibration.
(0079) 0x00, // FSCAL1 Frequency synthesizer calibration.
(0080) 0x11, // FSCAL0 Frequency synthesizer calibration.
(0081) 0x59, // FSTEST Frequency synthesizer calibration.
(0082) 0x88, // TEST2 Various test settings.
(0083) 0x31, // TEST1 Various test settings.
(0084) 0x0B, // TEST0 Various test settings.
(0085) 0x06, //IOCFG2 GDO2 output pin configuration.
(0086) 0x06, // IOCFG0 GDO0 output pin configuration. Refer to SmartRF?Studio User Manual for detailed pseudo register explanation.
(0087)
(0088) 0x05, // PKTCTRL1 Packet automation control.
(0089) 0x45, // PKTCTRL0 Packet automation control.
(0090) ID_Oneself, // ADDR Device address.
(0091) 0xf0, // PKTLEN Packet length.
(0092) };
(0093)
(0094) /*_____ D E C L A R A T I O N ______________________________________________*/
(0095)
(0096)
(0097)
(0098) //*****************************************************************************************
(0099) //函数名:delay(unsigned int s)
(0100) //输入:时间
(0101) //输出:无
(0102) //功能描述:普通廷时
(0103) //*****************************************************************************************
(0104) void delay(unsigned int s)
(0105) {
(0106) unsigned int i;
(0107) for(i=0; i<s; i++);
004A 2744 CLR R20
004B 2755 CLR R21
004C C002 RJMP 0x004F
004D 5F4F SUBI R20,0xFF
004E 4F5F SBCI R21,0xFF
004F 1740 CP R20,R16
0050 0751 CPC R21,R17
0051 F3D8 BCS 0x004D
(0108) for(i=0; i<s; i++);
0052 2744 CLR R20
0053 2755 CLR R21
0054 C002 RJMP 0x0057
0055 5F4F SUBI R20,0xFF
0056 4F5F SBCI R21,0xFF
0057 1740 CP R20,R16
0058 0751 CPC R21,R17
0059 F3D8 BCS 0x0055
005A D21E RCALL pop_gset1
005B 9508 RET
(0109) }
(0110)
(0111)
(0112) void halWait(INT16U timeout) {
(0113) do {
(0114) _nop_();
_halWait:
timeout --> R16
005C 0000 NOP
(0115) _nop_();
005D 0000 NOP
(0116) _nop_();
005E 0000 NOP
(0117) _nop_();
005F 0000 NOP
(0118) _nop_();
0060 0000 NOP
(0119) _nop_();
0061 0000 NOP
(0120) _nop_();
0062 0000 NOP
(0121) _nop_();
0063 0000 NOP
(0122) _nop_();
0064 0000 NOP
(0123) _nop_();
0065 0000 NOP
(0124) _nop_();
0066 0000 NOP
(0125) _nop_();
0067 0000 NOP
(0126) _nop_();
0068 0000 NOP
(0127) _nop_();
0069 0000 NOP
(0128) _nop_();
006A 0000 NOP
(0129) } while (--timeout);
006B 01C8 MOVW R24,R16
006C 9701 SBIW R24,1
006D 018C MOVW R16,R24
006E 3000 CPI R16,0
006F 0701 CPC R16,R17
0070 F759 BNE 0x005C
0071 9508 RET
(0130) }
(0131)
(0132) /*****************************************************************************************
(0133) //函数名:UartInit()
(0134) //输入:无
(0135) //输出:无
(0136) //功能描述:串口初始化程序
(0137) /*****************************************************************************************/
(0138) void UartInit(void) //用232串口发数据到PC,收集数据
(0139) {
(0140) UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
_UartInit:
0072 E188 LDI R24,0x18
0073 B98A OUT 0x0A,R24
(0141) UBRRL= (F_osc/9600/16-1)%256;
0074 E28F LDI R24,0x2F
0075 B989 OUT 0x09,R24
(0142) UBRRH= (F_osc/9600/16-1)/256;
0076 2422 CLR R2
0077 BC20 OUT 0x20,R2
(0143) UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
0078 E886 LDI R24,0x86
0079 BD80 OUT 0x20,R24
007A 9508 RET
(0144) }
(0145)
(0146)
(0147) void SpiInit(void)
(0148) {
(0149) DDRB|=(1<<SPI_DO);
_SpiInit:
007B 9ABB SBI 0x17,3
(0150) DDRB|=(1<<SPI_Clock);
007C 9ABD SBI 0x17,5
(0151) DDRB|=(1<<Chip_Select);
007D 9ABA SBI 0x17,2
(0152)
(0153) PORTB|=(1<<SPI_DI);
007E 9AC4 SBI 0x18,4
(0154)
(0155)
(0156) CSN_0;
007F 98C2 CBI 0x18,2
(0157) SCK_0;
0080 98C5 CBI 0x18,5
(0158) CSN_1;
0081 9AC2 SBI 0x18,2
0082 9508 RET
(0159) }
(0160)
(0161) /*****************************************************************************************
(0162) //函数名:CpuInit()
(0163) //输入:无
(0164) //输出:无
(0165) //功能描述:SPI初始化程序
(0166) /*****************************************************************************************/
(0167) void CpuInit(void)
(0168) {
(0169) UartInit();
_CpuInit:
0083 DFEE RCALL _UartInit
(0170)
(0171) SpiInit();
0084 DFF6 RCALL _SpiInit
(0172) delay(5000);
0085 E808 LDI R16,0x88
0086 E113 LDI R17,0x13
0087 DFC1 RCALL _delay
0088 9508 RET
_SpiTxRxByte:
temp --> R20
i --> R22
dat --> R16
0089 D1EA RCALL push_gset2
(0173) }
(0174)
(0175) //*****************************************************************************************
(0176) //函数名:SpisendByte(INT8U dat)
(0177) //输入:发送的数据
(0178) //输出:无
(0179) //功能描述:SPI发送一个字节
(0180) //*****************************************************************************************
(0181) INT8U SpiTxRxByte(INT8U dat)
(0182) {
(0183) INT8U i,temp;
(0184) temp = 0;
008A 2744 CLR R20
(0185)
(0186) SCK_0;
008B 98C5 CBI 0x18,5
(0187) for(i=0; i<8; i++)
008C 2766 CLR R22
008D C011 RJMP 0x009F
(0188) {
(0189) if(dat & 0x80)
008E FF07 SBRS R16,7
008F C002 RJMP 0x0092
(0190) {
(0191) MOSI_1;
0090 9AC3 SBI 0x18,3
(0192) }
0091 C001 RJMP 0x0093
(0193) else MOSI_0;
0092 98C3 CBI 0x18,3
(0194) dat <<= 1;
0093 0F00 LSL R16
(0195)
(0196) SCK_1;
0094 9AC5 SBI 0x18,5
(0197) _nop_();
0095 0000 NOP
(0198) _nop_();
0096 0000 NOP
(0199)
(0200) temp <<= 1;
0097 0F44 LSL R20
(0201) if(MISO)temp++;
0098 9BB4 SBIS 0x16,4
0099 C001 RJMP 0x009B
009A 9543 INC R20
(0202) SCK_0;
009B 98C5 CBI 0x18,5
(0203) _nop_();
009C 0000 NOP
(0204) _nop_();
009D 0000 NOP
009E 9563 INC R22
009F 3068 CPI R22,0x8
00A0 F368 BCS 0x008E
(0205) }
(0206) return temp;
00A1 2F04 MOV R16,R20
00A2 D1C7 RCALL pop_gset2
00A3 9508 RET
(0207) }
(0208)
(0209) //*****************************************************************************************
(0210) //函数名:void RESET_CC1100(void)
(0211) //输入:无
(0212) //输出:无
(0213) //功能描述:复位CC1100
(0214) //*****************************************************************************************
(0215) void RESET_CC1100(void)
(0216) {
(0217) CSN_0;
_RESET_CC1100:
00A4 98C2 CBI 0x18,2
(0218) while (GDO0);
00A5 9982 SBIC 0x10,2
00A6 CFFE RJMP 0x00A5
(0219) SpiTxRxByte(CCxxx0_SRES); //写入复位命令
00A7 E300 LDI R16,0x30
00A8 DFE0 RCALL _SpiTxRxByte
(0220) while (GDO0);
00A9 9982 SBIC 0x10,2
00AA CFFE RJMP 0x00A9
(0221) CSN_1;
00AB 9AC2 SBI 0x18,2
00AC 9508 RET
(0222) }
(0223)
(0224) //*****************************************************************************************
(0225) //函数名:void POWER_UP_RESET_CC1100(void)
(0226) //输入:无
(0227) //输出:无
(0228) //功能描述:上电复位CC1100
(0229) //*****************************************************************************************
(0230) void POWER_UP_RESET_CC1100(void)
(0231) {
(0232) CSN_1;
_POWER_UP_RESET_CC1100:
00AD 9AC2 SBI 0x18,2
(0233) halWait(1);
00AE E001 LDI R16,1
00AF E010 LDI R17,0
00B0 DFAB RCALL _halWait
(0234) CSN_0;
00B1 98C2 CBI 0x18,2
(0235) halWait(1);
00B2 E001 LDI R16,1
00B3 E010 LDI R17,0
00B4 DFA7 RCALL _halWait
(0236) CSN_1;
00B5 9AC2 SBI 0x18,2
(0237) halWait(41);
00B6 E209 LDI R16,0x29
00B7 E010 LDI R17,0
00B8 DFA3 RCALL _halWait
(0238) RESET_CC1100(); //复位CC1100
00B9 DFEA RCALL _RESET_CC1100
00BA 9508 RET
_halSpiWriteReg:
value --> R20
addr --> R22
00BB D1B8 RCALL push_gset2
00BC 2F42 MOV R20,R18
00BD 2F60 MOV R22,R16
(0239) }
(0240)
(0241) //*****************************************************************************************
(0242) //函数名:void halSpiWriteReg(INT8U addr, INT8U value)
(0243) //输入:地址和配置字
(0244) //输出:无
(0245) //功能描述:SPI写寄存器
(0246) //*****************************************************************************************
(0247) void halSpiWriteReg(INT8U addr, INT8U value)
(0248) {
(0249) CSN_0;
00BE 98C2 CBI 0x18,2
(0250) while (GDO0);
00BF 9982 SBIC 0x10,2
00C0 CFFE RJMP 0x00BF
(0251) SpiTxRxByte(addr); //写地址
00C1 2F06 MOV R16,R22
00C2 DFC6 RCALL _SpiTxRxByte
(0252) SpiTxRxByte(value); //写入配置
00C3 2F04 MOV R16,R20
00C4 DFC4 RCALL _SpiTxRxByte
(0253) CSN_1;
00C5 9AC2 SBI 0x18,2
00C6 D1A3 RCALL pop_gset2
00C7 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -