CC2530设置发射功率

1.关于MAC_RADIO_TX_POWER_DEFAULT的值和功率的对应关系
mac_radio_defs.c
const uint8 CODE macRadioDefsTxPwrBare[] =
{
  3,  /* tramsmit power level of the first entry */
  (uint8)(int8)-22, /* transmit power level of the last entry */
  /*   3 dBm */   0xF5,   /* characterized as  4.5 dBm in datasheet */
  /*   2 dBm */   0xE5,   /* characterized as  2.5 dBm in datasheet */
  /*   1 dBm */   0xD5,   /* characterized as  1   dBm in datasheet */
  /*   0 dBm */   0xD5,   /* characterized as  1   dBm in datasheet */
  /*  -1 dBm */   0xC5,   /* characterized as -0.5 dBm in datasheet */
  /*  -2 dBm */   0xB5,   /* characterized as -1.5 dBm in datasheet */
  /*  -3 dBm */   0xA5,   /* characterized as -3   dBm in datasheet */
  /*  -4 dBm */   0x95,   /* characterized as -4   dBm in datasheet */
  /*  -5 dBm */   0x95,
  /*  -6 dBm */   0x85,   /* characterized as -6   dBm in datasheet */
  /*  -7 dBm */   0x85,
  /*  -8 dBm */   0x75,   /* characterized as -8   dBm in datasheet */
  /*  -9 dBm */   0x75,
  /* -10 dBm */   0x65,   /* characterized as -10  dBm in datasheet */
  /* -11 dBm */   0x65,
  /* -12 dBm */   0x55,   /* characterized as -12  dBm in datasheet */
  /* -13 dBm */   0x55,
  /* -14 dBm */   0x45,   /* characterized as -14  dBm in datasheet */
  /* -15 dBm */   0x45,
  /* -16 dBm */   0x35,   /* characterized as -16  dBm in datasheet */
  /* -17 dBm */   0x35,
  /* -18 dBm */   0x25,   /* characterized as -18  dBm in datasheet */
  /* -19 dBm */   0x25,
  /* -20 dBm */   0x15,   /* characterized as -20  dBm in datasheet */
  /* -21 dBm */   0x15,
  /* -22 dBm */   0x05    /* characterized as -22  dBm in datasheet */
};
#endif


2.在mac_radio.c中找到macRadioSetTxPower函数(设置功率函数),其具体内容复制如下:

#ifndef HAL_MAC_USE_REGISTER_POWER_VALUES


MAC_INTERNAL_API void macRadioSetTxPower(uint8 txPower)
{
  halIntState_t  s;
#if defined MAC_RUNTIME_CC2591 || defined MAC_RUNTIME_CC2590
  const uint8 CODE *pTable = macRadioDefsTxPwrTables[macRadioDefsRefTableId >> 4];
#elif defined HAL_PA_LNA || defined HAL_PA_LNA_CC2590
  const uint8 CODE *pTable = macRadioDefsTxPwrTables[0];
#else
  const uint8 CODE *pTable = macRadioDefsTxPwrBare;

  //该table中含有txPower的设置值,将该table的首地址赋给指针pTable,

  //macRadioDefsTxPwrBare[]定义在mac_radio_defs.c中
#endif

 
  if ((int8)txPower > (int8)pTable[MAC_RADIO_DEFS_TBL_TXPWR_FIRST_ENTRY])
  {
   
    txPower = pTable[MAC_RADIO_DEFS_TBL_TXPWR_FIRST_ENTRY];//发送功率上限值
  }
  else if ((int8)txPower < (int8)pTable[MAC_RADIO_DEFS_TBL_TXPWR_LAST_ENTRY])
  {
   
    txPower = pTable[MAC_RADIO_DEFS_TBL_TXPWR_LAST_ENTRY];//发送功率下限值
  }

 
  HAL_ENTER_CRITICAL_SECTION(s);
 
  {
    uint8 index = pTable[MAC_RADIO_DEFS_TBL_TXPWR_FIRST_ENTRY] - txPower
      + MAC_RADIO_DEFS_TBL_TXPWR_ENTRIES;

    reqTxPower = pTable[index];
  }

  //通过计算转换查表index,得到发送功率值,将其赋给reqTxPower,

  //函数macRadioUpdateTxPower中用于更新发送功率

  HAL_EXIT_CRITICAL_SECTION(s);

 
  macRadioUpdateTxPower();
}

#else


MAC_INTERNAL_API void macRadioSetTxPower(uint8 txPower)
{//直接获得reqTxPower
  halIntState_t  s;

 
  HAL_ENTER_CRITICAL_SECTION(s);
  reqTxPower = txPower;
  HAL_EXIT_CRITICAL_SECTION(s);

 
  macRadioUpdateTxPower();
}

 

下面了解一下macRadioUpdateTxPower函数,其函数体如下:


MAC_INTERNAL_API void macRadioUpdateTxPower(void)
{
  halIntState_t  s;

 
  HAL_ENTER_CRITICAL_SECTION(s);//进入临界区
  if (reqTxPower != macPhyTxPower)//macPhyTxPower即为当前实际的发送功率
  {
   
    if (!macRxOutgoingAckFlag && !MAC_TX_IS_PHYSICALLY_ACTIVE())

    //当有发送任务正在进行时,不能改变发送功率。

    //当前的发送任务完成后,将重新调用该函数进行发送功率设置。
    {
     
      macPhyTxPower = reqTxPower;
      MAC_RADIO_SET_TX_POWER(macPhyTxPower);//设置寄存器TXPOWER为macPhyTxPower,即reqTxPower
    }
  }
  HAL_EXIT_CRITICAL_SECTION(s);//离开临界区
}
3.默认的定义(mac_radio_defs.h)

#define MAC_RADIO_CHANNEL_DEFAULT               11  //2440HZ
#define MAC_RADIO_TX_POWER_DEFAULT              0x32  

4.对默认值的赋值操作(MAC_RADIO.C)

MAC_INTERNAL_API void macRadioInit(void)
{
  /* variable initialization for this module */
  reqChannel    = MAC_RADIO_CHANNEL_DEFAULT;
  macPhyChannel = MAC_RADIO_CHANNEL_DEFAULT;
  reqTxPower    = MAC_RADIO_TX_POWER_DEFAULT;
  macPhyTxPower = MAC_RADIO_TX_POWER_DEFAULT;
}

CC2530Datasheet中TXPOWER的描述




设置过程

#define MAC_RADIO_TX_POWER_DEFAULT              0x32


macPhyTxPower = MAC_RADIO_TX_POWER_DEFAULT;

MAC_RADIO_SET_TX_POWER(macPhyTxPower);


TI员工给的回复:

设置到0xF5就是最大的。(我的理解macRadioDefsTxPwrBare中对应的数据是TI经过测试后得到的经验值,一些特殊的值。取值的范围是7-bit,在0x05~0xF5之间的数据都是有意义的,0x32在-17~-18dbM之间)

最新版本的协议栈已经没有这个变量了。

功率的配置,一般在协议栈初始化的时候会赋值配置,如果程序里面有需要修改发射功率的话,也可以直接调用这个函数


参考:

http://www.deyisupport.com/question_answer/analog/wireless_connectivity/f/45/t/48856.aspx

http://www.verydemo.com/demo_c230_i56007.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值