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

📄 hal1.c

📁 车载电子影音系统dvd播放系统原程序代码
💻 C
📖 第 1 页 / 共 5 页
字号:
        //  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 + -