📄 hal1.c
字号:
if (_dwHALTemp > __dwTemp)
_dwHALTemp -= __dwTemp;
else
_dwHALTemp = 0;
//calculate Cb'=sqrt(Cb^2+Cb^2-Cr'^2) by traversing
for (__bTemp=0; __bTemp<=0x7F; __bTemp++)
{
if ( ((DWORD)__bTemp*__bTemp) >= _dwHALTemp )
break;
}
_bHALTemp = __bTemp; //Cb'
#ifdef SUPPORT_PRINTF
printf("GAIN_YC: new Cb=%hx Cr=%hx\n", _bHALTemp, _bHALTemp1);
#endif
wLo = (WORD)(_bHALTemp)<<8 | _bHALTemp1;
W99AV_WriteTVERegDW(GAIN_YC, wLo, wHi);
}
else if (bReg==GAIN_CAV)
{
extern WORD _wHALTemp, _wHALTemp1;
_wHALTemp = (wHi & 0x1000)>>4 | (wLo & 0xFF00)>>8; //default Cb [28][15:8]
_wHALTemp1 = (wHi & 0x0100) | (wLo & 0x00FF); //default Cr [24][7:0]
#ifdef SUPPORT_PRINTF
printf("GAIN_CAV: org Cb=%x Cr=%x\n", _wHALTemp, _wHALTemp1);
#endif
_dwHALTemp = (DWORD)_wHALTemp*_wHALTemp + (DWORD)_wHALTemp1*_wHALTemp1; //default Cb^2 + Cr^2
//SETUP adjusts Cr'
if (__SetupInfo.bChromPhaseOffset>SETUP_SCREEN_CHROM_PHASE_0)
{
__bTemp = (__SetupInfo.bChromPhaseOffset-SETUP_SCREEN_CHROM_PHASE_0) * CHROM_PHASE_GAP_CAV;
if (_wHALTemp1+__bTemp < 0x1FF)
_wHALTemp1 += __bTemp; //Cr'
else
_wHALTemp1 = 0x1FF; //Cr'
}
else
{
__bTemp = (SETUP_SCREEN_CHROM_PHASE_0-__SetupInfo.bChromPhaseOffset) * CHROM_PHASE_GAP_CAV;
if (_wHALTemp1>__bTemp)
_wHALTemp1 -= __bTemp; //Cr'
else
_wHALTemp1 = 0; //Cr'
}
__dwTemp = (DWORD)_wHALTemp1*_wHALTemp1;
if (_dwHALTemp > __dwTemp)
_dwHALTemp -= __dwTemp;
else
_dwHALTemp = 0;
//calculate Cb'=sqrt(Cb^2+Cb^2-Cr'^2) by traversing
for (__wTemp=0; __wTemp<=0x1FF; __wTemp++)
{
if ( ((DWORD)__wTemp*__wTemp) >= _dwHALTemp )
break;
}
_wHALTemp = __wTemp; //Cb'
#ifdef SUPPORT_PRINTF
printf("GAIN_CAV: new Cb=%x Cr=%x\n", _wHALTemp, _wHALTemp1);
#endif
wHi &= ~0x1100;
wHi |= (_wHALTemp & 0x0100)<<4 | (_wHALTemp1 & 0x0100);
wLo = (_wHALTemp & 0x00FF)<<8 | (_wHALTemp1 & 0x00FF);
W99AV_WriteTVERegDW(GAIN_CAV, wLo, wHi);
}
} //end of _WriteTVEGainWithChromPhase()
#endif
// *******************************************************************************
// Function : _TVModeSet
// Description : Set TVE
// Arguments : None
// Return : None
// Side Effect : none
// *******************************************************************************
#pragma NOAREGS // may be called in ISR
void _TVModeSet(void) // LLY.051-1, it will reference __bTVType directly
{
//Kevin1.05, add protection
if ((__SetupInfo.bProgressiveScan == SETUP_PROGRESSIVE_SCAN_ON) &&
(__SetupInfo.bVideoOutput == SETUP_SCREEN_VIDEO_OUTPUT_NORMAL))
{
__SetupInfo.bVideoOutput = SETUP_SCREEN_VIDEO_OUTPUT_YUV_PSCAN;
SETUP_ChangeValue(SETUP_SCREEN_VIDEO_OUTPUT);
}
if ((__SetupInfo.bProgressiveScan == SETUP_PROGRESSIVE_SCAN_OFF) &&
(__SetupInfo.bVideoOutput == SETUP_SCREEN_VIDEO_OUTPUT_VGA))
{
__SetupInfo.bVideoOutput = SETUP_SCREEN_VIDEO_OUTPUT_NORMAL;
SETUP_ChangeValue(SETUP_SCREEN_VIDEO_OUTPUT);
}
_bVideoOutput=__SetupInfo.bVideoOutput;
//Kevin1.05, GPCR2 bit17: Hsync/Vsync signal for VGA
__dwHAL1Temp = W99AV_ReadRegDW(GPCR2);
__dwHAL1Temp &= ~0x20000;
//Kevin1.02-2, Radj=75ohm
if(__SetupInfo.bProgressiveScan == SETUP_PROGRESSIVE_SCAN_ON) //Progressive Scan
{
switch (__bTVType)
{
case SETUP_SCREEN_TV_SYSTEM_NTSC:
switch (_bVideoOutput)
{
case SETUP_SCREEN_VIDEO_OUTPUT_YUV_PSCAN:
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0000);
//Kevin1.07a, disable 525p MV
//W99AV_WriteTVERegDW(TVE_CR1, 0xb002, 0x0000);
W99AV_WriteTVERegDW(TVE_CR1, 0xa002, 0x0000);
#ifndef SUPPORT_ADJUST_CHROM_PHASE
W99AV_WriteTVERegDW(GAIN_CAV, 0xa0a0, 0x00a4);
#else
_WriteTVEGainWithChromPhase(GAIN_CAV, 0xa0a0, 0x00a4); //Kevin1.25, add
#endif
break;
case SETUP_SCREEN_VIDEO_OUTPUT_RGB_PSCAN:
#ifndef RGB_NO_SYNC_ON_G
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0040);
#else //kevin2.39, for SCART Macrovision: RGB sync is on the composite line
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0000);
#endif
//Kevin1.07a, disable 525p MV
//W99AV_WriteTVERegDW(TVE_CR1, 0xb004, 0x0000);
W99AV_WriteTVERegDW(TVE_CR1, 0xa004, 0x0000);
#ifndef SUPPORT_ADJUST_CHROM_PHASE
W99AV_WriteTVERegDW(GAIN_CAV, 0x1ce1, 0x10a4);
#else
_WriteTVEGainWithChromPhase(GAIN_CAV, 0x1ce1, 0x10a4); //Kevin1.25, add
#endif
W99AV_WriteTVERegDW(FAIN_G, 0x3772, 0x0000);
break;
case SETUP_SCREEN_VIDEO_OUTPUT_VGA:
//Kevin0.87, Hsync/Vsync signal for VGA
__dwHAL1Temp |= 0x20000;
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0000);
//Kevin1.07a, disable 525p MV
//W99AV_WriteTVERegDW(TVE_CR1, 0xb004, 0x2000);
W99AV_WriteTVERegDW(TVE_CR1, 0xa004, 0x2000);
#ifndef SUPPORT_ADJUST_CHROM_PHASE
W99AV_WriteTVERegDW(GAIN_CAV, 0x1ce1, 0x10a4);
#else
_WriteTVEGainWithChromPhase(GAIN_CAV, 0x1ce1, 0x10a4); //Kevin1.25, add
#endif
W99AV_WriteTVERegDW(FAIN_G, 0x3772, 0x0000);
break;
}
break;
case SETUP_SCREEN_TV_SYSTEM_PAL:
case SETUP_SCREEN_TV_SYSTEM_PAL_M:
case SETUP_SCREEN_TV_SYSTEM_PAL_N:
switch (_bVideoOutput)
{
case SETUP_SCREEN_VIDEO_OUTPUT_YUV_PSCAN:
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0000);
W99AV_WriteTVERegDW(TVE_CR1, 0xf002, 0x0000);
#ifndef SUPPORT_ADJUST_CHROM_PHASE
W99AV_WriteTVERegDW(GAIN_CAV, 0xa0a0, 0x00a4);
#else
_WriteTVEGainWithChromPhase(GAIN_CAV, 0xa0a0, 0x00a4); //Kevin1.25, add
#endif
break;
case SETUP_SCREEN_VIDEO_OUTPUT_RGB_PSCAN:
#ifndef RGB_NO_SYNC_ON_G
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0040);
#else //kevin2.39, for SCART Macrovision: RGB sync is on the composite line
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0000);
#endif
W99AV_WriteTVERegDW(TVE_CR1, 0xf004, 0x0000);
#ifndef SUPPORT_ADJUST_CHROM_PHASE
W99AV_WriteTVERegDW(GAIN_CAV, 0x1ce1, 0x10a4);
#else
_WriteTVEGainWithChromPhase(GAIN_CAV, 0x1ce1, 0x10a4); //Kevin1.25, add
#endif
W99AV_WriteTVERegDW(FAIN_G, 0x3772, 0x0000);
break;
case SETUP_SCREEN_VIDEO_OUTPUT_VGA:
//Kevin0.87, Hsync/Vsync signal for VGA
__dwHAL1Temp |= 0x20000;
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0000);
W99AV_WriteTVERegDW(TVE_CR1, 0xf004, 0x2000);
#ifndef SUPPORT_ADJUST_CHROM_PHASE
W99AV_WriteTVERegDW(GAIN_CAV, 0x1ce1, 0x10a4);
#else
_WriteTVEGainWithChromPhase(GAIN_CAV, 0x1ce1, 0x10a4); //Kevin1.25, add
#endif
W99AV_WriteTVERegDW(FAIN_G, 0x3772, 0x0000);
break;
}
break;
}
}
else //Interlaced Scan
{
switch (__bTVType)
{
case SETUP_SCREEN_TV_SYSTEM_NTSC:
//default is not 443, so the following parameters include no 7.5IRE & are not fine tuned.
#ifdef SUPPORT_NTSC443
switch (_bVideoOutput)
{
case SETUP_SCREEN_VIDEO_OUTPUT_NORMAL:
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0280);
#ifdef SUPPORT_2_CVBS
W99AV_WriteTVERegDW(TVE_CR1, 0x0000, 0x0000);
#else //Kevin1.05, turn off AVO0
W99AV_WriteTVERegDW(TVE_CR1, 0x0400, 0x0000);
#endif
#ifndef SUPPORT_ADJUST_CHROM_PHASE
W99AV_WriteTVERegDW(GAIN_YC, 0x4764, 0x0054);
#else
_WriteTVEGainWithChromPhase(GAIN_YC, 0x4764, 0x0054); //Kevin1.25, add
#endif
break;
case SETUP_SCREEN_VIDEO_OUTPUT_YUV:
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0200);
W99AV_WriteTVERegDW(TVE_CR1, 0x2002, 0x0000);
#ifndef SUPPORT_ADJUST_CHROM_PHASE
W99AV_WriteTVERegDW(GAIN_YC, 0x4764, 0x0054);
W99AV_WriteTVERegDW(GAIN_CAV, 0xa0a0, 0x00a4);
#else
_WriteTVEGainWithChromPhase(GAIN_YC, 0x4764, 0x0054) //Kevin1.25, add
_WriteTVEGainWithChromPhase(GAIN_CAV, 0xa0a0, 0x00a4); //Kevin1.25, add
#endif
break;
case SETUP_SCREEN_VIDEO_OUTPUT_RGB:
#ifndef RGB_NO_SYNC_ON_G
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0240);
#else //kevin2.39, for SCART Macrovision: RGB sync is on the composite line
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0200);
#endif
W99AV_WriteTVERegDW(TVE_CR1, 0x2004, 0x0000);
#ifndef SUPPORT_ADJUST_CHROM_PHASE
W99AV_WriteTVERegDW(GAIN_YC, 0x4764, 0x0054);
W99AV_WriteTVERegDW(GAIN_CAV, 0x1ce1, 0x10a4);
#else
_WriteTVEGainWithChromPhase(GAIN_YC, 0x4764, 0x0054) //Kevin1.25, add
_WriteTVEGainWithChromPhase(GAIN_CAV, 0x1ce1, 0x10a4); //Kevin1.25, add
#endif
W99AV_WriteTVERegDW(FAIN_G, 0x3772, 0x0000);
break;
}
#else //#ifdef SUPPORT_NTSC443
switch (_bVideoOutput)
{
case SETUP_SCREEN_VIDEO_OUTPUT_NORMAL:
#ifdef NTSC_IRE_75 //Kevin1.24DMTech
W99AV_WriteTVERegDW(TVE_CR0, 0x0020, 0x0200);
#ifdef SUPPORT_2_CVBS
W99AV_WriteTVERegDW(TVE_CR1, 0x0000, 0x0000);
#else //Kevin1.05, turn off AVO0
W99AV_WriteTVERegDW(TVE_CR1, 0x0400, 0x0000);
#endif
#ifndef SUPPORT_ADJUST_CHROM_PHASE
//Kevin1.23DMTech, based on Joie 2004/2/9
//W99AV_WriteTVERegDW(GAIN_YC, 0x425d, 0x004d); //without boost circuit
W99AV_WriteTVERegDW(GAIN_YC, 0x4460, 0x0050); //with boost circuit
#else
_WriteTVEGainWithChromPhase(GAIN_YC, 0x4460, 0x0050); //Kevin1.25, add
#endif
#else //0 IRE
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0200);
#ifdef SUPPORT_2_CVBS
W99AV_WriteTVERegDW(TVE_CR1, 0x0000, 0x0000);
#else //Kevin1.05, turn off AVO0
W99AV_WriteTVERegDW(TVE_CR1, 0x0400, 0x0000);
#endif
#ifndef SUPPORT_ADJUST_CHROM_PHASE
//Kevin1.23DMTech, based on Joie 2004/2/9
//W99AV_WriteTVERegDW(GAIN_YC, 0x4764, 0x0054); //without boost circuit
W99AV_WriteTVERegDW(GAIN_YC, 0x435d, 0x0058); //with boost circuit
#else
_WriteTVEGainWithChromPhase(GAIN_YC, 0x435d, 0x0058); //Kevin1.25, add
#endif
#endif //#ifdef IRE_75
break;
case SETUP_SCREEN_VIDEO_OUTPUT_YUV:
#ifdef NTSC_IRE_75 //Kevin1.24DMTech
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0600);
W99AV_WriteTVERegDW(TVE_CR1, 0x2002, 0x0000);
#ifndef SUPPORT_ADJUST_CHROM_PHASE
W99AV_WriteTVERegDW(GAIN_YC, 0x425d, 0x004d);
W99AV_WriteTVERegDW(GAIN_CAV, 0xa0a0, 0x0098);
#else
_WriteTVEGainWithChromPhase(GAIN_YC, 0x425d, 0x004d); //Kevin1.25, add
_WriteTVEGainWithChromPhase(GAIN_CAV, 0xa0a0, 0x0098); //Kevin1.25, add
#endif
#else
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0200);
W99AV_WriteTVERegDW(TVE_CR1, 0x2002, 0x0000);
#ifndef SUPPORT_ADJUST_CHROM_PHASE
W99AV_WriteTVERegDW(GAIN_YC, 0x4764, 0x0054);
W99AV_WriteTVERegDW(GAIN_CAV, 0xa0a0, 0x00a4);
#else
_WriteTVEGainWithChromPhase(GAIN_YC, 0x4764, 0x0054); //Kevin1.25, add
_WriteTVEGainWithChromPhase(GAIN_CAV, 0xa0a0, 0x00a4); //Kevin1.25, add
#endif
#endif
break;
case SETUP_SCREEN_VIDEO_OUTPUT_RGB:
#ifndef RGB_NO_SYNC_ON_G
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0240);
#else //kevin2.39, for SCART Macrovision: RGB sync is on the composite line
W99AV_WriteTVERegDW(TVE_CR0, 0x0000, 0x0200);
#endif
W99AV_WriteTVERegDW(TVE_CR1, 0x2004, 0x0000);
#ifndef SUPPORT_ADJUST_CHROM_PHASE
W99AV_WriteTVERegDW(GAIN_YC, 0x4764, 0x0054);
W99AV_WriteTVERegDW(GAIN_CAV, 0x1ce1, 0x10a4);
#else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -