tv.c
来自「CS8955控制TV软件。用MCU做模拟电视的控制。」· C语言 代码 · 共 2,016 行 · 第 1/5 页
C
2,016 行
bData[1] = _sTunerPLL.wDB ;
// bData[2] = TUNER_CB1;
bData[2] = _sTunerPLL.bCB;
bData[3] = _sTunerPLL.bBB;
#endif
vTV_PLL_Write(bData);
bData[0] = IF_RESERVED;
#ifdef MARTIN_TEST_TV_IIC //29May08 test //PAL B/G 471.25M
bData[1] = 0x56;
bData[2] = 0x70;
bData[3] = 0x09;
#else
#if 0
bTvCurrSystem=(sTvCurrChannel.bSystem & 0x07);
bTvCurrSound=(sTvCurrChannel.bSystem & 0x38 )>>3;
bTvPllGate=0x00;
bTVSoundCarrier=bTvCurrSound; //Sound Default == setup menu
if((bTvCurrSystem == SV_NTSC)||(bTvCurrSystem == SV_PAL_M)||(bTvCurrSystem == SV_PAL_N))
{
if(bTvCurrSound != SV_MN)
{
bTvCurrSound=bTVSoundCarrier = SV_MN; //sound set MN,
sTvCurrChannel.bSystem &= 0xc7; //sound set MN,
}
}
if(bTvCurrSystem == SV_SECAM_L)
{
if(bTvCurrSound == SV_MN)
{
bTvPllGate=0x01;
bTvCurrPolarity=IF_SWITCH_SEACAM_L; //Positive
bTVSoundCarrier=SV_DK; //SEACAM L +DK
}
else
bTvCurrPolarity=IF_SWITCH_SEACAM_DK; //Negative
}
else if(bTvCurrSystem == SV_SECAM_L2)
{
if(bTvCurrSound == SV_MN)
{
bTvPllGate=0x01;
bTvCurrPolarity=IF_SWITCH_SEACAM_L1; //Positive
bTVSoundCarrier=SV_DK; //SEACAM L' +DK
}
else
bTvCurrPolarity=IF_SWITCH_SEACAM_L1_DK; //Negative
}
else
bTvCurrPolarity=IF_SWITCH_PAL; //Negative
if(bTvCurrSystem == SV_SECAM_L2)
bTvCurrIF=0x04; //33.9M
else
bTvCurrIF=0x02; //38.9M
bData[0] = IF_RESERVED;
bData[1] = bTvCurrPolarity;
bData[2] = IF_ADJUST_PAL;
bData[3] = (bTvPllGate<<6)| (bTvCurrIF <<2 ) | bTVSoundCarrier;
#else
if(bTempSystem ==SV_PAL)
{
bData[1] =IF_SWITCH_PAL;
bData[2] = IF_ADJUST_PAL;
if (bTvCurrSound==SV_BG) //TV_SOUND_BG
{
bData[3] = IF_DATA_PAL_BG; // BG
sTvCurrChannel.bSystem &= 0xc7;
sTvCurrChannel.bSystem |= 0x08; //17Jul08 seacam_l + sound_BG
}
else if (bTvCurrSound==SV_I) //TV_SOUND_I
{
bData[3] = IF_DATA_PAL_I; // I
}
else if (bTvCurrSound==SV_DK) //TV_SOUND_DK
{
bData[3] = IF_DATA_PAL_DK; // DK
}
else if (bTvCurrSound==SV_MN) //TV_SOUND_MN_L
{
bData[3] = IF_DATA_PAL_MN; // MN
}
}
else if(bTempSystem ==SV_NTSC)
{
bData[1] =IF_SWITCH_NTSC;
bData[2] = IF_ADJUST_NTSC;
#if 0
if (bTvCurrSound==TV_SOUND_BG)
{ bData[3] = IF_DATA_PAL_BG; // BG 12Sep08
}
else if (bTvCurrSound==TV_SOUND_I)
{
bData[3] = IF_DATA_PAL_I; // I 12Sep08
}
else if (bTvCurrSound==TV_SOUND_DK)
{
bData[3] = IF_DATA_PAL_DK; // DK 12Sep08
}
else if (bTvCurrSound==TV_SOUND_MN_L)
{
bData[3] = IF_DATA_NTSC_MN; // MN 12Sep08
}
else
#endif
bData[3] = IF_DATA_NTSC_MN;
bTvCurrSound=SV_MN;//TV_SOUND_MN_L;
sTvCurrChannel.bSystem &= 0xc7; //17Jul08 ntsc + sound_mn
}
else if(bTempSystem ==SV_PAL_M) //12Sep08
{
bData[1] =IF_SWITCH_PAL_M;
bData[2] = IF_ADJUST_PAL;
bData[3] = IF_DATA_PAL_MN;
bTvCurrSound=SV_MN; //TV_SOUND_MN_L;
sTvCurrChannel.bSystem &= 0xc7; //17Jul08 ntsc + sound_mn
}
else if(bTempSystem ==SV_PAL_N) //12Sep08
{
bData[1] =IF_SWITCH_PAL_N;
bData[2] = IF_ADJUST_PAL;
bData[3] = IF_DATA_PAL_MN;
bTvCurrSound=SV_MN;//TV_SOUND_MN_L;
sTvCurrChannel.bSystem &= 0xc7; //17Jul08 ntsc + sound_mn
}
else if(bTempSystem ==SV_SECAM_L)
{
bData[2] = IF_ADJUST_SEACAM;
if(bTvCurrSound ==SV_MN) //TV_SOUND_MN_L
{
bData[1] = IF_SWITCH_SEACAM_L;
bData[3] = IF_DATA_SEACAM_L;
sTvCurrChannel.bSystem &= 0xc7;
}
else if (bTvCurrSound==SV_BG) //TV_SOUND_BG
{
bData[1] =IF_SWITCH_SEACAM_DK;
bData[3] = IF_DATA_SEACAM_L_BG; // BG 12Sep08
}
else if (bTvCurrSound==SV_I) // == seacam L TV_SOUND_I
{
bData[1] =IF_SWITCH_SEACAM_DK;
bData[3] = IF_DATA_SEACAM_L_I; // I 12Sep08
}
else if (bTvCurrSound==SV_DK) //TV_SOUND_DK
{
bData[1] =IF_SWITCH_SEACAM_DK;
bData[3] = IF_DATA_SEACAM_L_DK; // DK 12Sep08
}
}
else if(bTempSystem ==SV_SECAM_L2)
{
bData[2] = IF_ADJUST_PAL;
if(bTvCurrSound ==SV_MN)
{
bData[1] = IF_SWITCH_SEACAM_L1;
bData[3] = IF_DATA_SEACAM_L1;
sTvCurrChannel.bSystem &= 0xc7;
}
else if (bTvCurrSound==SV_BG) //TV_SOUND_BG
{
bData[1] =IF_SWITCH_SEACAM_L1_DK;
bData[3] = IF_DATA_SEACAM_L1_BG; // BG 12Sep08
}
else if (bTvCurrSound==SV_I) // == seacam L' TV_SOUND_I
{
bData[1] =IF_SWITCH_SEACAM_L1_DK;
bData[3] = IF_DATA_SEACAM_L1_I; // I 12Sep08
}
else if (bTvCurrSound==SV_DK) //TV_SOUND_DK
{
bData[1] =IF_SWITCH_SEACAM_L1_DK;
bData[3] = IF_DATA_SEACAM_L1_DK; // DK 12Sep08
}
}
#endif
#endif
#ifdef MARTIN_ADD_SEARCH_TUNER_MUTE
if(fgTVSearhMute) //05Aug08
bData[1] |= 0x20; //05Aug08 //mute enable
else
bData[1] &= 0xdf; //05Aug08 mute disable
#endif
vTV_IF_Write(bData);
return 0;
}
#ifdef MARTIN_TUNER_XF6A_PAL_M_NOT_SYNC
/// first power on picture not sync tnen PAL-M for system
void vPalMBugAdj(void) //martin 17Sep08 test
{
BYTE bTempSystem;
BYTE bData[4];
bTempSystem=(sTvCurrChannel.bSystem & 0x07);
if((bTempSystem == SV_PAL_M)||((bTempSystem == SV_PAL)&&(bTvCurrSound==SV_MN))) //17Sep08 test
{
// if(fgTunerType == 0x01) //DPT2290M
if((bPalMAdj)&&(mReadDvdDat() ==0 )&&(mReadDvdCs()))
{
bPalMAdj=0;
/* set frequency
bData[0] = (_sTunerPLL.wDB >>8) & 0xff;
bData[1] = _sTunerPLL.wDB;
bData[2] = _sTunerPLL.bCB;
bData[3] = _sTunerPLL.bBB;
vTV_PLL_Write(bData);
*/
bData[0] = IF_RESERVED;
bData[1] =IF_SWITCH_PAL;
bData[2] = IF_ADJUST_PAL;
bData[3] = IF_DATA_PAL_BG; // set sound system:BG,vertical sync change to 50Hz
#ifdef MARTIN_ADD_SEARCH_TUNER_MUTE
if(fgTVSearhMute) //05Aug08
bData[1] |= 0x20; //05Aug08
else
bData[1] &= 0xdf; //05Aug08
#endif
vTV_IF_Write(bData);
Delay1ms(200);
bData[0] = IF_RESERVED;
bData[1] =IF_SWITCH_PAL;
bData[2] = IF_ADJUST_PAL;
bData[3] = IF_DATA_PAL_MN;
#ifdef MARTIN_ADD_SEARCH_TUNER_MUTE
if(fgTVSearhMute) //05Aug08
bData[1] |= 0x20; //05Aug08
else
bData[1] &= 0xdf; //05Aug08
#endif
vTV_IF_Write(bData);
bTvCurrSound=SV_MN;//TV_SOUND_MN_L;
sTvCurrChannel.bSystem &= 0xc7; //17Jul08 ntsc + sound_mn
}
}
else //NTSC,SEACAM L.PAL I/BG/DK
{
bPalMAdj=1;
}
if((mReadDvdDat())&&(mReadDvdCs())) //no singal set 1
{
bPalMAdj=1;
}
}
#endif
#ifdef MARTIN_TEST_CHANNNEL_NUMBER_SHOW
void vFreAFCAdjLoop(void) //martin 04Aug08 test
{
BYTE bAfcVaule; //02Jul08
switch(fgAFCADJState)
{
case FREQUENCY_ADJ_IDLE:
fgAFCTVSyncCnt=0;
bFreSetpCnt=0;
fgAFCADJCnt=0;
break;
case FREQUENCY_VIDEO_SYNC:
if(!mReadDvdCs())
{
// if(fgAFCTVSyncCnt < 5)
// fgAFCTVSyncCnt++;
fgAFCADJState = FREQUENCY_VIDEO_SYNC;
break;
}
if(((--fgAFCTVSyncCnt)>0)&&(mReadDvdDat() !=0 ))
{
Delay1ms(5);
fgAFCADJState = FREQUENCY_VIDEO_SYNC;
break;
}
else
{
if(mReadDvdDat() ==0 )
{
// fgReadAFCValue=bTV_IF_Read();
fgAFCVa=bTV_IF_Read();
fgAFCADJState=FREQUENCY_READ_AFC;
break;
}
else
{
if((bFreSetpCnt>=0x11)&&(bFreSetpCnt<=0x13))
{
_sTunerPLL.wDB-= (bFreSetpCnt & 0x0f);
bFreSetpCnt=0x00;
vTvSearchSetFre();
}
else if((bFreSetpCnt>=0x01)&&(bFreSetpCnt<=0x03))
{
_sTunerPLL.wDB+= (bFreSetpCnt & 0x0f);
bFreSetpCnt=0x00;
vTvSearchSetFre();
}
fgAFCADJState = FREQUENCY_ADJ_IDLE;
break;
}
}
break;
case FREQUENCY_READ_AFC:
if(!mReadDvdCs())
{
fgAFCADJState = FREQUENCY_READ_AFC;
break;
}
//29Aug08 Delay1ms(10);
bAfcVaule=((fgAFCVa >>1) & 0x0f);
if((bAfcVaule >=0x00)&&(bAfcVaule <=0x02))
{
WriteTVChannel(bTvCurrChIndex,sTvCurrChannel);
fgAFCADJState = FREQUENCY_ADJ_IDLE;
break;
}
else
{
if(--fgAFCADJCnt>0)
{
if((bAfcVaule >= 0x03)&&(bAfcVaule <=0x07))
{
if(bAfcVaule ==0x07)
{
bFreSetpCnt=0x13;
}
else if((bAfcVaule >=0x06)&&(bAfcVaule <0x05))
{
bFreSetpCnt=0x11;
}
else
bFreSetpCnt=0x11;
}
else if((bAfcVaule >= 0x08)&&(bAfcVaule <=0x0f))
{
if(bAfcVaule ==0x08)
{
bFreSetpCnt=0x03;
}
else if((bAfcVaule >= 0x09)&&(bAfcVaule <=0x0a))
{
bFreSetpCnt=0x03;
}
else if((bAfcVaule >= 0x0b)&&(bAfcVaule <=0x0c))
{
bFreSetpCnt=0x02;
}
else
bFreSetpCnt=0x01;
}
fgAFCADJState = FREQUENCY_SET_TV;
break;
}
else
{
fgAFCADJState = FREQUENCY_ADJ_IDLE;
}
break;
}
case FREQUENCY_SET_TV:
if((bFreSetpCnt>=0x11)&&(bFreSetpCnt<=0x13))
{
_sTunerPLL.wDB+= (bFreSetpCnt & 0x0f);
}
else if((bFreSetpCnt>=0x01)&&(bFreSetpCnt<=0x03))
{
_sTunerPLL.wDB-= (bFreSetpCnt & 0x0f);
}
vTvSearchSetFre();
sTvCurrChannel.wFreq=_sTunerPLL.wDB;
fgAFCTVSyncCnt=3;
fgAFCADJState = FREQUENCY_VIDEO_SYNC;
break;
default:
break;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?