Beispiel #1
0
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;
}