现在的位置: 首页 > 综合 > 正文

从零开始学习CC1101开发之路(三)

2012年10月13日 ⁄ 综合 ⁄ 共 1839字 ⁄ 字号 评论关闭

CC1101的寄存器初始化,是在CC1101工作这前必须做的一件事情,最主要初始化的三个参数是频率,速率,功率。最好是以结构体的方式初始化,否则当你改动速率或者频率或者功率的时候,你还要改变其他几个相关的寄存器,这样做就比较麻烦,我当初的做法是:利用SmartRF,把我需要的频率431,433,435,我需要的速率1.2K,2.4K,4.8K,10K......等等全部配置一边,然后利用截图截下SmartRF的值,然后利用这么一个结构体:

typedef struct
{
 u8  IOCFG2;
 u8  IOCFG1;
 u8  IOCFG0;
 u8  FIFOTHR;
 u8  SYNC1;
 u8  SYNC0;
 u8  PKTLEN;
 u8  PKTCTRL1;
 u8  PKTCTRL0;
 u8  ADDR;
 u8  CHANNR;
 u8  FSCTRL1;
 u8  FSCTRL0;
 u8  FREQ2;
 u8  FREQ1;
 u8  FREQ0;
 u8  MDMCFG4;
 u8  MDMCFG3;
 u8  MDMCFG2;
 u8  MDMCFG1;
 u8  MDMCFG0;
 u8  DEVAITN;
 u8  MCSM2;
 u8  MCSM1;
 u8  MCSM0;
 u8  FOCCFG;
 u8  BSCFG;
 u8  AGCCTRL2;
 u8  AGCCTRL1;
 u8  AGCCTRL0;
 u8  WOREVT1;
 u8  WOREVT0;
 u8  WORCTRL;
 u8  FREND1;
 u8  FREND0;
 u8  FSCAL3;
 u8  FSCAL2;
 u8  FSCAL1;
 u8  FSCAL0;
 u8  RCCTRL1;
 u8  RCCTRL0;
 u8  FSTEST;
 u8  PTEST;
 u8  AGCTEST;
 u8  TEST2;
 u8  TEST1;
 u8  TEST0;  
}Struct_RF_Reg;

做初始化

#if RF_BAUD_RATE == 2400

Struct_RF_Reg  My_RF_Config = {
 0x0B, // IOCFG2
 0x2E, // IOCFG1
 0x01, // IOCFG0
 0x07, // FIFOTHR
 0xB3, // SYNC1
 0x9C, // SYNC0
 0x40, // PKTLEN
 0x0C, // PKTCTRL1
 0x45, // PKTCTRL0
 0x00, // ADDR
 0x00, // CHANNR
 0x06, // FSCTRL1
 0x00, // FSCTRL0
#if RF_FREQUENCY == 431
 0x10, // FREQ2
 0x93, // FREQ1
 0xB1, // FREQ0
#elif RF_FREQUENCY == 433
 0x10, // FREQ2
 0xA7, // FREQ1
 0x62, // FREQ0
#elif RF_FREQUENCY == 435
 0X10,
 0XBB,
 0X13,
#endif
 0xF6, // MDMCFG4
 0x83, // MDMCFG3
 0x13, // MDMCFG2
 0x22, // MDMCFG1
 0xF8, // MDMCFG0
 0x15, // DEVIATN
 0x07, // MCSM2
 0x3C, // MCSM1
 0x18, // MCSM0
 0x16, // FOCCFG
 0x6C, // BSCFG
 0x03, // AGCCTRL2
 0x40, // AGCCTRL1
 0x91, // AGCCTRL0
 0x87, // WOREVT1
 0x6B, // WOREVT0
 0xFB, // WORCTRL
 0x56, // FREND1
 0x10, // FREND0
 0xE9, // FSCAL3
 0x2A, // FSCAL2
 0x00, // FSCAL1
 0x1F, // FSCAL0
 0x41, // RCCTRL1
 0x00, // RCCTRL0
 0x59, // FSTEST
 0x7F, // PTEST
 0x3F, // AGCTEST
 0x81, // TEST2
 0x35, // TEST1
 0x09 // TEST0
};

当然我这里只例举了2.4k的速率,其他只要改变宏定义就可以了。

最后调用一个

TI_CC_SPIWriteBurstReg(TI_CCxxx0_IOCFG2, &(RFConfig -> IOCFG2), 47);

函数就把47个寄存器都写进去了,因为这47个寄存器地址都是递增的,所以写个Burst就搞定了,不需要一个一个写那么复杂。

抱歉!评论已关闭.