cc1101的详解及单片机程序.docx

上传人:b****0 文档编号:9493165 上传时间:2023-05-19 格式:DOCX 页数:17 大小:20.01KB
下载 相关 举报
cc1101的详解及单片机程序.docx_第1页
第1页 / 共17页
cc1101的详解及单片机程序.docx_第2页
第2页 / 共17页
cc1101的详解及单片机程序.docx_第3页
第3页 / 共17页
cc1101的详解及单片机程序.docx_第4页
第4页 / 共17页
cc1101的详解及单片机程序.docx_第5页
第5页 / 共17页
cc1101的详解及单片机程序.docx_第6页
第6页 / 共17页
cc1101的详解及单片机程序.docx_第7页
第7页 / 共17页
cc1101的详解及单片机程序.docx_第8页
第8页 / 共17页
cc1101的详解及单片机程序.docx_第9页
第9页 / 共17页
cc1101的详解及单片机程序.docx_第10页
第10页 / 共17页
cc1101的详解及单片机程序.docx_第11页
第11页 / 共17页
cc1101的详解及单片机程序.docx_第12页
第12页 / 共17页
cc1101的详解及单片机程序.docx_第13页
第13页 / 共17页
cc1101的详解及单片机程序.docx_第14页
第14页 / 共17页
cc1101的详解及单片机程序.docx_第15页
第15页 / 共17页
cc1101的详解及单片机程序.docx_第16页
第16页 / 共17页
cc1101的详解及单片机程序.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

cc1101的详解及单片机程序.docx

《cc1101的详解及单片机程序.docx》由会员分享,可在线阅读,更多相关《cc1101的详解及单片机程序.docx(17页珍藏版)》请在冰点文库上搜索。

cc1101的详解及单片机程序.docx

cc1101的详解及单片机程序

cc1101的详解及单片机程序

1.初始化SPI,MCU各引脚。

 

当有数据接收或发送状态声明时,有中断和查询两种方式。

GDO0与GDO2引脚输出至MCU引脚,若要用中断则要接至MCU外部中断引脚,查询时则可用GPIO。

2.复位CC1101。

3.初始化CC1101。

(写操作时可从SO中读出CC1101状态)

初始化后CC1100为IDLE状态.

 

4.状态机转换,写/读FIFO数据。

每次写操作时SO返回的值为写操作前的CC1100状态值,具体值见Table20;读状态命令为当前CC1100状态值,具体值见寄存器0X35说明;注意两者区别。

快速认识Cc1100

Cc1100可以工作在同步模式下,代价是:

MCU自己控制前导码。

本系统中,Cc1100将工作在异步模式下。

知识点

HeadByte:

在引脚Cc1100.Csn有效后,通过SPI总线写入Cc1100的第一个字节。

StatusByte:

在写入HeadByte的同时,MCU得到StatusByte。

BurstBit:

在HeadByte中的一个Bit,有效值=="1",无效值=="0"

GDO0:

GDO0可用作FIFO状态输出,载波感应(CS),时钟输出,GDO0脚也能用作集成于芯片的模拟温度传感器(未用).配置寄存器为IOCFG0(0X02),现在配置为RX模式下数据状态反应输出.

GDO1:

GDO1与SPI的SO共用引脚,默认状态下为3态,当CSn为低电平时,此引脚SPI的SO功能生效。

配置寄存器为IOCFG0(0X01),现在配置为空闲状态下3态,SPI模式下SO.

GDO2:

GDO2可用作FIFO状态输出,载波感应(CS),时钟输出,配置寄存器为IOCFG0(0X00),现在配置为载波感应(CS)输出.

TXOFF_MODE/RXOFF_MODE:

注意,此配置为在数据包被发送/接收后状态机状态决定位,仅是在发生发送或者接收后动作;当为IDLE时发SRX/STX后状态机不按此配置运行。

TX/RX后要校准。

功率放大控制(PATABLE):

0X3E为功率写入地址,0X22为为功率配置寄存器。

PATABLE是一个8字节表,定义了8个PA功率值。

这个表从最低位(0)到最高位(7)可读和写,一次一位。

一个索引计数器用来控制对这个表的访问。

每读出或写入表中的一个字节,计数器就加1。

当CSn为高时,计数值置为最小值。

当达到最大值时,计数器由零重新开始计数。

 

FREND0.PA_POWER(2:

0)从8个功率值中选择1个,且振幅为相应数等级。

异步模式:

在此模式下,CC1101中的MCU的若干支持机制会停用,包括数据包硬件处理,FIFO缓冲,数据白化,交错(interleaver)和前向纠错(FEC),曼彻斯特编码(Manchesterencoding);

MSK不支持异步模式;

PKTCTRL0.PKT_FORMAT==3使能异步模式,GDO0为input,GDO0,GDO1或GDO2为output相应配置位为IOCFG0.GDO0_CFG,IOCFG1.GDO1_CFGIOCFG2.GDO2_CFG;

电磁波激活(WOR):

在WOR滤波使用之前RC振荡器必须启用,RC振荡器是WOR定时器的时钟源.在WOR下,收到信号后会自动进入RX模式.

载波感应(CS)与RSSI:

因此两配置相互有连系,所以一起论述.

RSSI只能在RX模式下才能有效,作用为对当前信号质量评估,信号质量可从RSSI寄存器读出.RSSI信号强度可从0X34取出.

RSSI(信号强度)计算公式:

注:

此为433M下,结果为负数,

RSSI_dBm=(RSSI-256)/2-74(RSSI>;=128)

RSSI_dBm=(RSSI/2)-74

(RSSI.

数据FIFO:

当TX操作时,由MCU控制,溢出时CC1101出错;当RX操作时,读空时CC1101出错

RXFIFO和TXFIFO中的字节数也能分别从状态寄存器RXBYTES.NUM_RXBYTES和TXBYTES.NUM_TXBYTES中读出

4位FIFOTHR.FIFO_THR设置用来控制FIFO门限点

读单字节时,,CSn继续保持低;。

突发访问方式允许一地址字节,然后是连续的数据字节,直到通过设置CSn为高来断访问

 

当写操作时,最后一个字节被传送至SI脚后,被SO脚接收的状态位会表明在TXFIFO中只有一个字节是空闲,

寄存器分类

ConfigrationRegisters

共47个,可读,可写

0x00~0x2E

StatusRegisters

共14个,只读

0x30~0x3D

CommandStrobe

共14个,只写

寻址空间:

0x30~0x3D

14个地址,对相应的地址进行写,

就相当于激活了对应的命令

本系统是用到的Strobe:

CC1100_STROBE_RESET

CC1100_STROBE_ENTER_RX_MODE

CC1100_STROBE_ENTER_TX_MODE

CC1100_COMMAND_STROBE_SIDLE

CC1100_COMMAND_STROBE_SFRX

TXFIFO

共64个,只写

RXFIFO

共64个,只读

Status(Command)Registers操作:

当地址为0X30~0X3D时

burst为1:

对StatusRegisters的操作

StatusRegisters只可读,且只能一次读一个字节,不可写

burst为0:

对CommandRegisters操作

寄存器的访问和一个寄存器的操作一样,但没有数据被传输.写完毕后,CC1100便执行相应操作.

读写FIFO,有两种模式:

单字节读写;Burst读写。

单字节读写时序:

1Cc1100.Csn有效。

2写入HeadByte。

3读、写一个1字节。

4Cc1100.Csn无效。

#include;

#include;

#defineINT8Uunsignedchar

#defineINT16Uunsignedint

#defineWRITE_BURST0x40//连续写入

#defineREAD_SINGLE0x80//读

#defineREAD_BURST0xC0//连续读

#defineBYTES_IN_RXFIFO0x7F//接收缓冲区的有效字节数

#defineCRC_OK0x80//CRC校验通过位标志

//*****************************************************************************************

sbitGDO0=P1^3;

sbitGDO2=P3^2;

sbitMISO=P1^6;

sbitMOSI=P1^5;

sbitSCK=P1^7;

sbitCSN=P1^2;

//*****************************************************************************************

sbitLED2=P3^4;

sbitLED1=P3^5;

sbitKEY1=P3^6;

sbitKEY2=P3^7;

//*****************************************************************************************

sbitled3=P2^3;

sbitled2=P2^2;

sbitled1=P2^1;

sbitled0=P2^0;

//*****************************************************************************************

//INT8UPaTabel[8]={0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60};

INT8UPaTabel[8]={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0};//修改发射功率

//*****************************************************************************************

voidSpiInit(void);

voidCpuInit(void);

voidRESET_CC1100(void);

voidPOWER_UP_RESET_CC1100(void);

voidhalSpiWriteReg(INT8Uaddr,INT8Uvalue);

voidhalSpiWriteBurstReg(INT8Uaddr,INT8U*buffer,INT8Ucount);

voidhalSpiStrobe(INT8Ustrobe);

INT8UhalSpiReadReg(INT8Uaddr);

voidhalSpiReadBurstReg(INT8Uaddr,INT8U*buffer,INT8Ucount);

INT8UhalSpiReadStatus(INT8Uaddr);

voidhalRfWriteRfSettings(void);

voidhalRfSendPacket(INT8U*txBuffer,INT8Usize);

INT8UhalRfReceivePacket(INT8U*rxBuffer,INT8U*length);

//*****************************************************************************************

//CC1100STROBE,CONTROLANDSTATUSREGSITER

#defineCCxxx0_IOCFG20x00//GDO2outputpinconfiguration

#defineCCxxx0_IOCFG10x01//GDO1outputpinconfiguration

#defineCCxxx0_IOCFG00x02//GDO0outputpinconfiguration

#defineCCxxx0_FIFOTHR0x03//RXFIFOandTXFIFOthresholds

#defineCCxxx0_SYNC10x04//Syncword,highINT8U

#defineCCxxx0_SYNC00x05//Syncword,lowINT8U

#defineCCxxx0_PKTLEN0x06//Packetlength

#defineCCxxx0_PKTCTRL10x07//Packetautomationcontrol

#defineCCxxx0_PKTCTRL00x08//Packetautomationcontrol

#defineCCxxx0_ADDR0x09//Deviceaddress

#defineCCxxx0_CHANNR0x0A//Channelnumber

#defineCCxxx0_FSCTRL10x0B//Frequencysynthesizercontrol

#defineCCxxx0_FSCTRL00x0C//Frequencysynthesizercontrol

#defineCCxxx0_FREQ20x0D//Frequencycontrolword,highINT8U

#defineCCxxx0_FREQ10x0E//Frequencycontrolword,middleINT8U

#defineCCxxx0_FREQ00x0F//Frequencycontrolword,lowINT8U

#defineCCxxx0_MDMCFG40x10//Modemconfiguration

#defineCCxxx0_MDMCFG30x11//Modemconfiguration

#defineCCxxx0_MDMCFG20x12//Modemconfiguration

#defineCCxxx0_MDMCFG10x13//Modemconfiguration

#defineCCxxx0_MDMCFG00x14//Modemconfiguration

#defineCCxxx0_DEVIATN0x15//Modemdeviationsetting

#defineCCxxx0_MCSM20x16//MainRadioControlStateMachineconfiguration

#defineCCxxx0_MCSM10x17//MainRadioControlStateMachineconfiguration

#defineCCxxx0_MCSM00x18//MainRadioControlStateMachineconfiguration

#defineCCxxx0_FOCCFG0x19//FrequencyOffsetCompensationconfiguration

#defineCCxxx0_BSCFG0x1A//BitSynchronizationconfiguration

#defineCCxxx0_AGCCTRL20x1B//AGCcontrol

#defineCCxxx0_AGCCTRL10x1C//AGCcontrol

#defineCCxxx0_AGCCTRL00x1D//AGCcontrol

#defineCCxxx0_WOREVT10x1E//HighINT8UEvent0timeout

#defineCCxxx0_WOREVT00x1F//LowINT8UEvent0timeout

#defineCCxxx0_WORCTRL0x20//WakeOnRadiocontrol

#defineCCxxx0_FREND10x21//FrontendRXconfiguration

#defineCCxxx0_FREND00x22//FrontendTXconfiguration

#defineCCxxx0_FSCAL30x23//Frequencysynthesizercalibration

#defineCCxxx0_FSCAL20x24//Frequencysynthesizercalibration

#defineCCxxx0_FSCAL10x25//Frequencysynthesizercalibration

#defineCCxxx0_FSCAL00x26//Frequencysynthesizercalibration

#defineCCxxx0_RCCTRL10x27//RCoscillatorconfiguration

#defineCCxxx0_RCCTRL00x28//RCoscillatorconfiguration

#defineCCxxx0_FSTEST0x29//Frequencysynthesizercalibrationcontrol

#defineCCxxx0_PTEST0x2A//Productiontest

#defineCCxxx0_AGCTEST0x2B//AGCtest

#defineCCxxx0_TEST20x2C//Varioustestsettings

#defineCCxxx0_TEST10x2D//Varioustestsettings

#defineCCxxx0_TEST00x2E//Varioustestsettings

//Strobecommands

#defineCCxxx0_SRES0x30//Resetchip.

#defineCCxxx0_SFSTXON0x31//Enableandcalibratefrequencysynthesizer(ifMCSM0.FS_AUTOCAL=1).

//IfinRX/TX:

Gotoawaitstatewhereonlythesynthesizeris

//running(forquickRX/TXturnaround).

#defineCCxxx0_SXOFF0x32//Turnoffcrystaloscillator.

#defineCCxxx0_SCAL0x33//Calibratefrequencysynthesizerandturnitoff

//(enablesquickstart).

#defineCCxxx0_SRX0x34//EnableRX.PerformcalibrationfirstifcomingfromIDLEand

//MCSM0.FS_AUTOCAL=1.

#defineCCxxx0_STX0x35//InIDLEstate:

EnableTX.Performcalibrationfirstif

//MCSM0.FS_AUTOCAL=1.IfinRXstateandCCAisenabled:

//OnlygotoTXifchannelisclear.

#defineCCxxx0_SIDLE0x36//ExitRX/TX,turnofffrequencysynthesizerandexit

//Wake-On-Radiomodeifapplicable.

#defineCCxxx0_SAFC0x37//PerformAFCadjustmentofthefrequencysynthesizer

#defineCCxxx0_SWOR0x38//StartautomaticRXpollingsequence(Wake-on-Radio)

#defineCCxxx0_SPWD0x39//EnterpowerdownmodewhenCSngoeshigh.

#defineCCxxx0_SFRX0x3A//FlushtheRXFIFObuffer.

#defineCCxxx0_SFTX0x3B//FlushtheTXFIFObuffer.

#defineCCxxx0_SWORRST0x3C//Resetrealtimeclock.

#defineCCxxx0_SNOP0x3D//Nooperation.Maybeusedtopadstrobecommandstotwo

//INT8Usforsimplersoftware.

#defineCCxxx0_PARTNUM0x30

#defineCCxxx0_VERSION0x31

#defineCCxxx0_FREQEST0x32

#defineCCxxx0_LQI0x33

#defineCCxxx0_RSSI0x34

#defineCCxxx0_MARCSTATE0x35

#defineCCxxx0_WORTIME10x36

#defineCCxxx0_WORTIME00x37

#defineCCxxx0_PKTSTATUS0x38

#defineCCxxx0_VCO_VC_DAC0x39

#defineCCxxx0_TXBYTES0x3A

#defineCCxxx0_RXBYTES0x3B

#defineCCxxx0_PATABLE0x3E

#defineCCxxx0_TXFIFO0x3F

#defineCCxxx0_RXFIFO0x3F

//RF_SETTINGSisadatastructurewhichcontainsallrelevantCCxxx0registers

typedefstructS_RF_SETTINGS

{

INT8UFSCTRL2;//自已加的

INT8UFSCTRL1;//Frequencysynthesizercontrol.

INT8UFSCTRL0;//Frequencysynthesizercontrol.

INT8UFREQ2;//Frequencycontrolword,highINT8U.

INT8UFREQ1;//Frequencycontrolword,middleINT8U.

INT8UFREQ0;//Frequencycontrolword,lowINT8U.

INT8UMDMCFG4;//Modemconfiguration.

INT8UMDMCFG3;//Modemconfiguration.

INT8UMDMCFG2;//Modemconfiguration.

INT8UMDMCFG1;//Modemconfiguration.

INT8UMDMCFG0;//Modemconfiguration.

INT8UCHANNR;//Channelnumber.

INT8UDEVIATN;//Modemdeviationsetting(whenFSKmodulationisenabled).

INT8UFREND1;//FrontendRXconfiguration.

INT8UFREND0;//FrontendRXconfiguration.

INT8UMCSM0;//MainRadioControlStateMachineconfiguration.

INT

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2