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

📄 audcodec.c

📁 M3355的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <comsub.h>
#include "audio.h"
#include "m3323reg.h"
/* 30121-18ho : Add ConfigACLKGEN() */
#include "audcodec.h"
#include "aprc25c.h"
#include <gpio.h>
#include <xgpio.h>
#include <platform.h>
//#include "m6311drv.h"



#define _USE_INTERNAL_PLL_
#define _I2S_MODE_DAC_

#undef DRV_PRINTF_ENA
//Total-Disable PRINTF
#ifndef DRV_PRINTF_ENA
#define PRINTF(...)
#endif

#define EDPRINTF(...)

tEndCondition ConfigACLKGEN(tSampFreq fs);
tEndCondition ConfigIECOutput(void);

tSampFreq LastSampFreq = C_INVALID_FS;

/* 30121-18ho : Add ConfigACLKGEN() */
extern BOOL IEC96KEN;
extern BOOL CSSDisk;
BOOL HighDec = FALSE;

/* 30609-00Michael : Add for DVD-Audio 192K */
BOOL DVDA192KEN = FALSE;
//31204-hope : Add For DAC Programming Flag to avoid double-config DAC
BOOL DAC192OK = FALSE;
BOOL DAC96OK = FALSE;
BOOL DAC48OK = FALSE;

/* 30121-19ho : Add initaudiodac() */
void initaudiodac(void);

/* iectable[DVDA192KEN][IEC96KEN][HighDec] */
WORD iectable[2][2][2] = { {{1,1},{1,2}},
                           {{1,1},{1,2}}};

static BYTE CDDADeemphasis = 0;
void SetCDDADeemphasis(BYTE deemphasis);

/*----------------------------------------------------------------------
 * Function_Name: Set_GPIO_Mute
 *
 * Description:	Short audio amplifier output to ground
 *
 * Arguments:
 *     BOOL fGPIOMute : TRUE Mute;
 *                      FLASE disable Mute
 *
 * Return Value: void
 *----------------------------------------------------------------------*/
void Set_GPIO_Mute(BOOL fGPIOMute)
{
#if 1 //for NO-LATCH-GPIO
    SET_GPIO_W(AUDIO_MUTE);
    if (fGPIOMute)/* mute */

    {
        SET_GPIO_HI(AUDIO_MUTE);
    }
    else
    {
        SET_GPIO_LOW(AUDIO_MUTE);
    }
    
#else
     SET_GPIO_W(AUDIO_MUTE);
    if (fGPIOMute)/* mute */
#if (_OP_MUTE_ACTIVE_LEVEL == _GPIO_MUTE_HI_ACTIVE_)

    {
        SET_GPIO_HI(AUDIO_MUTE);
    }
    else
    {
        SET_GPIO_LOW(AUDIO_MUTE);
    }
#else

    {
#if (_MODEL != LG_BASIC)
        SET_GPIO_LOW(AUDIO_MUTE);
#else        
		//20031106 Hope Add For LG_BASIC Model Low Mute.
		SET_GPIO_LOW(AUDIO_MUTE);
#endif        
    }
    else
    {
        SET_GPIO_HI(AUDIO_MUTE);
    }
#endif
#endif
}



/* 30121-19ho : Add initaudiodac() */
/*------------------------------------------------------------------------
 * Func. Name   : initaudiodac()
 * Description  : Initialize audio dac parameter
 * Arguments    : none
 * Return Value : none
 *------------------------------------------------------------------------*/
void initaudiodac(void)
{
    //You could program audio dac parameter here
    //WriteExternalDAC(0x09, 0x00, SCI_ML0);
}

/* 30121-20ho : (BEGIN) Add 256fs Support */
/*------------------------------------------------------------------------
 * Func. Name   : ConfigAudioPLL()
 * Description  : config hardware according to the Setup Menu
 * Arguments    : none
 * Return Value : none
 *------------------------------------------------------------------------*/
BOOL ConfigAudioPLL(tSampFreq fs)
{
#ifdef _USE_INTERNAL_PLL_
    BOOL ret_val;

    WORD M, N, K;
    WORD param1;
    BYTE param2;
    BYTE param3, L;
//40106-hope :: add for avoid redudant programming of 0x08 reg
    BYTE REG08;
    BYTE WaitFlag = FALSE;//040331-01tom_yang ForWaitingTime config
#ifdef _DEBUG_PRINTF_

    //PRINTF("AUDIO: ConfigAudioPLL() Begin.\n");
#endif

    ret_val = TRUE;
//40106-hope :: add for avoid redudant programming of 0x08 reg

    REG08 = GetM3323BYTE(0x08);
    REG08 = REG08 & 0xfe;

    /* This function would be customized for individual customer */
    /* 30331-01ho : (BEGIN) Improve Audio PLL Setting to get a more accurate Fs */
    switch (fs)
    {
    case C_8K:
    case C_16K:
    case C_32K:
    case C_64K:
    case C_128K:
        if (_AudioDAC_MCLK == AudioDAC_MCLK_384fs )
        {
            M = 142;                    /* 64kHz * 384 */
            N = 253;
            K = 22;
            L = 0;
        }
        else
        {   //AudioDAC_MCLK_256fs
            M = 142;
            N = 253;
            K = 25;
            L = 0;
        }
        /* 30130-31ho : Add APRC dm(Fs) Initialization depends on Fs of AP */
        if (M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr, 0x0000) == TimeOut)
            return (TimeOut);
        break;
    case C_11K:
    case C_22K:
    case C_44K:
    case C_88K:
    case C_176K:
        if (_AudioDAC_MCLK == AudioDAC_MCLK_384fs )
        {
            M = 25;                    /* 88.2kHz * 384 */
            N = 190;
            K = 4;
            L = 1;
        }
        else
        {   //AudioDAC_MCLK_256fs
            M = 25;
            N = 190;
            K = 6;
            L = 1;

        }
        /* 30130-31ho : Add APRC dm(Fs) Initialization depends on Fs of AP */
        if (M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr, 0x0001) == TimeOut)
            return (TimeOut);
        break;
    case C_12K:
    case C_24K:
    case C_48K:
    case C_96K:
    case C_192K:
        if (_AudioDAC_MCLK == AudioDAC_MCLK_384fs )
        {
            M = 142;                    /* 96kHz * 384 */
            N = 253;
            K = 20;
            L = 0;
        }
        else
        {   //AudioDAC_MCLK_256fs
            M = 142;
            N = 253;
            K = 22;
            L = 0;
        }
        /* 30130-31ho : Add APRC dm(Fs) Initialization depends on Fs of AP */
        if (M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr, 0x0002) == TimeOut)
            return (TimeOut);
        break;
    default:
        /* 30218-60ho : Add Default Audio PLL Setting For the default mode */
        if (_AudioDAC_MCLK == AudioDAC_MCLK_384fs )
        {
            M = 142;                    /* 96kHz * 384 */
            N = 253;
            K = 20;
            L = 0;
        }
        else
        {   //AudioDAC_MCLK_256fs
            M = 142;
            N = 253;
            K = 22;
            L = 0;
        }
#ifdef _DEBUG_PRINTF_

        //PRINTF("AUDIO: Invalid Sampling Frequency for PLL Setting.\n");
#endif
        ret_val = FALSE;
    }
    /* 30331-01ho : (END) Improve Audio PLL Setting to get a more accurate Fs */

    param1 = (N << 8) + M;
    param2 = K;
//40106-hope :: add for avoid redudant programming of 0x08 reg
    param3 = REG08 | L;
    SetM3323WORD(0x1E4, param1);       /* Config PLL */
    SetM3323BYTE(0x1E6, param2);
    SetM3323BYTE(0x008, param3);
	
    /* 30121-18ho : Add ConfigACLKGEN() */
    //31218-hope : Add this Part to avoid redudant Config ACLKGEN will cause pop-noise. 
    if ( LastSampFreq != fs )
    {
	    ConfigACLKGEN(fs);
	    LastSampFreq = fs;
	    WaitFlag = TRUE;//040331-01tom_yang ForWaitingTime config
    }

	// 31218-hope : Move From ConfigACLKGEN() to make sure IEC48K and IEC96K 
    ConfigIECOutput();        

   #if Aud_SampFreq_CHG_WaitTime_OPTION == Aud_SampFreq_CHG_WaitTime_ENABLE
     if((WaitFlag == TRUE))//040331-01tom_yang ForWaitingTime config
     {
    	EPRINTF("AUDIO samp freq diff,start\n");
    	dly_tsk(WaitingTime * 500);//040331-01tom_yang ForWaitingTime config
    	EPRINTF("AUDIO samp freq diff,end\n");
    	WaitFlag = FALSE;
     }
   #endif

#ifdef _DEBUG_PRINTF_

    //PRINTF("AUDIO: ConfigAudioPLL() End.\n");
#endif

#endif

    return (ret_val);
}
/* 30121-20ho : (END) Add 256fs Support */

/* 30121-18ho : (BEGIN) Add ConfigACLKGEN() */
/*------------------------------------------------------------------------
 * Func. Name : ConfigACLKGEN()
 * Description  : config hardware according to the Setup Menu
 * Arguments  : none
 * Return Value : none
 *------------------------------------------------------------------------*/
tEndCondition ConfigACLKGEN(tSampFreq fs)
{
    WORD param1, param2;
    WORD xclksel, dacmclksel, dacdspll, dacstsel;
    /* 30316-04ho : Separate IEC Setting From ADC and DAC Setting */
    //    WORD iecdspll;
    WORD adcdspll, adcextsel, adcintfsel;
    WORD daclrclk, dacbclk, daclradv;
    WORD firbit = 0;
    BYTE iecfs;

#ifdef _DEBUG_PRINTF_

    //PRINTF("AUDIO: ConfigACLKGEN() Begin.\n");
#endif

    if (_AudioDAC_MCLK == AudioDAC_MCLK_384fs )
    {
        xclksel = 1;
    }
    else
    {
        xclksel = 0;
    }

    dacmclksel = 0;


    if( _AudioDAC_TimeSlot == AudioDAC_32bit )
    {
        dacstsel = 2;
        if(_AudioDAC_Protocol == AudioDAC_Right_Justified)
        {
            firbit = 8;
        }
    }
    else if(_AudioDAC_TimeSlot == AudioDAC_16bit)
    {
        dacstsel = 0;
    }
    else  //AudioDAC_24bit
    {
        dacstsel = 1;
    }
    /* 32 slot
      dacstsel = 2;
    */
    if(_AudioDAC_Protocol == AudioDAC_I2S )
    {
        daclrclk = 0;
        dacbclk = 0;
        daclradv = 0;
    }
    else if(_AudioDAC_Protocol == AudioDAC_Right_Justified)
    {
        daclrclk = 1;
        dacbclk = 0;
        daclradv = 1;

    }
    else //AudioDAC_Left_Justified
    {
        daclrclk = 1;
        dacbclk = 0;
        daclradv = 1;
    }

    iecfs = GetM3323BYTE(0x1EF);
    iecfs = iecfs & 0xf0;
    //    iecdspll = 1;
    switch (fs)
    {
        /*  /2 */
    case C_8K:
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_PlayTime_Adr	, 4000);
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr			, 0x0000);
        dacdspll = 3;
        HighDec = FALSE;
        DVDA192KEN  = FALSE;
        iecfs = iecfs | 0x0C;
        break;
    case C_11K:
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_PlayTime_Adr	, 5513);
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr			, 0x0001);
        dacdspll = 3;
        HighDec = FALSE;
        DVDA192KEN  = FALSE;
        iecfs = iecfs | 0x00;
        break;
    case C_12K:
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_PlayTime_Adr	, 6000);
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr			, 0x0002);
        dacdspll = 3;
        HighDec = FALSE;
        DVDA192KEN  = FALSE;
        iecfs = iecfs | 0x04;
        break;

        /*  /2 */
    case C_16K:
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_PlayTime_Adr	, 8000);
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr			, 0x0000);
        dacdspll = 2;
        HighDec = FALSE;
        DVDA192KEN  = FALSE;
        iecfs = iecfs | 0x0C;
        break;
    case C_22K:
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_PlayTime_Adr	, 11025);
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr			, 0x0001);
        dacdspll = 2;
        HighDec = FALSE;
        DVDA192KEN  = FALSE;
        iecfs = iecfs | 0x02;
        break;
    case C_24K:
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_PlayTime_Adr	, 12000);
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr			, 0x0002);
        dacdspll = 2;
        HighDec = FALSE;
        DVDA192KEN  = FALSE;
        iecfs = iecfs | 0x06;
        break;

        /*  /2 */
    case C_32K:
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_PlayTime_Adr	, 16000);
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr			, 0x0000);
        dacdspll = 1;
        HighDec = FALSE;
        DVDA192KEN  = FALSE;
        iecfs = iecfs | 0x0C;
        break;
    case C_44K:
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_PlayTime_Adr	, 22050);
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr			, 0x0001);
        dacdspll = 1;
        HighDec = FALSE;
        DVDA192KEN  = FALSE;
        iecfs = iecfs | 0x00;
        break;
    case C_48K:
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_PlayTime_Adr	, 24000);
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr			, 0x0002);
        dacdspll = 1;
        HighDec = FALSE;
        DVDA192KEN  = FALSE;
        iecfs = iecfs | 0x04;
        break;

        /*  /4 */
    case C_64K:
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_PlayTime_Adr	, 16000);
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr			, 0x0000);
        dacdspll = 0;
        HighDec = TRUE;
        DVDA192KEN  = FALSE;
        iecfs = iecfs | 0x0C;
        break;
    case C_88K:
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_PlayTime_Adr	, 22050);
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr			, 0x0001);
        dacdspll = 0;
        HighDec = TRUE;
        DVDA192KEN  = FALSE;
        iecfs = iecfs | 0x01;
        break;
    case C_96K:
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_PlayTime_Adr	, 24000);
        M3323AudioMemWrite(APRC_DSP, DMX, APRC_Fs_Adr			, 0x0002);
        dacdspll = 0;
        HighDec = TRUE;
        DVDA192KEN  = FALSE;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -