CC1100 无线模块(弹簧天线)

[复制链接]
1857|0
 楼主| wang321 发表于 2008-7-22 14:14 | 显示全部楼层 |阅读模式
该模块采用CC1100是一种低成本真正单片的UHF收发器,为低功耗无线应用而设计。电路主要设定为在315、433、868和915MHz的ISM(工业,科学和医学)和SRD(短距离设备)频率波段,也可以容易地设置为300-348&nbsp;MHz、400-464&nbsp;MHz和800-928&nbsp;MHz的其他频率。RF收发器集成了一个高度可配置的调制解调器。这个调制解调器支持不同的调制格式,其数据传输率可达500kbps。通过开启集成在调制解调器上的前向误差校正选项,能使性能得到提升。CC1100为数据包处理、数据缓冲、突发数据传输、清晰信道评估、连接质量指示和电磁波激发提供广泛的硬件支持。CC1100的主要操作参数和64位传输/接收FIFO(先进先出堆栈)可通过SPI接口控制。在一个典型系统里,。CC1100基于0.18微米CMOS晶体的Chipcon的SmartRF04技术。<br /><br />AVR程序:<br /><br />/*****************************************************************************************<br />//函数名:UartInit()<br />//输入:无<br />//输出:无<br />//功能描述:串口初始化程序<br />/*****************************************************************************************/<br />void&nbsp;UartInit(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用232串口发数据到PC,收集数据<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;UCSRB=(1&lt&ltRXEN)|(1&lt&ltTXEN);//允许发送和接收<br />&nbsp;&nbsp;&nbsp;&nbsp;UBRRL=&nbsp;(F_osc/9600/16-1)%256;<br />&nbsp;&nbsp;&nbsp;&nbsp;UBRRH=&nbsp;(F_osc/9600/16-1)/256;<br />&nbsp;&nbsp;&nbsp;&nbsp;UCSRC=(1&lt&ltURSEL)|(1&lt&ltUCSZ1)|(1&lt&ltUCSZ0);//8位数据+1位STOP位<br />&nbsp;&nbsp;}<br /><br /><br />void&nbsp;SpiInit(void)<br />{<br />&nbsp;DDRB|=(1&lt&ltSPI_DO);<br />&nbsp;DDRB|=(1&lt&ltSPI_Clock);<br />&nbsp;DDRB|=(1&lt&ltChip_Select);<br />&nbsp;<br />&nbsp;PORTB|=(1&lt&ltSPI_DI);<br />&nbsp;<br />&nbsp;<br />&nbsp;CSN_0;<br />&nbsp;SCK_0;<br />&nbsp;CSN_1;<br />}<br /><br />/*****************************************************************************************<br />//函数名:CpuInit()<br />//输入:无<br />//输出:无<br />//功能描述:SPI初始化程序<br />/*****************************************************************************************/<br />void&nbsp;CpuInit(void)<br />{<br />&nbsp;&nbsp;UartInit();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;SpiInit();<br />&nbsp;&nbsp;delay(5000);<br />}<br />&nbsp;<br />//*****************************************************************************************<br />//函数名:SpisendByte(INT8U&nbsp;dat)<br />//输入:发送的数据<br />//输出:无<br />//功能描述:SPI发送一个字节<br />//*****************************************************************************************<br />INT8U&nbsp;SpiTxRxByte(INT8U&nbsp;dat)<br />{<br />&nbsp;INT8U&nbsp;i,temp;<br />&nbsp;temp&nbsp;=&nbsp;0;<br />&nbsp;<br />&nbsp;SCK_0;<br />&nbsp;for(i=0;&nbsp;i&lt8;&nbsp;i++)<br />&nbsp;{<br />&nbsp;&nbsp;if(dat&nbsp;&&nbsp;0x80)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;MOSI_1;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;else&nbsp;MOSI_0;<br />&nbsp;&nbsp;dat&nbsp;&lt&lt=&nbsp;1;<br /><br />&nbsp;&nbsp;SCK_1;<br />&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;_nop_();<br /><br />&nbsp;&nbsp;temp&nbsp;&lt&lt=&nbsp;1;<br />&nbsp;&nbsp;if(MISO)temp++;<br />&nbsp;&nbsp;SCK_0;<br />&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;_nop_();&nbsp;<br />&nbsp;}<br />&nbsp;return&nbsp;temp;<br />}<br /><br />//*****************************************************************************************<br />//函数名:void&nbsp;RESET_CC1100(void)<br />//输入:无<br />//输出:无<br />//功能描述:复位CC1100<br />//*****************************************************************************************<br />void&nbsp;RESET_CC1100(void)<br />{<br />&nbsp;CSN_0;<br />&nbsp;while&nbsp;(GDO0);<br />&nbsp;SpiTxRxByte(CCxxx0_SRES);&nbsp;&nbsp;&nbsp;//写入复位命令<br />&nbsp;while&nbsp;(GDO0);<br />&nbsp;CSN_1;<br />}<br /><br />//*****************************************************************************************<br />//函数名:void&nbsp;POWER_UP_RESET_CC1100(void)<br />//输入:无<br />//输出:无<br />//功能描述:上电复位CC1100<br />//*****************************************************************************************<br />void&nbsp;POWER_UP_RESET_CC1100(void)<br />{<br />&nbsp;CSN_1;<br />&nbsp;halWait(1);<br />&nbsp;CSN_0;<br />&nbsp;halWait(1);<br />&nbsp;CSN_1;<br />&nbsp;halWait(41);<br />&nbsp;RESET_CC1100();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//复位CC1100<br />}<br /><br />//*****************************************************************************************<br />//函数名:void&nbsp;halSpiWriteReg(INT8U&nbsp;addr,&nbsp;INT8U&nbsp;value)<br />//输入:地址和配置字<br />//输出:无<br />//功能描述:SPI写寄存器<br />//*****************************************************************************************<br />void&nbsp;halSpiWriteReg(INT8U&nbsp;addr,&nbsp;INT8U&nbsp;value)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CSN_0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(GDO0);<br />&nbsp;&nbsp;&nbsp;&nbsp;SpiTxRxByte(addr);&nbsp;&nbsp;//写地址<br />&nbsp;&nbsp;&nbsp;&nbsp;SpiTxRxByte(value);&nbsp;&nbsp;//写入配置<br />&nbsp;&nbsp;&nbsp;&nbsp;CSN_1;<br />}<br /><br />//*****************************************************************************************<br />//函数名:void&nbsp;halSpiWriteBurstReg(INT8U&nbsp;addr,&nbsp;INT8U&nbsp;*buffer,&nbsp;INT8U&nbsp;count)<br />//输入:地址,写入缓冲区,写入个数<br />//输出:无<br />//功能描述:SPI连续写配置寄存器<br />//*****************************************************************************************<br />void&nbsp;halSpiWriteBurstReg(INT8U&nbsp;addr,&nbsp;INT8U&nbsp;*buffer,&nbsp;INT8U&nbsp;count)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;i,&nbsp;temp;<br />&nbsp;temp&nbsp;=&nbsp;addr&nbsp;|&nbsp;WRITE_BURST;<br />&nbsp;&nbsp;&nbsp;&nbsp;CSN_0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(GDO0);<br />&nbsp;&nbsp;&nbsp;&nbsp;SpiTxRxByte(temp);<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;count;&nbsp;i++)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpiTxRxByte(buffer);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;CSN_1;<br />}<br /><br />//*****************************************************************************************<br />//函数名:void&nbsp;halSpiStrobe(INT8U&nbsp;strobe)<br />//输入:命令<br />//输出:无<br />//功能描述:SPI写命令<br />//*****************************************************************************************<br />void&nbsp;halSpiStrobe(INT8U&nbsp;strobe)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CSN_0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(GDO0);<br />&nbsp;&nbsp;&nbsp;&nbsp;SpiTxRxByte(strobe);&nbsp;&nbsp;//写入命令<br />&nbsp;&nbsp;&nbsp;&nbsp;CSN_1;<br />}<br /><br />&nbsp;<br /><br />&nbsp;<br /><br />//*****************************************************************************************<br />//函数名:INT8U&nbsp;halSpiReadReg(INT8U&nbsp;addr)<br />//输入:地址<br />//输出:该寄存器的配置字<br />//功能描述:SPI读寄存器<br />//*****************************************************************************************<br />INT8U&nbsp;halSpiReadReg(INT8U&nbsp;addr)<br />{<br />&nbsp;INT8U&nbsp;temp,&nbsp;value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;addr|READ_SINGLE;//读寄存器命令<br />&nbsp;CSN_0;<br />&nbsp;while&nbsp;(GDO0);<br />&nbsp;SpiTxRxByte(temp);<br />&nbsp;value&nbsp;=&nbsp;SpiTxRxByte(0);<br />&nbsp;CSN_1;<br />&nbsp;return&nbsp;value;<br />}<br /><br /><br />//*****************************************************************************************<br />//函数名:void&nbsp;halSpiReadBurstReg(INT8U&nbsp;addr,&nbsp;INT8U&nbsp;*buffer,&nbsp;INT8U&nbsp;count)<br />//输入:地址,读出数据后暂存的缓冲区,读出配置个数<br />//输出:无<br />//功能描述:SPI连续写配置寄存器<br />//*****************************************************************************************<br />void&nbsp;halSpiReadBurstReg(INT8U&nbsp;addr,&nbsp;INT8U&nbsp;*buffer,&nbsp;INT8U&nbsp;count)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;i,temp;<br />&nbsp;temp&nbsp;=&nbsp;addr&nbsp;|&nbsp;READ_BURST;&nbsp;&nbsp;//写入要读的配置寄存器地址和读命令<br />&nbsp;&nbsp;&nbsp;&nbsp;CSN_0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(GDO0);<br />&nbsp;SpiTxRxByte(temp);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;count;&nbsp;i++)<br />&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer&nbsp;=&nbsp;SpiTxRxByte(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;CSN_1;<br />}<br /><br /><br />//*****************************************************************************************<br />//函数名:INT8U&nbsp;halSpiReadReg(INT8U&nbsp;addr)<br />//输入:地址<br />//输出:该状态寄存器当前值<br />//功能描述:SPI读状态寄存器<br />//*****************************************************************************************<br />INT8U&nbsp;halSpiReadStatus(INT8U&nbsp;addr)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;value,temp;<br />&nbsp;temp&nbsp;=&nbsp;addr&nbsp;|&nbsp;READ_BURST;&nbsp;&nbsp;//写入要读的状态寄存器的地址同时写入读命令<br />&nbsp;&nbsp;&nbsp;&nbsp;CSN_0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(GDO0);<br />&nbsp;&nbsp;&nbsp;&nbsp;SpiTxRxByte(temp);<br />&nbsp;value&nbsp;=&nbsp;SpiTxRxByte(0);<br />&nbsp;CSN_1;<br />&nbsp;return&nbsp;value;<br />}<br /><br /><br />//*****************************************************************************************<br />//函数名:void&nbsp;halRfWriteRfSettings(RF_SETTINGS&nbsp;*pRfSettings)<br />//输入:无<br />//输出:无<br />//功能描述:配置CC1100的寄存器<br />//*****************************************************************************************<br />void&nbsp;halRfWriteRfSettings(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;//halSpiWriteReg(CCxxx0_FIFOTHR,0x09);<br />&nbsp;&nbsp;&nbsp;&nbsp;//halSpiWriteReg(CCxxx0_MCSM1,0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//CCA,没有作通<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_FSCTRL0,&nbsp;&nbsp;rfSettings.FSCTRL2);//自已加的<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Write&nbsp;register&nbsp;settings<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_FSCTRL1,&nbsp;&nbsp;rfSettings.FSCTRL1);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_FSCTRL0,&nbsp;&nbsp;rfSettings.FSCTRL0);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_FREQ2,&nbsp;&nbsp;&nbsp;&nbsp;rfSettings.FREQ2);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_FREQ1,&nbsp;&nbsp;&nbsp;&nbsp;rfSettings.FREQ1);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_FREQ0,&nbsp;&nbsp;&nbsp;&nbsp;rfSettings.FREQ0);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_MDMCFG4,&nbsp;&nbsp;rfSettings.MDMCFG4);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_MDMCFG3,&nbsp;&nbsp;rfSettings.MDMCFG3);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_MDMCFG2,&nbsp;&nbsp;rfSettings.MDMCFG2);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_MDMCFG1,&nbsp;&nbsp;rfSettings.MDMCFG1);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_MDMCFG0,&nbsp;&nbsp;rfSettings.MDMCFG0);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_CHANNR,&nbsp;&nbsp;&nbsp;rfSettings.CHANNR);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_FSCAL0,&nbsp;&nbsp;&nbsp;rfSettings.FSCAL0);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_FSTEST,&nbsp;&nbsp;&nbsp;rfSettings.FSTEST);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_TEST2,&nbsp;&nbsp;&nbsp;&nbsp;rfSettings.TEST2);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_TEST1,&nbsp;&nbsp;&nbsp;&nbsp;rfSettings.TEST1);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_TEST0,&nbsp;&nbsp;&nbsp;&nbsp;rfSettings.TEST0);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_IOCFG2,&nbsp;&nbsp;&nbsp;rfSettings.IOCFG2);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_IOCFG0,&nbsp;&nbsp;&nbsp;rfSettings.IOCFG0);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_PKTCTRL1,&nbsp;rfSettings.PKTCTRL1);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_PKTCTRL0,&nbsp;rfSettings.PKTCTRL0);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_ADDR,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rfSettings.ADDR);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_PKTLEN,&nbsp;&nbsp;&nbsp;rfSettings.PKTLEN);<br />}<br /><br />&nbsp;<br /><br />&nbsp;<br /><br /><br />//*****************************************************************************************<br />//函数名:<br />//输入:<br />//输出:<br />//功能描述:CC1100发送主叫数据<br />//*****************************************************************************************<br />void&nbsp;halRfSendPacket(INT8U&nbsp;*txBuffer,&nbsp;INT8U&nbsp;size)<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_TXFIFO,&nbsp;size+2);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_TXFIFO,&nbsp;ID_Opponent);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_TXFIFO,&nbsp;ID_Oneself);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteBurstReg(CCxxx0_TXFIFO,&nbsp;txBuffer,&nbsp;size);&nbsp;//写入要发送的数据<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiStrobe(CCxxx0_STX);&nbsp;&nbsp;//进入发送模式发送数据<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Wait&nbsp;for&nbsp;GDO0&nbsp;to&nbsp;be&nbsp;set&nbsp;-&nbsp;&gt&nbsp;sync&nbsp;transmitted<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!GDO0);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Wait&nbsp;for&nbsp;GDO0&nbsp;to&nbsp;be&nbsp;set&nbsp;-&nbsp;&gt&nbsp;sync&nbsp;transmitted<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(GDO0);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;halSpiStrobe(CCxxx0_SFTX);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清洗发送缓冲区<br />&nbsp;<br />}<br /><br /> 相关链接:<a href='http://auction1.taobao.com/auction/item_detail-0db2-f6ab401993e4825ab22c47438b30f5dd.jhtml'>http://auction1.taobao.com/auction/item_detail-0db2-f6ab401993e4825ab22c47438b30f5dd.jhtml</a>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

73

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部