/**************************************************************** *FUNCTION NAME:SendData *FUNCTION :use CC1101 send data *INPUT :txBuffer: data array to send; size: number of data to send, no more than 61 *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::SendData(byte *txBuffer,byte size) { SpiWriteReg(CC1101_TXFIFO,size); SpiWriteBurstReg(CC1101_TXFIFO,txBuffer,size); //write data to send SpiStrobe(CC1101_STX); //start send while (!digitalRead(GDO0)); // Wait for GDO0 to be set -> sync transmitted while (digitalRead(GDO0)); // Wait for GDO0 to be cleared -> end of packet SpiStrobe(CC1101_SFTX); //flush TXfifo }
/******************************************************************************* * Description : 47 reg * Syntax : * Parameters I: * Parameters O: * return : *******************************************************************************/ static void CC1101_regSetting(void) { uint8_t i = 0; for(i=0; i<47; i++) { SpiWriteReg(CC1101_regConfigTab[i][0], // command CC1101_regConfigTab[i][1]); // value } /* read reg check */ SpiWriteStrobe(SCAL); delayMs(30); SpiWriteStrobe(SIDLE); }
/******************************************************************************* * Description : * Syntax : * Parameters I: * Parameters O: * return : *******************************************************************************/ static void CC1101_setTxPower(uint8_t value) { SpiWriteReg(FREND0, value); }
/**************************************************************** *FUNCTION NAME:RegConfigSettings *FUNCTION :CC1101 register config //details refer datasheet of CC1101/CC1100// *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::RegConfigSettings(void) { SpiWriteReg(CC1101_FSCTRL1, 0x08); SpiWriteReg(CC1101_FSCTRL0, 0x00); SpiWriteReg(CC1101_FREQ2, 0x10); SpiWriteReg(CC1101_FREQ1, 0xA7); SpiWriteReg(CC1101_FREQ0, 0x62); SpiWriteReg(CC1101_MDMCFG4, 0x5B); SpiWriteReg(CC1101_MDMCFG3, 0xF8); SpiWriteReg(CC1101_MDMCFG2, 0x03); SpiWriteReg(CC1101_MDMCFG1, 0x22); SpiWriteReg(CC1101_MDMCFG0, 0xF8); SpiWriteReg(CC1101_CHANNR, 0x00); SpiWriteReg(CC1101_DEVIATN, 0x47); SpiWriteReg(CC1101_FREND1, 0xB6); SpiWriteReg(CC1101_FREND0, 0x10); SpiWriteReg(CC1101_MCSM0 , 0x18); SpiWriteReg(CC1101_FOCCFG, 0x1D); SpiWriteReg(CC1101_BSCFG, 0x1C); SpiWriteReg(CC1101_AGCCTRL2, 0xC7); SpiWriteReg(CC1101_AGCCTRL1, 0x00); SpiWriteReg(CC1101_AGCCTRL0, 0xB2); SpiWriteReg(CC1101_FSCAL3, 0xEA); SpiWriteReg(CC1101_FSCAL2, 0x2A); SpiWriteReg(CC1101_FSCAL1, 0x00); SpiWriteReg(CC1101_FSCAL0, 0x11); SpiWriteReg(CC1101_FSTEST, 0x59); SpiWriteReg(CC1101_TEST2, 0x81); SpiWriteReg(CC1101_TEST1, 0x35); SpiWriteReg(CC1101_TEST0, 0x09); SpiWriteReg(CC1101_IOCFG2, 0x0B); //serial clock.synchronous to the data in synchronous serial mode SpiWriteReg(CC1101_IOCFG0, 0x06); //asserts when sync word has been sent/received, and de-asserts at the end of the packet SpiWriteReg(CC1101_PKTCTRL1, 0x04); //two status bytes will be appended to the payload of the packet,including RSSI LQI and CRC OK //No address check SpiWriteReg(CC1101_PKTCTRL0, 0x05); //whitening off;CRC Enable£»variable length packets, packet length configured by the first byte after sync word SpiWriteReg(CC1101_ADDR, 0x00); //address used for packet filtration. SpiWriteReg(CC1101_PKTLEN, 0x3D); //61 bytes max length }