⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receive.lst

📁 cc1100的通信程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
__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 + -