⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hal.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 5 页
字号:
#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 + -