CC2530设置发射功率

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


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

[csharp]  view plain copy
  1. #ifndef HAL_MAC_USE_REGISTER_POWER_VALUES  
  2.   
  3.   
  4. MAC_INTERNAL_API void macRadioSetTxPower(uint8 txPower)  
  5. {  
  6.   halIntState_t  s;  
  7. #if defined MAC_RUNTIME_CC2591 || defined MAC_RUNTIME_CC2590  
  8.   const uint8 CODE *pTable = macRadioDefsTxPwrTables[macRadioDefsRefTableId >> 4];  
  9. #elif defined HAL_PA_LNA || defined HAL_PA_LNA_CC2590  
  10.   const uint8 CODE *pTable = macRadioDefsTxPwrTables[0];  
  11. #else  
  12.   const uint8 CODE *pTable = macRadioDefsTxPwrBare;  
  13.   
  14.   //该table中含有txPower的设置值,将该table的首地址赋给指针pTable,  
  15.   
  16.   //macRadioDefsTxPwrBare[]定义在mac_radio_defs.c中  
  17. #endif  
  18.   
  19.    
  20.   if ((int8)txPower > (int8)pTable[MAC_RADIO_DEFS_TBL_TXPWR_FIRST_ENTRY])  
  21.   {  
  22.      
  23.     txPower = pTable[MAC_RADIO_DEFS_TBL_TXPWR_FIRST_ENTRY];//发送功率上限值  
  24.   }  
  25.   else if ((int8)txPower < (int8)pTable[MAC_RADIO_DEFS_TBL_TXPWR_LAST_ENTRY])  
  26.   {  
  27.      
  28.     txPower = pTable[MAC_RADIO_DEFS_TBL_TXPWR_LAST_ENTRY];//发送功率下限值  
  29.   }  
  30.   
  31.    
  32.   HAL_ENTER_CRITICAL_SECTION(s);  
  33.    
  34.   {  
  35.     uint8 index = pTable[MAC_RADIO_DEFS_TBL_TXPWR_FIRST_ENTRY] - txPower  
  36.       + MAC_RADIO_DEFS_TBL_TXPWR_ENTRIES;  
  37.   
  38.     reqTxPower = pTable[index];  
  39.   }  
  40.   
  41.   //通过计算转换查表index,得到发送功率值,将其赋给reqTxPower,  
  42.   
  43.   //函数macRadioUpdateTxPower中用于更新发送功率  
  44.   
  45.   HAL_EXIT_CRITICAL_SECTION(s);  
  46.   
  47.    
  48.   macRadioUpdateTxPower();  
  49. }  
  50.  
  51. #else  
  52.   
  53.   
  54. MAC_INTERNAL_API void macRadioSetTxPower(uint8 txPower)  
  55. {//直接获得reqTxPower  
  56.   halIntState_t  s;  
  57.   
  58.    
  59.   HAL_ENTER_CRITICAL_SECTION(s);  
  60.   reqTxPower = txPower;  
  61.   HAL_EXIT_CRITICAL_SECTION(s);  
  62.   
  63.    
  64.   macRadioUpdateTxPower();  
  65. }  
  66.   
  67.    
  68.   
  69. 下面了解一下macRadioUpdateTxPower函数,其函数体如下:  
  70.   
  71.   
  72. MAC_INTERNAL_API void macRadioUpdateTxPower(void)  
  73. {  
  74.   halIntState_t  s;  
  75.   
  76.    
  77.   HAL_ENTER_CRITICAL_SECTION(s);//进入临界区  
  78.   if (reqTxPower != macPhyTxPower)//macPhyTxPower即为当前实际的发送功率  
  79.   {  
  80.      
  81.     if (!macRxOutgoingAckFlag && !MAC_TX_IS_PHYSICALLY_ACTIVE())  
  82.   
  83.     //当有发送任务正在进行时,不能改变发送功率。  
  84.   
  85.     //当前的发送任务完成后,将重新调用该函数进行发送功率设置。  
  86.     {  
  87.        
  88.       macPhyTxPower = reqTxPower;  
  89.       MAC_RADIO_SET_TX_POWER(macPhyTxPower);//设置寄存器TXPOWER为macPhyTxPower,即reqTxPower  
  90.     }  
  91.   }  
  92.   HAL_EXIT_CRITICAL_SECTION(s);//离开临界区  
  93. }  
[csharp]  view plain copy
  1.   
3.默认的定义(mac_radio_defs.h)
[csharp]  view plain copy
  1. #define MAC_RADIO_CHANNEL_DEFAULT               11  //2440HZ  
  2. #define MAC_RADIO_TX_POWER_DEFAULT              0x32    

4.对默认值的赋值操作(MAC_RADIO.C)
[csharp]  view plain copy
  1. MAC_INTERNAL_API void macRadioInit(void)  
  2. {  
  3.   /* variable initialization for this module */  
  4.   reqChannel    = MAC_RADIO_CHANNEL_DEFAULT;  
  5.   macPhyChannel = MAC_RADIO_CHANNEL_DEFAULT;  
  6.   reqTxPower    = MAC_RADIO_TX_POWER_DEFAULT;  
  7.   macPhyTxPower = MAC_RADIO_TX_POWER_DEFAULT;  
  8. }  

CC2530Datasheet中TXPOWER的描述

CC2530设置发射功率_第1张图片

CC2530设置发射功率_第2张图片


设置过程

#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之间)

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

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

你可能感兴趣的:(ZigBee)