SuperIC社区_
标题: 快速换台设频点失败问题 [打印本页]
作者: halleyhuang 时间: 2016-7-5 12:11
标题: 快速换台设频点失败问题
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;
}
作者: bean.yang 时间: 2016-7-15 12:38
多多分享
作者: xuludestiny 时间: 2016-7-21 16:14
感谢分享
欢迎光临 SuperIC社区_ (/) |
Powered by Discuz! X3.3 |