📄 hal.c
字号:
#ifdef SUPPORT_PRINTF
DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "bSampleFreq=%hx\n", bSampleFreq);
#endif
// Step 1: keep audio frequency in global variable
_bSampleFreq = bSampleFreq;
#ifdef DEBUG_ADAC_FREQ
DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "DAC Freq: %lx\n", _bSampleFreq);
#endif // #ifdef DEBUG_ADAC_FREQ
// Micky2.11a
// Program ADAC
HAL_ADAC_Set(_bSampleFreq, SUPPORT_PCM_WORD_LENGTH);
}
// **********************************************************************
// Function : HAL_LPCM_DownSample
// Description : Control LPCM downsampling
// Arguments : bOn, specify downsample procedure on/off
// Return : TRUE, allow to do downsample
// FALSE, dis-allow to do downsample
// Return : None
//*********************************************************************
// LLY2.30, rename it, and re-modify it as general API, not only for HAL_SetAudioDAC() to set.
//#define DEBUG_LPCM_DOWNSAMPLE
BYTE HAL_LPCM_DownSample(BYTE bOn)
{
if (__bAudioType==HAL_AUDIO_LPCM)
{
//SPDIF supports 32K, 44K, and 48KHz only
if( bOn && ((__SetupInfo.bAudioLPCM == SETUP_AUDIO_LPCM_48K) ||
(__SetupInfo.bAudioDigitalOut != SETUP_AUDIO_DIGITAL_OUT_OFF) ) )
{
#ifdef DEBUG_LPCM_DOWNSAMPLE
DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "Do LPCM downsample\n");
#endif // #ifdef DEBUG_LPCM_DOWNSMAPLE
HAL_WriteAM(HAL_AM_DOWNSAMPLE_EN, 1);
return TRUE;
}
else
{
#ifdef DEBUG_LPCM_DOWNSAMPLE
DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "Don't LPCM downsample\n");
#endif // #ifdef DEBUG_LPCM_DOWNSMAPLE
HAL_WriteAM(HAL_AM_DOWNSAMPLE_EN, 0);
return FALSE;
}
}
return FALSE;
}
// *******************************************************************************
// Function : HAL_SetTVE
// Description : Base on current user choice (ex. setup) to program TVE
// Arguments : None
// Return : None
// Side Effect : None
// *******************************************************************************
void HAL_SetTVE(void) //test OK on Non-Interlaced + NTSC + AV
{
int nGainOffset;
BYTE bScanMode, bTVSystem, bVideoOutput;
// LLY2.10, remove following protection procedure
// Since, current flow will not generate those case
#if 0
//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);
}
#endif // #if 0
//Scan mode
if ( __SetupInfo.bProgressiveScan == SETUP_PROGRESSIVE_SCAN_ON ) //Progressive Scan
{
bScanMode = PSCAN_ON;
}
else
{
bScanMode = PSCAN_OFF;
}
//TV system
if ( __bTVType == SETUP_SCREEN_TV_SYSTEM_NTSC)
{
bTVSystem = TVSYSTEM_NTSC;
}
else if ( __bTVType == SETUP_SCREEN_TV_SYSTEM_PAL)
{
bTVSystem = TVSYSTEM_PAL;
}
else if ( __bTVType == SETUP_SCREEN_TV_SYSTEM_PAL_M)
{
bTVSystem = TVSYSTEM_PALM;
}
else
{
bTVSystem = TVSYSTEM_PALN;
}
//Video output
if (__SetupInfo.bVideoOutput == SETUP_SCREEN_VIDEO_OUTPUT_NORMAL)
{
bVideoOutput = VIDEOOUTPUT_AV_SVIDEO;
}
else if (__SetupInfo.bVideoOutput == SETUP_SCREEN_VIDEO_OUTPUT_YUV)
{
bVideoOutput = VIDEOOUTPUT_AV_YUV;
}
else if (__SetupInfo.bVideoOutput == SETUP_SCREEN_VIDEO_OUTPUT_RGB)
{
bVideoOutput = VIDEOOUTPUT_AV_RGB;
}
else if (__SetupInfo.bVideoOutput == SETUP_SCREEN_VIDEO_OUTPUT_YUV_PSCAN)
{
bVideoOutput = VIDEOOUTPUT_YUV_PSCAN;
}
else if (__SetupInfo.bVideoOutput == SETUP_SCREEN_VIDEO_OUTPUT_RGB_PSCAN)
{
bVideoOutput = VIDEOOUTPUT_RGB_PSCAN;
}
else //if (__SetupInfo.bVideoOutput == SETUP_SCREEN_VIDEO_OUTPUT_VGA)
{
bVideoOutput = VIDEOOUTPUT_VGA_PSCAN;
}
// Alan2.35, to support the adjustment of the chroma
#ifdef SUPPORT_ADJUST_CHROM_PHASE
nGainOffset = __SetupInfo.bChromPhaseOffset - SETUP_SCREEN_CHROM_PHASE_0;
#else
nGainOffset = 0;
#endif
// Micky2.11a
if (!__bTVE_JPEG) //MPEG
{
HAL_TVE_Set(HAL_TVE_COLOR_SPACE_MPEG, bScanMode, bTVSystem, bVideoOutput, nGainOffset);
}
else
{
HAL_TVE_Set(HAL_TVE_COLOR_SPACE_JPEG, bScanMode, bTVSystem, bVideoOutput, nGainOffset);
}
}
//*****************************************************************************
// Description : Set video/audio buffer starting address and size
// Arguments : bType: specify Audio or Video buffer address setting
// - HAL_SETBUFFER_AUDIO: set audio buffer
// - HAL_SETBUFFER_VIDEO: set video buffer
// bMode: specify the desired mode for A/V buffer
// - HAL_AUDIOBUF_XXX: for audio buffer
// - HAL_VIDEOBUF_XXX: for video buffer
// Return : None
//*****************************************************************************
void HAL_SetBuffer(BYTE bType, BYTE bMode)
{
if(bType == HAL_SETBUFFER_AUDIO)
{
// LLY2.35, issue audio reset since F/W will change DSP unpack buffer address while AVI playback.
HAL_Reset(HAL_RESET_AUDIO) ;
// Micky2.11a
HAL_SetAudio_Buffer(__bAttrPlay, bMode);
}
else if(bType == HAL_SETBUFFER_VIDEO)
{
HAL_SetVideo_Buffer(bMode);
}
}
//***********************************************************************************************
// Description : Issue relative actions while entering / exiting power down mode
// Arguments : bPowerDown:
// ENTER_POWERDOWN: enter power down mode
// INITIAL_SYSTEM: power on
// | PSEUDO_SHUTDOWN: IR power off/on
// Return : None
// Side Effect :
// Notice : Not check REG_PLAT_CLK_GENERATOR_CONTROL for CT909S @ power saving mode
//***********************************************************************************************
void HAL_PowerDown(BYTE bPowerDown) //test OK except HAL_RESET_TOTAL, SrcFilter_*
{
#if 0
#ifndef IR_POWERDOWN_MODE
//#define IR_POWERDOWN_MODE PSEUDO_SHUTDOWN in customer.h
#define IR_POWERDOWN_MODE 1
#endif
#endif//
if(bPowerDown & ENTER_POWERDOWN) //always IR_POWERDOWN_MODE
{
HAL_Reset(HAL_RESET_TOTAL);
HAL_SetSCART(HAL_SCART_POWER_STANDBY);
// LLY1.50, HAL_TurnOffTVE() is rename as TVE_TurnOff()
//HAL_TurnOffTVE();
HAL_TVE_Off();
// LLY2.38, turn-off CCIR656 signal while power down mode to avoid noise during AV In mode
#ifdef SUPPORT_CCIR656
// CCIR656: Set DVI[22]=1
// CCIR601: Set DVI[22]=1 and SyncOut[23]=1
REG_PLAT_SYSTEM_CONFIGURATION1 &= ~(1<<22);
#endif // #ifdef SUPPORT_CCIR656
// LLY0.80, stop decoder/ parser
HAL_PlayCommand(COMMAND_STOP, 0);
HAL_ControlParser(HAL_PARSER_STOP, 0);
//close door & stop SERVO.
SrcFilter_CloseTray();
// wyc2.53-909P,
SrcFilter_Stop(__dwSFStreamID);
SrcFilter_PowerMode (SERVO_POWER_STOP) ;
// wyc2.05, need to call this function to exit source HW mode. Especially in USB mode.
SRCFilter_ExitSource();
// LLY0.80, turn-off main video display after decoder stop
DISP_DisplayCtrl(DISP_MAINVIDEO, FALSE); //kevin0.76, fix IR power off -> power on => previous picture appears first, then logo is shown
// Chuan1.08, Also disable PIP/OSD/SP
DISP_DisplayCtrl(DISP_PIP, FALSE);
DISP_DisplayCtrl(DISP_OSD, FALSE);
DISP_DisplayCtrl(DISP_SP1, FALSE);
DISP_DisplayCtrl(DISP_SP2, FALSE);
// LLY2.36, power dwon VDEC first
HAL_PowerControl(HAL_POWER_VDEC, HAL_POWER_SAVE);
// LLY2.31, don't change MPLL clock during power down mode while 16M solution.
// Since, SPI data can't be read-back while MPLL 146 --> 54MHz
#ifndef NOT_POWERDOWN_MPLL
// LLY2.13, remove old power down procedure, now will power down all PLL
HAL_PowerControl(HAL_POWER_PLL, HAL_POWER_SAVE);
#endif // #ifndef NOT_POWERDOWN_MPLL
// elmer2.75, power on USB
// wyc2.78-909P, enable the usbsrc
#ifdef SUPPORT_USB
HAL_PowerControl(HAL_POWER_USB, HAL_POWER_SAVE);
#endif //
}
else //INITIAL_SYSTEM
{
// LLY2.31, don't change MPLL clock during power down mode while 16M solution.
// Since, SPI data can't be read-back while MPLL 146 --> 54MHz
if( !(bPowerDown&HARDWARE_SHUTDOWN) )
{
// Wake up all function blocks
#ifndef NOT_POWERDOWN_MPLL
// LLY2.13, remove old wake up procedure, now will restore all PLL
HAL_PowerControl(HAL_POWER_PLL, HAL_POWER_NORMAL);
#endif // #ifndef NOT_POWERDOWN_MPLL
// LLY2.36, wake up VDEC after PLL ready.
HAL_PowerControl(HAL_POWER_VDEC, HAL_POWER_NORMAL);
}
// elmer2.75, power on USB
// wyc2.78-909P, enable the usbsrc
#ifdef SUPPORT_USB
HAL_PowerControl(HAL_POWER_USB, HAL_POWER_NORMAL);
#endif //
//LLY0.68, set border color
DISP_BGColorSet(MainBGColor, DISP_MAIN_BG);
// Based on setup info to do 1st TV encoder programming
// LLY0.63, don't initial TVE while power on standby mode
#ifdef POWERON_STANDBY
if(bPowerDown & IR_POWERDOWN_MODE)
#else // #ifdef POWERON_STANDBY
// LLY2.76, porting SY's code to support power switch
#ifdef SUPPORT_POWER_SWITCH
if ((__bPowerSw_StandBy) && (bPowerDown & IR_POWERDOWN_MODE))
#endif // #ifdef SUPPORT_POWER_SWITCH
#endif // #ifdef POWERON_STANDBY
{
HAL_TVEncoderInitial();
// LLY2.38, turn-on CCIR656 signal while wake up
// Since, the signal is off during power down mode to avoid noise during AV In mode
#ifdef SUPPORT_CCIR656
// CCIR656: Set DVI[22]=1
// CCIR601: Set DVI[22]=1 and SyncOut[23]=1
REG_PLAT_SYSTEM_CONFIGURATION1 |= (1<<22);
#endif // #ifdef SUPPORT_CCIR656
}
// reset ADAC if necessary when H/W power on
if( !(bPowerDown & IR_POWERDOWN_MODE) )
{
// LLY2.01. remove audio DAC reset procedure since nobody to implement the code
#if 0
HAL_ResetPeripheral(HAL_RESET_AUDIODAC, TRUE);
HAL_ResetPeripheral(HAL_RESET_AUDIODAC, FALSE);
#endif // #if 0
}
// Initialize SCART function as normal mode while wake-up from power down mode
// set as early as possble; otherwise, SCART TV will flash
HAL_SetSCART(HAL_SCART_POWER_ON);
// delay time for system wake
//UTL_DelayTime ( COUNT_250_MSEC, FALSE );
//kevin0.85, otherwise IR power on bo noise
HAL_Reset(HAL_RESET_AUDIO);
}
}
//**************************************************************
// Function : HAL_SetSCART
// Description : Set SCART IO pins
// Arguments : bScartType: the desired SCART mode
// Return : None
//**************************************************************
// LLY2.15, using general define for SCART GPIO group
void HAL_SetSCART(BYTE bScartType) //test OK
{
#ifdef SUPPORT_SCART_IF
if(__SetupInfo.bAspectRatio == SETUP_SCREEN_TV_TYPE_WIDE)
{
if(bScartType == HAL_SCART_POWER_ON)
bScartType = HAL_SCART_16_9;
}
// LLY2.30, revise the procedure for new circuit (only 3 transistors @ customer board)
// Notice: old circuit will use 4 transistors (only exit @ CTK EV board)
#ifdef SCART_USE_4_TRANSISTORS
switch (bScartType)
{
case HAL_SCART_CVBS:
HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_RGB, 0);
break ;
case HAL_SCART_RGB:
HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_RGB, 1);
break ;
case HAL_SCART_POWER_STANDBY:
HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_SW, 0);
HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_TV, 1);
break ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -