static void registerConfig(void) { uint8 writeByte; uint16 i; #ifdef PA_TABLE uint8 paTable[] = PA_TABLE; #endif // reset radio trxSpiCmdStrobe(CC110L_SRES); // write registers to radio for(i = 0; i < (sizeof preferredSettings/sizeof(registerSetting_t)); i++) { writeByte = preferredSettings[i].data; cc11xLSpiWriteReg( preferredSettings[i].addr, &writeByte, 1); } #ifdef PA_TABLE // write PA_TABLE cc11xLSpiWriteReg(CC11xL_PA_TABLE0,paTable, sizeof(paTable)); #endif }
/****************************************************************************** * @fn perCC115LSetOutputPower * * @brief Configures the output power of CC11xL according to the provided * index: * 0 = -30 dBm * 1 = 10 dBm * 2 = -20 dBm * 3 = -15 dBm * 4 = -10 dBm * 5 = 0 dBm * 6 = 5 dBm * 7 = 7 dBm * * * input parameters * * @param index - index to power table <=> wanted output level * * output parameters * * @return void */ void perCC115LSetOutputPower(uint8 index) { uint8 level; switch(perSettings.frequencyBand) { case 0: level = per315MHzPowerTable[index]; break; case 1: level = per434MHzPowerTable[index]; break; case 2: level = per868MHzPowerTable[index]; break; case 3: level = per915MHzPowerTable[index]; break; default: level = per868MHzPowerTable[index]; break; } cc11xLSpiWriteReg(CC115L_PA_TABLE0,&level,1); return; }
/****************************************************************************** * @fn perCC115LRegConfig * * @brief Configures the CC115L radio with the selected SmartRF Studio * paramters and test properties or the base configuration * with no address check. Assumes that the radio is in IDLE. * * input parameters * * output parameters * * @return void */ void perCC115LRegConfig(void) { /* initialize radio registers given the selected perSettings */ uint8 data; /* Extract what radio configuration to use */ if(perSettings.masterSlaveLinked==PER_DEVICE_LINKED) { switch(perSettings.smartRfConfiguration) { case 0: for(uint16 i = 0; i < (sizeof cc115LlowDataRateRfSettings/sizeof(registerSetting_t));i++) { data = cc115LlowDataRateRfSettings[i].data; cc11xLSpiWriteReg(cc115LlowDataRateRfSettings[i].addr,&data,1); } break; case 1: for(uint16 i = 0; i < (sizeof cc115LmediumDataRateRfSettings/sizeof(registerSetting_t));i++) { data = cc115LmediumDataRateRfSettings[i].data; cc11xLSpiWriteReg(cc115LmediumDataRateRfSettings[i].addr,&data,1); } break; case 2: for(uint16 i = 0; i < (sizeof cc115LhighDataRateRfSettings/sizeof(registerSetting_t));i++) { data = cc115LhighDataRateRfSettings[i].data; cc11xLSpiWriteReg(cc115LhighDataRateRfSettings[i].addr,&data,1); } break; default: for(uint16 i = 0; i < (sizeof cc115LhighDataRateRfSettings/sizeof(registerSetting_t));i++) { data = cc115LhighDataRateRfSettings[i].data; cc11xLSpiWriteReg(cc115LhighDataRateRfSettings[i].addr,&data,1); } break; } /* add support for configuratos mode */ } else { for(uint16 i = 0; i < (sizeof cc115LmediumDataRateRfSettings/sizeof(registerSetting_t));i++) { data = cc115LmediumDataRateRfSettings[i].data; cc11xLSpiWriteReg(cc115LmediumDataRateRfSettings[i].addr,&data,1); } } /* Common settings for PER test regardless of radio configuration */ for(uint16 i = 0; i < (sizeof commonRfSettings/sizeof(registerSetting_t));i++) { data = commonRfSettings[i].data; cc11xLSpiWriteReg(commonRfSettings[i].addr,&data,1); } /* Differences from recommended studio values and values needed */ cc11xLSpiWriteReg(CC115L_MCSM1, CC115L_MCSMs,2); /* Correct for chosen frequency band */ cc11xLSpiWriteReg(CC115L_FREQ2, CC115L_FREQs[perSettings.frequencyBand],3); if(perSettings.masterSlaveLinked==PER_DEVICE_LINKED) { /* PKTLEN set to user specified packet length: HW length filtering */ cc11xLSpiWriteReg(CC115L_PKTLEN, &(perSettings.payloadLength),1); } else { /* length of configuration packet + filter byte */ data = PER_SETTINGS_PACKET_LEN; cc11xLSpiWriteReg(CC115L_PKTLEN, &data,1); } return; }