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