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

📄 hadac.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 2 页
字号:
// Return       :   None
// Side Effect  :   None
//****************************************************************
// LLY2.15, remove ADAC pin define to "pio.h"
#if 0
#define PIN_ADAC_SCK        10
#define PIN_ADAC_SDA        13
#define PIN_ADAC_CS6CH      11 //5.1
#define PIN_ADAC_CS2CH      14 //2CH
#endif  // #if 0

// LLY1.50, add for CT909S internal audio DAC
// LLY2.17, used for internal ADAC programming.
#ifdef  ENABLE_INTERNAL_ADAC
void    _Program_Internal_ADAC(BYTE bSampleFreq, BYTE bBitResolution)
{
    // Nothing need to do since default setting is 24bit, I2S format.
}
#endif  // #ifdef  ENABLE_INTERNAL_ADAC



#if AUDIO_DAC == DAC_WM8746
void    _ProgramAudioDAC(BYTE bSampleFreq, BYTE bBitResolution) //SCK/SDA/CS shares w/ UART1/UART2/PD
{
    BYTE    bTemp;

    ///// WM8746 /////
    // Step 1: get sample rate
    _GetSampleFreq(HAL_DAC_WM8746, bSampleFreq, bBitResolution);

    // Step 3: set sample rate
    // Init Audio Dac
    ADAC_SCK_HI();
    ADAC_SDA_HI();
    ADAC_CS6CH_HI();
    ADAC_SCK_LO();
    ADAC_SCK_HI();

    // write Reg0000011
    for (bTemp=0; bTemp<16; bTemp++)
    {
        if ((_wBitResolution >> (15 - bTemp)) & 0x01)
        {
            ADAC_SDA_HI();
        }
        else
        {
            ADAC_SDA_LO();
        }
        ADAC_SCK_LO();
        ADAC_SCK_HI();
    }

    // Activate 8746
    ADAC_CS6CH_LO();
    ADAC_CS6CH_HI();

    // write Reg0000010
    for (bTemp=0; bTemp<16; bTemp++)
    {
        if ((_wSampleRate >> (15 - bTemp)) & 0x01)
        {
            ADAC_SDA_HI();
        }
        else
        {
            ADAC_SDA_LO();
        }
        ADAC_SCK_LO();
        ADAC_SCK_HI();
    }

    // Activate 8746
    ADAC_CS6CH_LO();
    ADAC_CS6CH_HI();
}
#endif //#if AUDIO_DAC == DAC_WM8746


#if AUDIO_DAC == DAC_GENERAL
void    _ProgramAudioDAC(BYTE bSampleFreq, BYTE bBitResolution)
{
    //no need to program
}
#endif //#if AUDIO_DAC == DAC_GENERAL


#if AUDIO_DAC == DAC_CE2752
void	_ProgramAudioDAC(BYTE bSampleFreq, BYTE bBitResolution)
{
	//no need to program
}
#endif //#if AUDIO_DAC == DAC_GENERAL


#if AUDIO_DAC == DAC_PCM1723 //kevin1.01
void    _ProgramAudioDAC(BYTE bSampleFreq, BYTE bBitResolution)
{
    BYTE    bTemp;

    ///// PCM1723 /////
    // Step 1: get sample rate
    _GetSampleFreq(HAL_DAC_PCM1723, bSampleFreq, bBitResolution);

    // Step 3: set sample rate
    // Init Audio Dac
    ADAC_SCK_HI();
    ADAC_SDA_HI();
    ADAC_CS2CH_HI();
    ADAC_SCK_LO();
    ADAC_SCK_HI();

    // write Reg2
    for (bTemp=0; bTemp<16; bTemp++)
    {
        if ((_wSampleRate >> (15 - bTemp)) & 0x01)
        {
            ADAC_SDA_HI();
        }
        else
        {
            ADAC_SDA_LO();
        }
        ADAC_SCK_LO();
        ADAC_SCK_HI();
    }

    // Activate 1723
    ADAC_CS2CH_LO();
    ADAC_CS2CH_HI();

    // write Reg3
    for (bTemp=0; bTemp<16; bTemp++)
    {
        if ((_wBitResolution >> (15 - bTemp)) & 0x01)
        {
            ADAC_SDA_HI();
        }
        else
        {
            ADAC_SDA_LO();
        }
        ADAC_SCK_LO();
        ADAC_SCK_HI();
    }

    // Activate 1723
    ADAC_CS2CH_LO();
    ADAC_CS2CH_HI();
}
#endif //#if AUDIO_DAC == DAC_PCM1723



#if AUDIO_DAC == DAC_PCM1723_WM8746
void    _ProgramAudioDAC(BYTE bSampleFreq, BYTE bBitResolution) //SCK/SDA/CS shares w/ UART1/UART2/PD
{
    BYTE    bTemp;

    ///// PCM1723 /////
    // Step 1: get sample rate
    _GetSampleFreq(HAL_DAC_PCM1723, bSampleFreq, bBitResolution);

    // Step 3: set sample rate
    // Init Audio Dac
    ADAC_SCK_HI();
    ADAC_SDA_HI();
    ADAC_CS2CH_HI();
    ADAC_SCK_LO();
    ADAC_SCK_HI();

    // write Reg2
    for (bTemp=0; bTemp<16; bTemp++)
    {
        if ((_wSampleRate >> (15 - bTemp)) & 0x01)
        {
            ADAC_SDA_HI();
        }
        else
        {
            ADAC_SDA_LO();
        }
        ADAC_SCK_LO();
        ADAC_SCK_HI();
    }

    // Activate 1723
    ADAC_CS2CH_LO();
    ADAC_CS2CH_HI();

    // write Reg3
    for (bTemp=0; bTemp<16; bTemp++)
    {
        if ((_wBitResolution >> (15 - bTemp)) & 0x01)
        {
            ADAC_SDA_HI();
        }
        else
        {
            ADAC_SDA_LO();
        }
        ADAC_SCK_LO();
        ADAC_SCK_HI();
    }

    // Activate 1723
    ADAC_CS2CH_LO();
    ADAC_CS2CH_HI();


    ///// WM8746 /////
    // Step 1: get sample rate
    _GetSampleFreq(HAL_DAC_WM8746, bSampleFreq, bBitResolution);

    // Step 3: set sample rate
    // Init Audio Dac
    ADAC_SCK_HI();
    ADAC_SDA_HI();
    ADAC_CS6CH_HI();
    ADAC_SCK_LO();
    ADAC_SCK_HI();

    // write Reg0000011
    for (bTemp=0; bTemp<16; bTemp++)
    {
        if ((_wBitResolution >> (15 - bTemp)) & 0x01)
        {
            ADAC_SDA_HI();
        }
        else
        {
            ADAC_SDA_LO();
        }
        ADAC_SCK_LO();
        ADAC_SCK_HI();
    }

    // Activate 8746
    ADAC_CS6CH_LO();
    ADAC_CS6CH_HI();

    // write Reg0000010
    for (bTemp=0; bTemp<16; bTemp++)
    {
        if ((_wSampleRate >> (15 - bTemp)) & 0x01)
        {
            ADAC_SDA_HI();
        }
        else
        {
            ADAC_SDA_LO();
        }
        ADAC_SCK_LO();
        ADAC_SCK_HI();
    }

    // Activate 8746
    ADAC_CS6CH_LO();
    ADAC_CS6CH_HI();
}
#endif //#if AUDIO_DAC == DAC_PCM1723_WM8746

#if AUDIO_DAC == DAC_W571C161 //Dennis Liu
void	_ProgramAudioDAC(BYTE bSampleFreq, BYTE bBitResolution)
{
	BYTE	bTemp;

	// Step 1: get bBitResolution
	_GetSampleFreq(HAL_DAC_W571C161, bSampleFreq, bBitResolution);

    ADAC_SCK_HI();
    ADAC_SDA_HI();
    ADAC_CS6CH_HI();
    ADAC_SCK_LO();
    ADAC_SCK_HI();

    ADAC_CS6CH_LO(); // PL CS

	// write R3
	for (bTemp=0; bTemp<16; bTemp++)
	{
		if ((_wBitResolution << bTemp) & 0x8000)
		{
            ADAC_SDA_HI();
		}
		else
		{
            ADAC_SDA_LO();
		}
        ADAC_SCK_LO();
        ADAC_SCK_HI();
	}

    ADAC_CS6CH_HI();

	// write R10
	ADAC_CS6CH_LO();
	for (bTemp=0; bTemp<16; bTemp++)
	{
		if ((_wSampleRate << bTemp) & 0x8000)
		{
            ADAC_SDA_HI();
		}
		else
		{
            ADAC_SDA_LO();
		}
        ADAC_SCK_LO();
        ADAC_SCK_HI();
	}
    ADAC_CS6CH_HI();

}
#endif //#if AUDIO_DAC == DAC_PCM1723
void	HAL_ADAC_Set(BYTE bSampleFreq, BYTE bBitResolution)
{
    // Micky2.16, don't call HAL_SetClock, it will destroy the module independency
    _ProgramACLK(bSampleFreq);

    // LLY2.17, program internal ADAC if use it.
#ifdef  ENABLE_INTERNAL_ADAC
    _Program_Internal_ADAC(bSampleFreq, SUPPORT_PCM_WORD_LENGTH);
#endif  // #ifdef  ENABLE_INTERNAL_ADAC

    // Program External ADAC
#ifndef USE_INTERNAL_ADAC_ONLY
    _ProgramAudioDAC(bSampleFreq, SUPPORT_PCM_WORD_LENGTH);
#endif  // #ifndef USE_INTERNAL_ADAC_ONLY

}



⌨️ 快捷键说明

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