GRFC (generic rf control)

来源:互联网 发布:mssql数据库备份分离 编辑:程序博客网 时间:2024/05/22 09:46


GRFC (generic rf control)


1 gpio的配置(结构体)

关于GRFC相关的很重要的四个文件,下边笔记会说到他们的作用:


\modem_proc\rfc_jolokia\target\mdm9609\src\Rfc_msm_signal_info_ag.c

\modem_proc\rfc_jolokia\target\mdm9609\src\Rfc_msm_signal_info_ag.h

\modem_proc\rfc_jolokia\rf_card\rfc_wtr4905_om\common\src\Rfc_wtr4905_om_cmn_ag.cpp

\modem_proc\rfc_jolokia\rf_card\rfc_wtr4905_om\common\inc\Rfc_wtr4905_om_cmn_ag.h


Rfc_msm_signal_info_ag.c的中跟MSM_RF_GPIO相关的结构体如下

[cpp] view plain copy
  1. rfc_msm_signal_info_type rfc_mdm9609_signal_info[RFC_MSM_SIG_NUM] =   
  2. {  
  3.   {  RFC_ANT_SEL          ,  75 ,  1  ,  RFC_GRFC       ,  1,  DAL_GPIO_OUTPUT           },  /* Signal: RFC_MSM_RF_PATH_SEL_00, MSM Pin Name: GPIO_75*/  
  4.   {  RFC_ANT_SEL          ,  74 ,  0  ,  RFC_GRFC       ,  1,  DAL_GPIO_OUTPUT           },  /* Signal: RFC_MSM_RF_PATH_SEL_01, MSM Pin Name: GPIO_74*/  
  5.   {  RFC_ANT_SEL          ,  76 ,  2  ,  RFC_GRFC       ,  1,  DAL_GPIO_OUTPUT           },  /* Signal: RFC_MSM_RF_PATH_SEL_02, MSM Pin Name: GPIO_76*/  
  6.   {  RFC_ANT_SEL                         ,  79              ,  5              ,  RFC_GRFC       ,  1,  DAL_GPIO_OUTPUT                      },  /* Signal: RFC_MSM_RF_PATH_SEL_03, MSM Pin Name: GPIO_79*/  
  7.   {  RFC_ANT_SEL                         ,  78              ,  4              ,  RFC_GRFC       ,  1,  DAL_GPIO_OUTPUT                      },  /* Signal: RFC_MSM_RF_PATH_SEL_04, MSM Pin Name: GPIO_78*/  
  8.   {  RFC_ANT_SEL                         ,  93              ,  19             ,  RFC_GRFC       ,  1,  DAL_GPIO_OUTPUT                      },  /* Signal: RFC_MSM_RF_PATH_SEL_05, MSM Pin Name: GPIO_93*/  
  9.   {  RFC_ANT_SEL                         ,  83              ,  9              ,  RFC_GRFC       ,  1,  DAL_GPIO_OUTPUT                      },  /* Signal: RFC_MSM_RF_PATH_SEL_06, MSM Pin Name: GPIO_83*/  
  10.   {  RFC_ANT_SEL                         ,  85              ,  11             ,  RFC_GRFC       ,  1,  DAL_GPIO_OUTPUT                      },  /* Signal: RFC_MSM_RF_PATH_SEL_07, MSM Pin Name: GPIO_85*/  
  11.   {  RFC_ANT_SEL                         ,  89              ,  15             ,  RFC_GRFC       ,  1,  DAL_GPIO_OUTPUT                      },  /* Signal: RFC_MSM_RF_PATH_SEL_08, MSM Pin Name: GPIO_89*/  
  12.   {  RFC_ANT_SEL                         ,  92              ,  18             ,  RFC_GRFC       ,  1,  DAL_GPIO_OUTPUT                      },  /* Signal: RFC_MSM_RF_PATH_SEL_09, MSM Pin Name: GPIO_92*/  
  13.   {  RFC_ANT_SEL                         ,  80              ,  6              ,  RFC_GRFC       ,  1,  DAL_GPIO_OUTPUT                      },  /* Signal: RFC_MSM_RF_PATH_SEL_10, MSM Pin Name: GPIO_80*/  
  14.   {  RFC_ANT_SEL                         ,  88              ,  14             ,  RFC_GRFC       ,  1,  DAL_GPIO_OUTPUT                      },  /* Signal: RFC_MSM_RF_PATH_SEL_11, MSM Pin Name: GPIO_88*/  
  15.   {  RFC_ANT_SEL                         ,  91              ,  17             ,  RFC_GRFC       ,  1,  DAL_GPIO_OUTPUT                      },  /* Signal: RFC_MSM_RF_PATH_SEL_12, MSM Pin Name: GPIO_91*/  
[cpp] view plain copy
  1. ...............................................  
相关的gpio的配置必须在这个结构体里加一项,但是如何找到某个作用的gpio呢,当然使用enum项了,代码如下  在Rfc_msm_signal_info_ag.h中

[cpp] view plain copy
  1. typedef enum  
  2. {  
  3.   RFC_MSM_RF_PATH_SEL_00,  
  4.   RFC_MSM_RF_PATH_SEL_01,  
  5.   RFC_MSM_RF_PATH_SEL_02,  
  6.   RFC_MSM_RF_PATH_SEL_03,  
  7.   RFC_MSM_RF_PATH_SEL_04,  
  8.   RFC_MSM_RF_PATH_SEL_05,  
  9.   RFC_MSM_RF_PATH_SEL_06,  
  10.   RFC_MSM_RF_PATH_SEL_07,  
  11.   RFC_MSM_RF_PATH_SEL_08,  
  12.   RFC_MSM_RF_PATH_SEL_09,  
[cpp] view plain copy
  1. ................................  
  2.   RFC_MSM_SIG_NUM,  
  3.   RFC_MSM_SIG_INVALID = 0xFFFFFFFF,  
  4. }rfc_msm_signal_type  
比如使用到  {  RFC_ANT_SEL ,  75 ,  1      ,  RFC_GRFC       ,  1,  DAL_GPIO_OUTPUT           }, 这一项的时候,rfc_mdm9609_signal_info[RFC_MSM_RF_PATH_SEL_00]这种格式就可以很轻松的找到它来配置gpio了,下边的调用过程一节就是使用此方法


RFC_MAM相关的gpio(上图中),在代码中的结构体为rfc_mdm9609_signal_info

MSM所有的gpio(上图左)

RF_CARD 相关的gpio(上图右),代表某款RF card使用到的gpio,比如结构体rfc_wtr4905_om_sig_info

RFC_MSM_gpio是总的MSM_gpio的一部分, 但是在相关的RF_CARD_GPIO用到的是GPIO_MSM的一部分

配置wtr4905 RF card的gpio的文件为Rfc_wtr4905_om_cmn_ag.cpp

[cpp] view plain copy
  1. rfc_signal_info_type rfc_wtr4905_om_sig_info[RFC_WTR4905_OM_SIG_NUM + 1] =   
  2. {  
  3.   { RFC_MSM_TIMING_PA_CTL                   , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_OM_TIMING_PA_CTL */   
  4.   { RFC_MSM_TIMING_PA_RANGE                 , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_OM_TIMING_PA_RANGE */   
  5.   { RFC_MSM_TIMING_ASM_CTL                  , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_OM_TIMING_ASM_CTL */   
  6.   { RFC_MSM_TIMING_PAPM_CTL                 , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_OM_TIMING_PAPM_CTL */   
  7.   { RFC_MSM_TIMING_TX_TX_RF_ON0             , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_OM_TIMING_TX_TX_RF_ON0 */   
  8.   { RFC_MSM_TIMING_TX_RX_RF_ON0             , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_OM_TIMING_TX_RX_RF_ON0 */   

第一排如RFC_MSM_TIMING_PA_CTL来自于rfc_msm_signal_type的enum结构体中,通过RFC_MSM_TIMING_PA_CTL就能在rfc_mdm9609_signal_info中找到对应gpio(必须有对应项),这样就能跟某个gpio相关联。

如果想在rfc_wtr4905_om_sig_info中定位某个成员,要通过enum变量:     在Rfc_wtr4905_om_cmn_ag.h中

[cpp] view plain copy
  1. typedef enum  
  2. {  
  3.   RFC_WTR4905_OM_TIMING_PA_CTL,  
  4.   RFC_WTR4905_OM_TIMING_PA_RANGE,  
  5.   RFC_WTR4905_OM_TIMING_ASM_CTL,  
  6.   RFC_WTR4905_OM_TIMING_PAPM_CTL,  
  7.   RFC_WTR4905_OM_TIMING_TX_TX_RF_ON0,  
  8.   RFC_WTR4905_OM_TIMING_TX_RX_RF_ON0,  
  9.   RFC_WTR4905_OM_TIMING_ASM_TRIGGER,  
  10.   RFC_WTR4905_OM_TIMING_PAPM_TX_TX_TRIGGER,  
  11.   RFC_WTR4905_OM_TIMING_PAPM_OFF_TX_RX_TX_TRIGGER,  
  12.   RFC_WTR4905_OM_TIMING_PA_TRIGGER,  
  13.   RFC_WTR4905_OM_TIMING_PAPM_OFF_TX_RX_TX_CTL,  
  14.   RFC_WTR4905_OM_TIMING_PAPM_TX_TX_CTL,  
  15.   RFC_WTR4905_OM_RF_PATH_SEL_01,  
[cpp] view plain copy
  1. ....................................  
  2. }wtr4905_om_sig_type;  

定义gpio初始化端口电平时会用到以上enum(如下代码),通过以上的对应关心就能找到对应的gpio管脚

[cpp] view plain copy
  1. rfc_sig_info_type rf_card_wtr4905_om_tx0_lte_b4_sig_cfg =   
  2. {  
  3.   RFC_ENCODED_REVISION,   
  4.   {  
  5.     { (int)RFC_WTR4905_OM_PA0_R0_ALT1,   { RFC_CONFIG_ONLY, 0 }, {RFC_LOW, 0 }  },  
  6.     { (int)RFC_WTR4905_OM_PA0_R1_ALT1,   { RFC_CONFIG_ONLY, 0 }, {RFC_LOW, 0 }  },  
  7.     { (int)RFC_SIG_LIST_END,   { RFC_LOW, 0 }, {RFC_LOW, 0 } }  
  8.   },  
  9. };  


2 调用过程分析,过程中就会用到通过enum定位rfc_mdm9609_signal_info和rfc_wtr4905_om_sig_info的方法(用到enum的原因)

[cpp] view plain copy
  1. rfc_common_init  
  2.     rfc_msm_signals_num=rfc_msm_sig_info_table_get(&rfc_msm_signal_info_table);  
  3.         *msm_info_table = &rfc_msm8952_signal_info[0];  //这里用来获取我们设置好的MSM_GPIO  
  4.     for (i = 0; (i < rfc_signals_num) && (api_status == TRUE) ; i++)  
  5.         msm_signal = rfc_signal_info_table[i].msm_sig_name;     //这里的rfc_signal_info_table就是我们RF card相关的<span style="font-family: Arial, Helvetica, sans-serif;">rfc_wtr4905_om_sig_info</span>  
[cpp] view plain copy
  1. //msm_sig_name是RF_MSM相关的enum结构体,下边用它来找到对应rfc_msm8952_signal_info中实际的gpio管脚,并配置  
  2. ommon_set_grfc(rfc_msm_signal_info_table[msm_signal].grfc_num, rfc_signal_info_table[i].init_state);  
  3. //用msm_sig_name找到对应rfc_msm8952_signal_info中实际的gpio管脚配置,并设置管脚  

两者联系的核心是msm_sig_name,即enum  rfc_msm_signal_type


3 添加一个RF GPIO的流程如图






相关参考文档在我上传的文件中可以找到:GENERIC RF CONTROLS (GRFC) CUSTOMIZATION.pdf


原著:http://blog.csdn.net/sq336/article/details/47298137

原创粉丝点击