📄 hadac.c
字号:
// 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 + -