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就搞定了,不需要一個一個寫那麼複雜。