GRFC (generic rf control)

来源:互联网 发布:淘宝上库克运动是真么 编辑:程序博客网 时间:2024/05/01 14:17

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相关的结构体如下

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

typedef enum{  RFC_MSM_RF_PATH_SEL_00,  RFC_MSM_RF_PATH_SEL_01,  RFC_MSM_RF_PATH_SEL_02,  RFC_MSM_RF_PATH_SEL_03,  RFC_MSM_RF_PATH_SEL_04,  RFC_MSM_RF_PATH_SEL_05,  RFC_MSM_RF_PATH_SEL_06,  RFC_MSM_RF_PATH_SEL_07,  RFC_MSM_RF_PATH_SEL_08,  RFC_MSM_RF_PATH_SEL_09,
................................  RFC_MSM_SIG_NUM,  RFC_MSM_SIG_INVALID = 0xFFFFFFFF,}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

rfc_signal_info_type rfc_wtr4905_om_sig_info[RFC_WTR4905_OM_SIG_NUM + 1] = {  { RFC_MSM_TIMING_PA_CTL                   , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_OM_TIMING_PA_CTL */   { RFC_MSM_TIMING_PA_RANGE                 , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_OM_TIMING_PA_RANGE */   { RFC_MSM_TIMING_ASM_CTL                  , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_OM_TIMING_ASM_CTL */   { RFC_MSM_TIMING_PAPM_CTL                 , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_OM_TIMING_PAPM_CTL */   { 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 */   { 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中

typedef enum{  RFC_WTR4905_OM_TIMING_PA_CTL,  RFC_WTR4905_OM_TIMING_PA_RANGE,  RFC_WTR4905_OM_TIMING_ASM_CTL,  RFC_WTR4905_OM_TIMING_PAPM_CTL,  RFC_WTR4905_OM_TIMING_TX_TX_RF_ON0,  RFC_WTR4905_OM_TIMING_TX_RX_RF_ON0,  RFC_WTR4905_OM_TIMING_ASM_TRIGGER,  RFC_WTR4905_OM_TIMING_PAPM_TX_TX_TRIGGER,  RFC_WTR4905_OM_TIMING_PAPM_OFF_TX_RX_TX_TRIGGER,  RFC_WTR4905_OM_TIMING_PA_TRIGGER,  RFC_WTR4905_OM_TIMING_PAPM_OFF_TX_RX_TX_CTL,  RFC_WTR4905_OM_TIMING_PAPM_TX_TX_CTL,  RFC_WTR4905_OM_RF_PATH_SEL_01,
....................................}wtr4905_om_sig_type;

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

rfc_sig_info_type rf_card_wtr4905_om_tx0_lte_b4_sig_cfg = {  RFC_ENCODED_REVISION,   {    { (int)RFC_WTR4905_OM_PA0_R0_ALT1,   { RFC_CONFIG_ONLY, 0 }, {RFC_LOW, 0 }  },    { (int)RFC_WTR4905_OM_PA0_R1_ALT1,   { RFC_CONFIG_ONLY, 0 }, {RFC_LOW, 0 }  },    { (int)RFC_SIG_LIST_END,   { RFC_LOW, 0 }, {RFC_LOW, 0 } }  },};


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

rfc_common_initrfc_msm_signals_num=rfc_msm_sig_info_table_get(&rfc_msm_signal_info_table);*msm_info_table = &rfc_msm8952_signal_info[0];  //这里用来获取我们设置好的MSM_GPIOfor (i = 0; (i < rfc_signals_num) && (api_status == TRUE) ; i++)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>
 //msm_sig_name是RF_MSM相关的enum结构体,下边用它来找到对应rfc_msm8952_signal_info中实际的gpio管脚,并配置rfc_common_set_grfc(rfc_msm_signal_info_table[msm_signal].grfc_num, rfc_signal_info_table[i].init_state);//用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

0 0
原创粉丝点击