📄 t103_util.c
字号:
I2CWriteByte(TW803_P0,0x40, 0xC2);
I2CWriteByte(TW803_P0,0x17, 0xC8);
SRC_565();
}
}
#ifdef DIGI_AVAILABLE
else if(uiaSrcMux1[EepPublic.cSource].SourceRoute==isrcDIGITAL)
{
if (uiaSrcMux1[EepPublic.cSource].VideoType==itype656)
{
SRC_656();
}
}
#endif
if(uiaSrcMux1[EepPublic.cSource].SourceRoute!=isrcVIDEO)
Detect_Sig(1); //tune sound control 20060809
I2CWriteByte(TW803_P0, 0xE2, 0x11);
}
/* D E T E C T S I G N A L S T D */
/*-------------------------------------------------------------------------
if h/v locked
setOPTiming
if color detected and chroma locked
SetSignalStd
Register affected:P2_0x83(Comb Lock Configuration Reg)
-------------------------------------------------------------------------*/
void DetectSignalStd(void)
{
uCHAR index=0,SlaveAddr,RegAddrShift;
#ifdef T515
if(EepPublic.cSource >= isrc_T515_CVIDEO1){
SlaveAddr=0xb8;
RegAddrShift=0x20;
}else{
SlaveAddr=TW803_P2;
RegAddrShift=0x00;
}
#else
SlaveAddr=TW803_P2;
RegAddrShift=0x00;
#endif
m_cBuff[0]=m_cStandard;
m_cBuff[1]=I2CReadByte(SlaveAddr, 0x3A+RegAddrShift); //read video status registers
if(I2CReadByte(SlaveAddr, 0x3A+RegAddrShift)&0x06) // Judge vlock and hlock
{
//if(I2CReadByte(SlaveAddr, 0x7B+RegAddrShift)>0x10){// For no chroma case
//twdDelay(50);
//~~~~~~~ set OPTiming ~~~~~~~~~~~~~~~~~~~//
if(I2CReadByte(TW803_P0,0x59) <= 0xd6) //read hsync period MSB Register 20060809
m_cBuff[0]=S_NTSC;
else
m_cBuff[0]=S_PAL;
#ifdef T515
if((EepPublic.cSource&0x0f) >= isrc_T515_CVIDEO1){
m_cBuff[0] = I2CReadByte(TW515, 0x5c)&0x04;
if((I2CReadByte(TW515, 0x5c)&0x07)==0)
m_cBuff[0]=S_NTSC;
else if(I2CReadByte(TW515, 0x5c)&0x02)
m_cBuff[0]=S_SECAM;
else if(I2CReadByte(TW515, 0x5c)&0x04)
m_cBuff[0]=S_PAL;
else
m_cBuff[0]=0xff;
}
#endif
if((m_cStandard!=m_cBuff[0]))
{ // signal std was changed,and output timing must be set again
m_cStandard=m_cBuff[0];
SetOPTiming();
}
//~~~~~~~ End of set OPTiming ~~~~~~~~~~~~~~~~~~~//
//~~~~~~~ set Chroma ~~~~~~~~~~~~~~~~~~~//
m_cBuff[4]=m_cChroma;
#ifdef T515
if((EepPublic.cSource&0x0f) >= isrc_T515_CVIDEO1)
{
m_cBuff[4] = I2CReadByte(TW515, 0x5c)&0x04;
//else if((EepPublic.cSource&0x0f) >= isrc_T515_CVIDEO1)
{
if((I2CReadByte(TW515, 0x5c)&0x07)==0)
m_cBuff[4]=S_NTSC;
else if(I2CReadByte(TW515, 0x5c)&0x02)
m_cBuff[4]=S_SECAM;
else if(I2CReadByte(TW515, 0x5c)&0x04)
m_cBuff[4]=S_PAL;
else
m_cBuff[4]=0xff;
}
#endif
twdDelay(25);
// Set Chroma lock configration
//if(I2CReadByte(TW803_P0,0x59) <= 0xd6)
// I2CWriteByte(SlaveAddr, 0x83+RegAddrShift, 0x39);//6f); // NTSC // change by Sherman 06'02'07
//else
I2CWriteByte(SlaveAddr, 0x83+RegAddrShift, 0x39); // chroma is killed whenever chromlock is lost,lose chromalock level = 4,lose chromalock count = 3
twdDelay(50);
if(I2CReadByte(TW803_P0,0x59) <= 0xd6)
{ // NTSC-M,NTSC-4,PAL-M
m_wBuff[2]=0;
m_cBuff[1]=m_cChroma; // Preserve previous status for signal std
twdDelay(150); // add by Sherman 06'01'16
while (1)
{ // NTSC-M=1,NTSC-4=4,PAL-M=5
if (m_cChroma == S_NTSC_4)
{
if ((I2CReadByte(SlaveAddr, 0x3a+RegAddrShift)&0x08)&&(I2CReadByte(SlaveAddr, 0x7a+RegAddrShift)<0x80))
break; //T103 has no register 0x7a at Page 2?
}
if ((m_cChroma == S_NTSC)||(m_cChroma == S_PAL_M))
{
if ((I2CReadByte(SlaveAddr, 0x3a+RegAddrShift)&0x08))
break; //reg0x3a at page 2 locked chroma pll burst
}
do
{
m_cChroma++;
if(m_cChroma>=S_PAL_M)
m_cChroma=S_NTSC;
}while(((1<<m_cChroma)&SignalDefine)==0x00);
SetSignalStd(); // Set Signal flag and DTO
twdDelay(50);
if ((++m_wBuff[2]) >4) break; // Avoid while setting, input switch to NTSC
}
}
else
{ // PAL-BD,PAL-CN,SECAM
#if (defined YPbPr)
if(EepPublic.cSource == isrYPbPr)
m_cBuff[4]=S_PAL;
else {
#endif
m_wBuff[2]=0;
m_cBuff[1]=m_cChroma; // Preserve previous status for signal std
twdDelay(150); // add by Sherman 06'01'16
while (1)
{ // PAL-BD=2,PAL-CN=6,SECAM=3
if ((m_cChroma == S_PAL)||(m_cChroma == S_PAL_CN))
{
if ((I2CReadByte(SlaveAddr, 0x3a+RegAddrShift)&0x08) && (I2CReadByte(SlaveAddr, 0x3c+RegAddrShift)&0x01==1))//&& (I2CReadByte(SlaveAddr, 0x7d+RegAddrShift)>0xf0))
break; //chroma PLL locked to color burst and PAL color Mode detected
}
if (m_cChroma == S_SECAM)
{
if ((I2CReadByte(SlaveAddr, 0x3a+RegAddrShift)&0x08) && (I2CReadByte(SlaveAddr, 0x7d+RegAddrShift)>0xf0))
break; //T103 seems have no reg 0x7d at page 2?
}
do
{
m_cChroma++;
if(m_cChroma>=S_END)
m_cChroma=S_PAL;
}while(((1<<m_cChroma)&SignalDefine)==0x00);
SetSignalStd(); // Set Signal flag and DTO
twdDelay(50);
if ((++m_wBuff[2]) >4) break; // Avoid while setting, input switch to NTSC
}
#if (defined YPbPr)
}
#endif
}
if (m_cBuff[1] != m_cChroma)
{
if ((I2CReadByte(SlaveAddr, 0x3a+RegAddrShift)&0x08))
m_cBuff[4] = m_cChroma;
m_cChroma=m_cBuff[1] ;
}
if((m_cChroma!=m_cBuff[4]))
{
m_cChroma=m_cBuff[4];
}
}
}
/* S E T S I G N A L S T D */
/*-------------------------------------------------------------------------
set chroma agc(P20x0c),chroma DTO increment0,1,2,3,(P20x18,19,1a,1b)
and Comb Filter Configuration(P20x82) according to m_cChroma
-------------------------------------------------------------------------*/
void SetSignalStd(void)
{
uCHAR RegIdx,ValIdx;//ruby,ChromaIdx;
I2CWriteByte(TW803_P2, 0x3f, 0x01); // reset comb filter //add by Sherman 06'01'16
#ifdef T515
if ( (EepPublic.cSource&0x0F)< isrc_T515_CVIDEO1){
#endif
ValIdx=m_cChroma*SignalStdRegP2Cnt; // S_NTSC=0x01
for (RegIdx=0; RegIdx<SignalStdRegP2Cnt; RegIdx++, ValIdx++){
I2CWriteByte(TW803_P2, ucaSignalStdRegP2[RegIdx], ucaSignalStdValP2[ValIdx]);
}
#ifdef T515
}else T515_NTSC_PAL();
#endif
twdDelay(100); // add by Sherman 06'01'16
I2CWriteByte(TW803_P2, 0x3f, 0x00); // add by Sherman 06'01'16
SetIPVideoType();
}
#ifdef FIX_OUTPUT_TIMING
/* S E T O P T I M I N G */
/*-------------------------------------------------------------------------
set the scaler,line buffer,output PLL,display window
-------------------------------------------------------------------------*/
void SetOPTiming(void)
{
uWORD ucAdrIdx,ucDataIdx;
uCHAR RegIndex,RegAdr;
if (uiaSrcMux1[EepPublic.cSource].VideoType==itypeRGB565)
{
ucDataIdx=m_cScaleratio*P0ScaleAdrCnt;
for (ucAdrIdx=0; ucAdrIdx<sizeof(ucaZoomAdrP0_RGB565)/sizeof(uCHAR); ucAdrIdx++, ucDataIdx++){
I2CWriteByte(TW803_P0, ucaZoomAdrP0_RGB565[ucAdrIdx], ucaZoomDataP0_RGB565[ucDataIdx]);
}
}
else
{
if((m_cStandard==S_NTSC)||(m_cStandard==S_NTSC_4)||(m_cStandard==S_PAL_M))
{
// kenny 20060512 ====================================================
RegIndex=0;
RegAdr=stInitOUT_T[0].ucRegAdr;
while (RegAdr != 0xBF)
{
I2CWriteByte(TW803_P0,RegAdr,stInitOUT_T[RegIndex].ucRegVal);
RegAdr=stInitOUT_T[++RegIndex].ucRegAdr;
}
//kenny 20060721
#ifdef TCON
I2CWriteByte(TW803_P0, 0xe0, 0xb9); //power management control
#else
#ifdef __AU_7_DIGITALSONY__
I2CWriteByte(TW803_P0, 0xC1, 0xc0);
#endif
//kenny 20060721
I2CWriteByte(TW803_P0, 0xe0, 0xb8);
#endif
I2CWriteByte(TW803_P0, 0xe2, 0x11);
// kenny 20060512 ====================================================
ucDataIdx=m_cScaleratio*P0ScaleAdrCnt;
for (ucAdrIdx=0; ucAdrIdx<P0ScaleAdrCnt; ucAdrIdx++, ucDataIdx++){
I2CWriteByte(TW803_P0, ucaZoomAdrP0[ucAdrIdx], ucaZoomDataP0_NTSC[ucDataIdx]);
}
ucDataIdx=m_cScaleratio*P2ScaleAdrCnt;
for (ucAdrIdx=0; ucAdrIdx<P2ScaleAdrCnt; ucAdrIdx++, ucDataIdx++){
I2CWriteByte(TW803_P2, ucaZoomAdrP2[ucAdrIdx], ucaZoomDataP2_NTSC[ucDataIdx]);
}
// Add by Sherman 06'01'06
#ifdef SimulateSTH
ucDataIdx=m_cScaleratio*P1ScaleAdrCnt;
for (ucAdrIdx=0; ucAdrIdx<P1ScaleAdrCnt; ucAdrIdx++, ucDataIdx++){
I2CWriteByte(TW803_P1, ucaZoomAdrP1[ucAdrIdx], ucaZoomDataP1_NTSC[ucDataIdx]);
}
#endif
}
else{
ucDataIdx=m_cScaleratio*P0ScaleAdrCnt;
for (ucAdrIdx=0; ucAdrIdx<P0ScaleAdrCnt; ucAdrIdx++, ucDataIdx++){
I2CWriteByte(TW803_P0, ucaZoomAdrP0[ucAdrIdx], ucaZoomDataP0_PAL[ucDataIdx]);
}
ucDataIdx=m_cScaleratio*P2ScaleAdrCnt;
for (ucAdrIdx=0; ucAdrIdx<P2ScaleAdrCnt; ucAdrIdx++, ucDataIdx++){
I2CWriteByte(TW803_P2, ucaZoomAdrP2[ucAdrIdx], ucaZoomDataP2_PAL[ucDataIdx]);
}
// Add by Sherman 06'01'06
#ifdef SimulateSTH
ucDataIdx=m_cScaleratio*P1ScaleAdrCnt;
for (ucAdrIdx=0; ucAdrIdx<P1ScaleAdrCnt; ucAdrIdx++, ucDataIdx++){
I2CWriteByte(TW803_P1, ucaZoomAdrP1[ucAdrIdx], ucaZoomDataP1_PAL[ucDataIdx]);
}
#endif
// end of add by Sherman
}
}
I2CWriteByte(TW803_P0, 0xe2, 0x11);
}
#else
void SetOPTiming(void)
{
uWORD wDVTotal, wDHTotal, wDVBILK, wTemp;
uCHAR LLCK_Divider;
float Temp;
IRScaleratioCtrl();
Scaling();
if((I2CReadByte(TW803_P0, 0xcb)&0x0f)>1)
LLCK_Divider=I2CReadByte(TW803_P0, 0xcb)&0x0f ;
else
LLCK_Divider=1;
LLCK_Divider=1; //
//Calculate PH_TOT and PV_TOT
if(m_cStandard==S_NTSC){
wDHTotal=1716.0*m_wVRes*(DNDIV_40/LLCK_Divider)/DWVSZ;
wDVTotal=((DNDIV_40/LLCK_Divider)*27000.0/(60.0*623.0))*1000.0;
}
else if((m_cStandard==S_PAL)||(m_cStandard==S_SECAM)){
wDHTotal=1728.0*m_wVRes*(DNDIV_40/LLCK_Divider)/DWVSZ;
wDVTotal=((DNDIV_40/LLCK_Divider)*27000.0/(50.0*576.0))*1000.0;
}
m_dwBuff[1]=I2CReadByte(TW803_P0, 0x83);
m_dwBuff[1] <<= 8;
m_dwBuff[1]=I2CReadByte(TW803_P0, 0x82);
m_dwBuff[1] <<= 8;
m_dwBuff[1] |= I2CReadByte(TW803_P0, 0x81);
wDVBILK=m_dwBuff[1];
// Calculate back porch "DWHS"
wTemp = ((wDHTotal - m_wDWHSZ - DISP_DFLT_HSWIDTH)>>1)-2;
I2CWriteByte(TW803_P0, 0xB0, wTemp);
I2CWriteByte(TW803_P0, 0xB1, wTemp>>8);//Hoizontal back porch
// Calculate back porch "DWHS"
//wTemp =wDVBILK/(wDHTotal*(DNDIV_40/LLCK_Divider))-DISP_DFLT_VSWIDTH;
I2CWriteByte(TW803_P0, 0xB2, DWVSST);
I2CWriteByte(TW803_P0, 0xB3, DWVSST>>8);//Vertical back porch
I2CWriteByte(TW803_P0, 0xB4,(uCHAR)(m_wDWHSZ));
I2CWriteByte(TW803_P0, 0xB5,(uCHAR)(m_wDWHSZ>>8));//Horizontal width
I2CWriteByte(TW803_P0, 0xB8,(uCHAR) wDHTotal);
I2CWriteByte(TW803_P0, 0xB9,(uCHAR)(wDHTotal>>8));//Htotal
I2CWriteByte(TW803_P0, 0xBA,(uCHAR) wDVTotal);
I2CWriteByte(TW803_P0, 0xBB,(uCHAR)(wDVTotal>>8));//Vtotal
I2CWriteByte(TW803_P0, 0xBC,(uCHAR) DISP_DFLT_HSWIDTH);
I2CWriteByte(TW803_P0, 0xBD,(uCHAR)(DISP_DFLT_HSWIDTH>>8));//HSYNC Width
I2CWriteByte(TW803_P0, 0xBE,(uCHAR) DISP_DFLT_VSWIDTH);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -