概述
- 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);//离开临界区
- }
- #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之间)
最新版本的协议栈已经没有这个变量了。
功率的配置,一般在协议栈初始化的时候会赋值配置,如果程序里面有需要修改发射功率的话,也可以直接调用这个函数
最后
以上就是丰富草丛为你收集整理的CC2530设置发射功率的全部内容,希望文章能够帮你解决CC2530设置发射功率所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复