📄 hal1.c
字号:
// 1 0 Half 16/22.05/24k 1 0 32k group
// bit[10:9]=11 for register 3;
switch(bSampleFreq)
{
case HAL_AUDIO_16BIT_16K:
_wBitResolution = 0x0520 ; // bit[4:3]=00;
_wSampleRate = 0x06A0 ; // bit[7:4]=1010;
break;
case HAL_AUDIO_16BIT_32K:
_wBitResolution = 0x0520 ; // bit[4:3]=00;
_wSampleRate = 0x0680 ; // bit[7:4]=1000;
break;
case HAL_AUDIO_16BIT_64K:
_wBitResolution = 0x0520 ; // bit[4:3]=00;
_wSampleRate = 0x0690 ; // bit[7:4]=1001;
break;
case HAL_AUDIO_16BIT_24K:
_wBitResolution = 0x0520 ; // bit[4:3]=00;
_wSampleRate = 0x0660 ; // bit[7:4]=0110;
break;
case HAL_AUDIO_16BIT_48K:
_wBitResolution = 0x0520 ; // bit[4:3]=00; PCM1723 Register 2
_wSampleRate = 0x0640 ; // bit[7:4]=0100; PCM1723 Register 3
break;
case HAL_AUDIO_16BIT_96K:
_wBitResolution = 0x0520 ; // bit[4:3]=00;
_wSampleRate = 0x0650 ; // bit[7:4]=0101;
break;
case HAL_AUDIO_16BIT_22K:
_wBitResolution = 0x0520 ; // bit[4:3]=00;
_wSampleRate = 0x0620 ; // bit[7:4]=0010;
break;
case HAL_AUDIO_16BIT_44K:
_wBitResolution = 0x0520 ; // bit[4:3]=00;
_wSampleRate = 0x0600 ; // bit[7:4]=0000;
break ;
case HAL_AUDIO_16BIT_88K:
_wBitResolution = 0x0520 ; // bit[4:3]=00;
_wSampleRate = 0x0610 ; // bit[7:4]=0001;
break;
////////////////////////////////////////////////////////////////////
case HAL_AUDIO_20BIT_16K:
_wBitResolution = 0x0528 ; // bit[4:3]=01;
_wSampleRate = 0x06A0 ; // bit[7:4]=1010;
break;
case HAL_AUDIO_20BIT_32K:
_wBitResolution = 0x0528 ; // bit[4:3]=01;
_wSampleRate = 0x0680 ; // bit[7:4]=1000;
break;
case HAL_AUDIO_20BIT_64K:
_wBitResolution = 0x0528 ; // bit[4:3]=01;
_wSampleRate = 0x0690 ; // bit[7:4]=1001;
break;
case HAL_AUDIO_20BIT_24K:
_wBitResolution = 0x0528 ; // bit[4:3]=01;
_wSampleRate = 0x0660 ; // bit[7:4]=0110;
break;
case HAL_AUDIO_20BIT_48K:
_wBitResolution = 0x0528 ; // bit[4:3]=01;
_wSampleRate = 0x0640 ; // bit[7:4]=0100;
break;
case HAL_AUDIO_20BIT_96K:
_wBitResolution = 0x0528 ; // bit[4:3]=01;
_wSampleRate = 0x0650 ; // bit[7:4]=0101;
break;
case HAL_AUDIO_20BIT_22K:
_wBitResolution = 0x0528 ; // bit[4:3]=01;
_wSampleRate = 0x0620 ; // bit[7:4]=0010;
break;
case HAL_AUDIO_20BIT_44K:
_wBitResolution = 0x0528 ; // bit[4:3]=01;
_wSampleRate = 0x0600 ; // bit[7:4]=0000;
break ;
case HAL_AUDIO_20BIT_88K:
_wBitResolution = 0x0528 ; // bit[4:3]=01;
_wSampleRate = 0x0610 ; // bit[7:4]=0001;
break;
///////////////////////////////////////////////////////////////////////
case HAL_AUDIO_24BIT_16K:
_wBitResolution = 0x0530 ; // bit[4:3]=10;
_wSampleRate = 0x06A0 ; // bit[7:4]=1010;
break;
case HAL_AUDIO_24BIT_32K:
_wBitResolution = 0x0530 ; // bit[4:3]=10;
_wSampleRate = 0x0680 ; // bit[7:4]=1000;
break;
case HAL_AUDIO_24BIT_64K:
_wBitResolution = 0x0530 ; // bit[4:3]=10;
_wSampleRate = 0x0690 ; // bit[7:4]=1001;
break;
case HAL_AUDIO_24BIT_24K:
_wBitResolution = 0x0530 ; // bit[4:3]=10;
_wSampleRate = 0x0660 ; // bit[7:4]=0110;
break;
case HAL_AUDIO_24BIT_48K:
_wBitResolution = 0x0530 ; // bit[4:3]=10;
_wSampleRate = 0x0640 ; // bit[7:4]=0100;
break;
case HAL_AUDIO_24BIT_96K:
_wBitResolution = 0x0530 ; // bit[4:3]=10;
_wSampleRate = 0x0650 ; // bit[7:4]=0101;
break;
case HAL_AUDIO_24BIT_22K:
_wBitResolution = 0x0530 ; // bit[4:3]=10;
_wSampleRate = 0x0620 ; // bit[7:4]=0010;
break;
case HAL_AUDIO_24BIT_44K:
_wBitResolution = 0x0530 ; // bit[4:3]=10;
_wSampleRate = 0x0600 ; // bit[7:4]=0000;
break ;
case HAL_AUDIO_24BIT_88K:
_wBitResolution = 0x0530 ;
_wSampleRate = 0x0610 ; // bit[7:4]=0001;
break;
}
//Kevin0.83, add
#ifdef USING_256_MODE_ACLK_FREQ
_wSampleRate |= 0x0008; // bit[3]=1 for 256fs; 0 for 384fs
#endif
//Kevin1.07-3, add
#if (AUDIO_ALIGN_FORMAT == I2S_ALIGN)
_wSampleRate |= 0x0001; // bit[0]=0 for Right-aligned; 1 for I2S-aligned
#endif
// wyc.276_5, add de-emphasis code in PCM1723.
#ifdef SUPPORT_AUDIO_DEEMPHASYS //0000010
if (__bHAL1_Deemphasis)
{
_wBitResolution |= 0x2;
}
#endif
break;
case HAL_DAC_W6630: // PH13 Sunny 0.49A modify
// wyc.170, set audio DAC for the CDDA pre-emphasis
#ifdef SUPPORT_AUDIO_DEEMPHASYS
if (__bHAL1_Deemphasis)
{
if (bSampleFreq == AUDIO_FREQ_48K)
_wBitResolution = 0x0402; // DE[1](bit 2) = 0, DE[0](bit 1) = 1; Can Reference W6630 Spec
else if (bSampleFreq == AUDIO_FREQ_44K)
_wBitResolution = 0x0404; // DE[1](bit 2) = 1, DE[0](bit 1) = 0; Can Reference W6630 Spec
else
_wBitResolution = 0x0400 ;
}
else
#endif // SUPPORT_AUDIO_DEEMPHASYS
_wBitResolution = 0x0400 ;
// end ..
_wSampleRate = 0x0690 ;
break;
case HAL_DAC_PCM1716: // PH13 Sunny 0.49A modify
_wBitResolution = 0x0400 ;
_wSampleRate = 0x0600 ;
break;
case HAL_DAC_AV2188:
if (bSampleFreq >= HAL_AUDIO_16BIT_BASE && bSampleFreq <= HAL_AUDIO_16BIT_END)
_wBitResolution = 0x30 ;
else if (bSampleFreq >= HAL_AUDIO_20BIT_BASE && bSampleFreq <= HAL_AUDIO_20BIT_END)
_wBitResolution = 0x10 ;
else if (bSampleFreq >= HAL_AUDIO_24BIT_BASE && bSampleFreq <= HAL_AUDIO_24BIT_END)
_wBitResolution = 0x00 ;
break ;
case HAL_DAC_PCM1602://KWANG
if (bSampleFreq >= HAL_AUDIO_16BIT_BASE && bSampleFreq <= HAL_AUDIO_16BIT_END)
_wBitResolution = 0x090B ;
else if (bSampleFreq >= HAL_AUDIO_20BIT_BASE && bSampleFreq <= HAL_AUDIO_20BIT_END)
_wBitResolution = 0x0909 ;
else if (bSampleFreq >= HAL_AUDIO_24BIT_BASE && bSampleFreq <= HAL_AUDIO_24BIT_END)
_wBitResolution = 0x0908 ;
break ;
// TCC273e, add control for different word length
case HAL_DAC_WM8746:
if (bSampleFreq >= HAL_AUDIO_16BIT_BASE && bSampleFreq <= HAL_AUDIO_16BIT_END)
_wBitResolution = 0x0600 ;
else if (bSampleFreq >= HAL_AUDIO_20BIT_BASE && bSampleFreq <= HAL_AUDIO_20BIT_END)
_wBitResolution = 0x0610 ;
else if (bSampleFreq >= HAL_AUDIO_24BIT_BASE && bSampleFreq <= HAL_AUDIO_24BIT_END)
_wBitResolution = 0x0620 ;
//Kevin1.07-3, add
#if (AUDIO_ALIGN_FORMAT == I2S_ALIGN)
_wBitResolution |= 0x0002; // bit[1:0]=0 for Right-aligned; 1 for Left-aligned; 2 for I2S-aligned
#elif (AUDIO_ALIGN_FORMAT == LEFT_ALIGN)
_wBitResolution |= 0x0001;
#endif
break ;
case HAL_DAC_PCM1742:
#if (AUDIO_ALIGN_FORMAT == RIGHT_ALIGN)
if (bSampleFreq >= HAL_AUDIO_16BIT_BASE && bSampleFreq <= HAL_AUDIO_16BIT_END)
_wBitResolution = 0x1403;
else if (bSampleFreq >= HAL_AUDIO_20BIT_BASE && bSampleFreq <= HAL_AUDIO_20BIT_END)
_wBitResolution = 0x1401;
else if (bSampleFreq >= HAL_AUDIO_24BIT_BASE && bSampleFreq <= HAL_AUDIO_24BIT_END)
_wBitResolution = 0x1400;
#elif (AUDIO_ALIGN_FORMAT == I2S_ALIGN) //Kevin1.24
_wBitResolution = 0x1404;
#else //LEFT_ALIGN
_wBitResolution = 0x1405;
#endif
break ;
}
}
//#######################################################################
// Function : _ProgramAudioDAC
// Description : Program audio DAC depending on desired audio DAC type
// Parameters : bSampleFreq, the desired samples/freq.
// Return : None
// Side Effect :
// Note : Only support for DOS Testing board
//#######################################################################
#if AUDIO_DAC == DAC_PCM1606 //hwtan275
void _ProgramAudioDAC(BYTE bSampleFreq)
{
_ProgramDACACLKInput();
}
#endif // #if AUDIO_DAC == DAC_PCM1606
#if AUDIO_DAC == DAC_PCM1742 //hwtan273
void _ProgramAudioDAC(BYTE bSampleFreq)
{
#ifndef DAC_PCM1742HW_MODE
_ProgramDACACLKInput();
//step 1, initial DAC
// wyc.277a-2
#ifdef EXT_IO
__wW99AVGPCRLow &= 0xF000; // PH GP4
W99AV_WriteRegDW(GPCR,__wW99AVGPCRLow, __wW99AVGPCRHigh);
HAL1_ExtIOCtrl(EXT_ADACCS_LO);
#else //EXT_IO
__wW99AVGPCRLow |= 0x0410; // PH GP4
W99AV_WriteRegDW(GPCR,__wW99AVGPCRLow, __wW99AVGPCRHigh);
#endif //
_wBitResolution = 0x1200; // 0000011 ...18..YHsu
PCM1742_Write();
// config mute / deemphasis / power down / attenuator / infinite zero / output control
// no mute no as programmed disable stereo
#ifdef SUPPORT_AUDIO_DEEMPHASYS //0000010...19...YHsu
if (__bHAL1_Deemphasis)
{
_wBitResolution = 0x1300;
}
else
#endif
_wBitResolution = 0x1310;
PCM1742_Write();
// config 6 ch's attenuation, cuttent value is 0db
_wBitResolution = 0x11ff; //0000000...17..YHsu
PCM1742_Write();
_wBitResolution = 0x10ff; //0000001...16..YHsu
PCM1742_Write();
_GetSampleFreq(HAL_DAC_PCM1742, bSampleFreq);
PCM1742_Write();
_wBitResolution = 0x1604; //0000101 ...22..YHsu
PCM1742_Write();
#else
__wW99AVGPCRLow |= 0x0FC0;
__wW99AVGPCRLow &= 0xFFC0; // GP O/P= NULL, pull low all 3pins
W99AV_WriteRegDW ( GPCR , __wW99AVGPCRLow, __wW99AVGPCRHigh);
#endif
}
void PCM1742_Write(void)
{
#ifndef DAC_PCM1742HW_MODE
// wyc.277a-2
#ifdef EXT_IO
HAL1_ExtIOCtrl(EXT_ADACCS_HI);
for (__bHAL1Tmp1=0; __bHAL1Tmp1<16; __bHAL1Tmp1++)
{
HAL1_ExtIOCtrl(EXT_SCK_LO);
if ((_wBitResolution >> (15 - __bHAL1Tmp1)) & 0x01)
HAL1_ExtIOCtrl(EXT_SDA_HI);
else
HAL1_ExtIOCtrl(EXT_SDA_LO);
Delay10us(); // TCC275c, delay 10us to latch
HAL1_ExtIOCtrl(EXT_SCK_HI);
}
HAL1_ExtIOCtrl(EXT_ADACCS_LO);
HAL1_ExtIOCtrl(EXT_ADACCS_HI);
#else //EXT_IO
__wW99AVGPCRLow &= 0xffef; // PL PG4 ..for pcm1742
W99AV_WriteRegDW(GPCR,__wW99AVGPCRLow, __wW99AVGPCRHigh);
for (__bHAL1Tmp1=0; __bHAL1Tmp1<16; __bHAL1Tmp1++)
{
__sbI2Csdat=0; // PL MC
if ((_wBitResolution >> (15 - __bHAL1Tmp1)) & 0x01)
__sbI2Csclk=1; // PH MD
else
__sbI2Csclk=0; // PL MD
Delay10us(); // TCC275c, delay 10us to latch
__sbI2Csdat=1; // PH MC
}
__wW99AVGPCRLow |= 0x0410; // PH GP4 ..for PCM1742..YHsu
W99AV_WriteRegDW(GPCR,__wW99AVGPCRLow, __wW99AVGPCRHigh);
__wW99AVGPCRLow &= 0xffef; // PL PG4
W99AV_WriteRegDW(GPCR,__wW99AVGPCRLow, __wW99AVGPCRHigh);
#endif // EXT_IO
#endif
}
#endif
// TCC275c, add delay for WM8746 and PCM1742
#pragma NOAREGS
void Delay10us(void)
{
BYTE data c;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -