搜索
 找回密码
 立即注册

简单一步 , 微信登陆

快速换台设频点失败问题

作者:halleyhuang | 时间:2016-7-5 12:11:13 | 阅读:4209| 只看该作者
   7833巴西ginga项目,客户反馈在信号读取界面换台,有概率导致信号丢失无法播放。   
   查看问题发现MxLWare608_API_CfgTunerChanTune有些寄存器没有设对,并且出现了IIC error。进一步分析发现设频点的过程概率被其他的定时器中断,而定时器又通过IIC读取信号强度和BER等信息,打乱了通信的正常时序。
   添加mutex机制把设频点和读取的函数保护起来,修改如下。多次测试没有再发现问题。
pthread_mutex_t m_mutexSetTune;
……
MS_BOOL MDrv_Tuner_Init(void)
{
    pthread_mutex_init(&m_mutexSetTune, NULL);
    if(MxL608_init_main() == 0)  //0 is success
……
}
MAPI_BOOL device_tuner_MXL608:TV_SetTune( double Freq, RF_CHANNEL_BANDWIDTH eBandWidth, EN_TUNER_MODE eMode)
{
    //UINT32 dwError=0;
    //MAPI_BOOL bLock;
    //if(InitTuner() == MAPI_FALSE)
    //{
    //  printf("mxl InitTuner error \n");
    //}
    pthread_mutex_lock(&m_mutexSetTune);
    DBG_TUNER(printf("[device_tuner_MXL_5007t] (%d): Connect\n",__LINE__));
    MXL608_BW_E MsBandWidth;
    switch(eBandWidth)
    {
        case E_RF_CH_BAND_6MHz:
        {
            MsBandWidth=MXL608_TERR_BW_6MHz;
        }
        break;
        case E_RF_CH_BAND_7MHz:
        {
            MsBandWidth=MXL608_TERR_BW_7MHz;
        }
        break;
        case E_RF_CH_BAND_8MHz:
        {
            MsBandWidth=MXL608_TERR_BW_8MHz;
        }
        break;
        default:
            MsBandWidth=MXL608_TERR_BW_8MHz;
    }
    if(MAPI_FALSE == MDrv_Tuner_SetTuner(Freq*1000,MsBandWidth))
    {
        DBG_TUNER(printf("\r\n SetTuner failed"));
        return MAPI_FALSE;
    }
    pthread_mutex_unlock(&m_mutexSetTune);
    return MAPI_TRUE;
}

收藏
收藏0
分享
分享
点赞
点赞1
反对
反对0
该会员没有填写今日想说内容.
回复

使用道具 举报

大神点评2

沙发#
bean.yang 发表于:2016-7-15 12:38:03
多多分享
回复

使用道具 举报

板凳#
xuludestiny 发表于:2016-7-21 16:14:21
感谢分享
把水灌满
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册
手机版