?? saa7114.c
字號:
#include "IIC.H"
#include "stdio.h"
#include "SAA7114.H"
#include "RAM.H"
#include "MyDef.H"
#include "Scaler.H"
#include "MCU.H"
#include "ROM_MAP.H"
#include "USERADJ.H"
Byte code Init7114Table[]={
//0x01~0x0f
0x00,0x08,0xc5,0x10,0x90,0x90,0xeb,0xe0,
0xb8,0x40,0x80,0x44,0x40,0x00,0x89,0x2a,
// 0x00,0x08,0xc0,0x10,0x90,0x90,0xeb,0xe0,
// 0xb8,0x40,0x80,0x44,0x40,0x00,0x89,0x2e,
//0x10~0x1f
0x0e,0x00,0x00,0x00,0x00,0x11,0xfe,0x40,
0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
//0x20~0x2f
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//0x30~0x3f
0xbc,0xdf,0x02,0x00,0xcd,0xcc,0x3a,0x00,
0x03,0x20,0x03,0x00,0x00,0x00,0x00,0x00,
//0x40~0x4f
0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//0x50~0x5f
0xff,0xff,0xff,0xff,0x5f,0xff,0xff,0xff,
0x00,0x47,0x06,0x83,0x00,0x3e,0x00,0x00,
//0x60~0x6f
0x00,0x05,0xa0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//0x70~0x7f
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//0x80~0x8f
0x12,0x00,0x00,0x01,0x01,0x04,0x45,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//0x90~0x9f
0x00,0x08,0x09,0x40,0x10,0x00,0xd0,0x02,
0x0a,0x00,0xf0,0x00,0xd0,0x02,0xf0,0x00,
//0xa0~0xaf
0x01,0x00,0x00,0x00,0x80,0x40,0x40,0x00,
0x00,0x04,0x00,0x00,0x00,0x02,0x00,0x00,
//0xb0~0xbf
0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//0xc0~0xcf
0x00,0x08,0x10,0x81,0x10,0x00,0xd0,0x02,
0x0a,0x00,0x20,0x01,0xd0,0x02,0x20,0x01,
//0xd0~0xdf
0x01,0x00,0x00,0x00,0x80,0x40,0x40,0x00,
0x00,0x04,0x00,0x00,0x00,0x02,0x00,0x00,
//0xe0~0xef
0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
void CheckSaa7114()
{
Byte Ack;
SAA7114On();
Sleep(10);
IIC_Start();
Ack = IIC_Tx(SAA7114);
if(Ack == ACK)
Saa7114En = 1;
else
Saa7114En = 0;
IIC_Stop();
SAA7114Off();
}
bit CheckAVExist()
{
Word i;
Byte value;
SAA7114On();
Sleep(50);
for(i=0;i<256;i++)
WriteIIC(SAA7114,i,Init7114Table[i]);
WriteIIC(SAA7114,0x88,0xe0); //release reset
switch(FuncBuf[pVIDEOSOURCE])
{
case 0x03:
WriteIIC(SAA7114,0x02,0xc5); //SAA7114 AV In
WriteIIC(SAA7114,0x14,0x22); //aout=ad2
break;
case 0x04:
WriteIIC(SAA7114,0x02,0xc7); //SAA7114 Y/C In
WriteIIC(SAA7114,0x14,0x12); //aout=ad1
break;
}
Sleep(500);
value = ReadIIC(SAA7114,0x1f);
SAA7114Off();
if(!(value & BIT_6))
return 1;
else
return 0;
}
void SAA7114Init(void)
{
Word i;
SAA7114On();
ForceToBackground(0,0,0);
for(i=0;i<256;i++)
WriteIIC(SAA7114,i,Init7114Table[i]);
WriteIIC(SAA7114,0x88,0xe0); //release reset & power down
switch(FuncBuf[pVIDEOSOURCE])
{
case 0x03:
WriteIIC(SAA7114,0x02,0xc5); //SAA7114 AV In
WriteIIC(SAA7114,0x14,0x22); //aout=ad2
break;
case 0x04:
WriteIIC(SAA7114,0x02,0xc7); //SAA7114 Y/C In
WriteIIC(SAA7114,0x14,0x12); //aout=ad1
break;
}
FuncBuf[pBRIGHTNESS] = 50; //set scaler
SetBrightness();
FuncBuf[pCONTRAST] = 50;
// FuncBuf[pRCOLOR] = 0x7f;
// FuncBuf[pGCOLOR] = 0x7f;
// FuncBuf[pBCOLOR] = 0x7f;
#ifdef X15
WriteIIC563(0x061,0x0d);
WriteIIC563(0x063,0x80);
WriteIIC563(0x061,0x0e);
WriteIIC563(0x063,0x80);
WriteIIC563(0x061,0x0f);
WriteIIC563(0x063,0x80);
#else
WriteIIC563(0x061,0x0d);
WriteIIC563(0x063,0x80);
WriteIIC563(0x061,0x0e);
WriteIIC563(0x063,0x80);
WriteIIC563(0x061,0x0f);
WriteIIC563(0x063,0x80);
#endif
SetContrast(); //scaler
FuncBuf[pBACKLIGHT] = 0x7f;
SetInverter();
//
FuncBuf[pBRIGHTNESS] = Read24C16(ep_Video_Brightness);
FuncBuf[pCONTRAST] = Read24C16(ep_Video_Contrast);
FuncBuf[pSATURATION] = Read24C16(ep_Video_Saturation);
FuncBuf[pSHARPNESS] = Read24C16(ep_Video_Shapness);
FuncBuf[pTINT] = Read24C16(ep_Video_Tint);
SetVideoBrightness();
SetVideoContrast();
SetVideoSaturation();
SetVideoSharpness();
SetVideoTint();
VideoTimer = VIDEO_SEARCH_TIME;
VideoFlag = 0xff;
MonoVideo = 0;
BlueScreen = 0;
}
void CheckVideo(void)
{
Byte value;
value = ReadIIC(SAA7114,0x1f);
value &= 0xe1;
if(value != VideoFlag)
{
VideoFlag = value;
VideoTimer = VIDEO_SEARCH_TIME;
PowerTimer = POWER_TIME-100;
BlueScreen = 0;
VideoOK = 0;
Osd_Off();
//FastMuteOn();
BackLightOff();
ForceToBackground(0,0,0);
Sleep(10);
#if PRINT_MESSAGE
printf("No Video\n");
#endif
}
if(VideoTimer < 100 && !VideoUnlock && !VideoOK)
{
VideoOK = 1;
MonoVideo = 0;
CheckColorSystem();
SetVideoSharpness();
SetScalerAV();
}
if(VideoTimer == 0 && VideoUnlock && !BlueScreen)
{
if(!MessageShow)
{
ShowMessage(MSG_NOSYNC);
//FastMuteOff();
BackLightOn();
Sleep(1000);
Osd_Off();
//FastMuteOn();
BackLightOff();
MessageShow = 1;
}
BlueScreen = 1;
FuncBuf[pVIDEOSOURCE]++;
if(FuncBuf[pVIDEOSOURCE]>4)
{
MessageShow = 0;
PowerTimer = POWER_TIME-200;
FuncBuf[pVIDEOSOURCE]=0;
ChangeMode = 1;
}
SetSource();
}
}
void CheckColorSystem(void)
{
Byte code tab1[]={0x81,0x91,0xa1,0xb1,0xc1,0xd0};
Byte code tab2[]={0x2a,0x2a,0x2a,0x2a,0x2a,0x80};
Byte code F60_CaptureTab[]={0xf0,0x00,0xf0,0x00};
Byte code F50_CaptureTab[]={0x2a,0x01,0x2a,0x01};
Byte code ColorSystemTab[][4]={
{0x40,0x09,0x2a,0x0e},
{0x40,0x11,0x2a,0x06},
{0x40,0x29,0x2a,0x0e},
{0x40,0x31,0x2a,0x06},
{0x40,0x49,0x2a,0x0e},
{0x00,0x59,0x80,0x06},
};
Byte i,value,loop,VideoColorStatus;
if(MonoVideo)
return;
i = 0;
WriteIIC(SAA7114,0x0e,tab1[i]);
WriteIIC(SAA7114,0x0f,tab2[i]);
for(loop=0;loop<3;loop++)
{
value = ReadIIC(SAA7114,0x1f);
if((value & 0x41) != 0x01)
{
for(i=0; i<6; i++)
{
WriteIIC(SAA7114,0x0e,tab1[i]);
WriteIIC(SAA7114,0x0f,tab2[i]);
Sleep(100);
value = ReadIIC(SAA7114,0x1f);
if((value & 0x41) == 0x01)
{
VideoColorStatus = i;
break;
}
}
}
}
VideoFlag = value & 0xe1;
if(i == 6)
{
i = VideoColorStatus;
WriteIIC(SAA7114,0x0e,tab1[i]);
WriteIIC(SAA7114,0x0f,tab2[i]);
MonoVideo = 1;
#if PRINT_MESSAGE
printf("Color system = B/W\n");
#endif
}
else
{
MonoVideo = 0;
#if PRINT_MESSAGE
printf("Color system = %x\n",(unsigned short)i);
#endif
}
WriteIIC(SAA7114,0x0e,tab1[i] & 0x7f);
WriteIIC(SAA7114,0x0e,tab1[i]);
if(Video_60Hz)
{
WriteIIC(SAA7114,0x9a,F60_CaptureTab[0]);
WriteIIC(SAA7114,0x9b,F60_CaptureTab[1]);
WriteIIC(SAA7114,0x9e,F60_CaptureTab[2]);
WriteIIC(SAA7114,0x9f,F60_CaptureTab[3]);
}
else
{
WriteIIC(SAA7114,0x9a,F50_CaptureTab[0]);
WriteIIC(SAA7114,0x9b,F50_CaptureTab[1]);
WriteIIC(SAA7114,0x9e,F50_CaptureTab[2]);
WriteIIC(SAA7114,0x9f,F50_CaptureTab[3]);
}
value = ColorSystemTab[i][0];
if(FuncBuf[pVIDEOSOURCE] == 4) //Svideo comb filter en
value |= BIT_7;
WriteIIC(SAA7114,0x09,value);
WriteIIC(SAA7114,0x0e,ColorSystemTab[i][1]);
WriteIIC(SAA7114,0x0f,ColorSystemTab[i][2]);
WriteIIC(SAA7114,0x10,ColorSystemTab[i][3]);
if(Video_60Hz)
TvMode = i + 7;
else
TvMode = i;
}
void SetVideoBrightness(void)
{
Byte value;
value = FuncBuf[pBRIGHTNESS] * 2 + 28;
WriteIIC(SAA7114,0x0a,value);
#if PRINT_MESSAGE
printf("Brightness of SAA7114 = %x\n",(unsigned short)value);
#endif
}
void SetVideoContrast(void)
{
Byte value;
value = FuncBuf[pCONTRAST]*127/100 ;
WriteIIC(SAA7114,0x0b,value);
#if PRINT_MESSAGE
printf("Contrast of SAA7114 = %x\n",(unsigned short)value);
#endif
}
void SetVideoSaturation(void)
{
Byte value;
value = FuncBuf[pSATURATION]+14;
WriteIIC(SAA7114,0x0c,value);
#if PRINT_MESSAGE
printf("Saturation of SAA7114 = %x\n",(unsigned short)value);
#endif
}
void SetVideoTint(void)
{
Byte value;
value = FuncBuf[pTINT] * 255/ 100; //50% = 0
WriteIIC(SAA7114,0x0d,value);
#if PRINT_MESSAGE
printf("Tint of SAA7114 = %x\n",(unsigned short)value);
#endif
}
void SetVideoSharpness(void)
{
code unsigned char SharpnessTab[]={
0x0f,0x0e,0x0e,0x0d,0x0c,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x08,
0x00,
0x07,0x06,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x01,
// 0x47,0x46,0x46,0x45,0x44,0x44,0x43,0x42,0x42,0x41,0x41,
//Edit By Travis 盢X╰
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -