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就搞定了,不需要一个一个写那么复杂。