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

📄 amp.c

📁 车载电子影音系统dvd播放系统原程序代码
💻 C
📖 第 1 页 / 共 3 页
字号:
#if (AMP_VOLUME_SOURCE == DIGITAL_DDX8000)
    extern BYTE __icVFDnow;

    __icVFDnow=0x01;                                                           // Step 1: Disable PANEL_KEY_SCAN

    __sbI2Csdat=1;                                                             // Step 2: Start condition
    HAL1_ExtIOCtrl(EXT_WEN_HI);
    __sbI2Csdat=0;

    for(bDDXI2CByteCount=1;bDDXI2CByteCount<=_REG[0];bDDXI2CByteCount++)       // Step 3: Send data
    {
        for(bDDXI2CBitCount=0;bDDXI2CBitCount<8;bDDXI2CBitCount++)
        {
            HAL1_ExtIOCtrl(EXT_WEN_LO);
            __sbI2Csdat=(_REG[bDDXI2CByteCount] & 0x80)?1:0;
            HAL1_ExtIOCtrl(EXT_WEN_HI);
            _REG[bDDXI2CByteCount]<<=1;
        }
        HAL1_ExtIOCtrl(EXT_WEN_LO);
        __sbI2Csdat=1;
        HAL1_ExtIOCtrl(EXT_WEN_HI);
    }

    __sbI2Csdat=0;                                                 // Step 4: Stop condition
    __sbI2Csdat=1;

    HAL1_ExtIOCtrl(EXT_WEN_LO);
    __icVFDnow=0x00;
#endif // #if (AMP_VOLUME_SOURCE == DIGITAL_DDX8000)
}

// wyc.278a-1, function to support I2C read function in DDX8000.
void _AMP_ReadReg(void)
{
#if (AMP_VOLUME_SOURCE == DIGITAL_DDX8000)
    extern BYTE __icVFDnow;

    _REG[3]=_REG[1] | 0x01;
    __icVFDnow=0x01;                                               // Step 1: Disable PANEL_KEY_SCAN

    __sbI2Csdat=1;                                                 // Step 2: Start condition
    HAL1_ExtIOCtrl(EXT_WEN_HI);
    __sbI2Csdat=0;

    for(bDDXI2CByteCount=1;bDDXI2CByteCount<=2;bDDXI2CByteCount++)  // Step 3: Send data
    {
        for(bDDXI2CBitCount=0;bDDXI2CBitCount<8;bDDXI2CBitCount++)
        {
            HAL1_ExtIOCtrl(EXT_WEN_LO);
            __sbI2Csdat=(_REG[bDDXI2CByteCount] & 0x80)?1:0;
            HAL1_ExtIOCtrl(EXT_WEN_HI);
            _REG[bDDXI2CByteCount]<<=1;
        }
        HAL1_ExtIOCtrl(EXT_WEN_LO);
        __sbI2Csdat=1;
        HAL1_ExtIOCtrl(EXT_WEN_HI);
    }

    HAL1_ExtIOCtrl(EXT_WEN_LO);                                    // Step 4: Start condition
    __sbI2Csdat=1;
    HAL1_ExtIOCtrl(EXT_WEN_HI);
    __sbI2Csdat=0;

    for(bDDXI2CBitCount=0;bDDXI2CBitCount<8;bDDXI2CBitCount++)
    {
        HAL1_ExtIOCtrl(EXT_WEN_LO);
        __sbI2Csdat=(_REG[3] & 0x80)?1:0;
        HAL1_ExtIOCtrl(EXT_WEN_HI);
        _REG[3]<<=1;
    }
    HAL1_ExtIOCtrl(EXT_WEN_LO);
    __sbI2Csdat=1;
    HAL1_ExtIOCtrl(EXT_WEN_HI);

    for(bDDXI2CByteCount=1;bDDXI2CByteCount<=_REG[0];bDDXI2CByteCount++)
    {
        _REG[bDDXI2CByteCount]=0;
        for(bDDXI2CBitCount=0;bDDXI2CBitCount<8;bDDXI2CBitCount++)
        {
            HAL1_ExtIOCtrl(EXT_WEN_LO);
            __sbI2Csdat=1;
            _REG[bDDXI2CByteCount]<<=1;
            HAL1_ExtIOCtrl(EXT_WEN_HI);
            if(__sbI2Csdat)
                _REG[bDDXI2CByteCount] |= 0x01;
        }

        HAL1_ExtIOCtrl(EXT_WEN_LO);
        __sbI2Csdat=0;
        HAL1_ExtIOCtrl(EXT_WEN_HI);
    }

    __sbI2Csdat=0;                                                 // Stop condition
    __sbI2Csdat=1;

    HAL1_ExtIOCtrl(EXT_WEN_LO);
    __icVFDnow=0x00;
#endif // #if (AMP_VOLUME_SOURCE == DIGITAL_DDX8000)
}

/**************************************************************
 * All kinds of amplifiers mute function, include PCM1723 / WM8746 and DDX8000 dac mute
 ***************************************************************/
void AMP_mute(BYTE mode)
{
#if (AMP_VOLUME_SOURCE == DIGITAL_DDX8000)
    extern BYTE __bPeripheralIN;

    _REG[0]=1;
    _REG[1]=DDX8000_ADDR;
    _REG[2]=DDX_CONFF_REG;
    _AMP_ReadReg();
    switch (mode)
    {
        case    DAC_MUTE_OFF:
            if(!(__bPeripheralIN & EARPHONE_ACTIVE))            // Added by KCHong, earphone mute, 278b-Mustek
            {
                if(!(_REG[1] & EAPD))
                {
                    _REG[0]=3;
                    _REG[1]=DDX8000_ADDR;
                    _REG[2]=DDX_CONFF_REG;
                    _REG[3]=EAPD + COD + SID;
                    _AMP_WriteReg();
                }
            }
            _GetSampleFreq(HAL_DAC_PCM1723, _bSampleFreq);
            _wBitResolution &= 0xFFFE;
            PCM1723_Write(_wBitResolution);
            break;
        case    DAC_MUTE_ON:
            _GetSampleFreq(HAL_DAC_PCM1723, _bSampleFreq);
            _wBitResolution |= 0x1;
            PCM1723_Write(_wBitResolution);
        case    DAC_MUTE_AMPLIFIER:
            if((_REG[1] & EAPD))                                // Added by KCHong, earphone mute, 278b-Mustek
            {
                _REG[0]=3;
                _REG[1]=DDX8000_ADDR;
                _REG[2]=DDX_CONFF_REG;
                _REG[3]=COD + SID;
                _AMP_WriteReg();
            }
            break;
    }

#elif (AMP_VOLUME_SOURCE == DIGITAL_DDX8000) // AMP_VOLUME_SOURCE
    switch (mode)
    {
        case    DAC_MUTE_OFF:
            if (__bHAL1_Deemphasis)
                _wBitResolution = 0x0522 ;
            else
                _wBitResolution = 0x0520 ;
            WM8746_Write();  // mute off the audio from DAC
            break;
        case    DAC_MUTE_ON:
            if (__bHAL1_Deemphasis)
                _wBitResolution = 0x0523 ;
            else
                _wBitResolution = 0x0521 ;
            WM8746_Write();  // mute on the audio from DAC
            break;
    }
#endif // #if (AMP_VOLUME_SOURCE == DIGITAL_DDX8000)
}


// LLY2.78b-2, base on HKC modification to do audio channel remapping action
//  **************************************************************************
//  Function    :   AMP_ChannelRemapping
//  Description :   Program relative register to do audio channel remapping
//  Argument    :   bMode, specify the desired channel remapping mode
//                  CHANNEL_REMAPPING_NONE, normal mode
//                  CHANNEL_REMAPPING_2_TO_2_DOT_1, 2 -> 2.1 mode
//                  CHANNEL_REMAPPING_2_TO_5_DOT_1, 2 -> 5.1 mode
//  Return      :   None
//  Side Effect :
//  **************************************************************************
void AMP_ChannelReMapping(BYTE bMode)
{
#if (AMP_VOLUME_SOURCE == DIGITAL_DDX8000)
    switch(bMode)
    {
        case CHANNEL_REMAPPING_NONE:
        case CHANNEL_REMAPPING_2_TO_2_DOT_1:
            _REG[0]=6;
            _REG[1]=DDX8000_ADDR;
            _REG[2]=DDX_C12IM_REG;
#ifdef BINARY_OUTPUT_MODE
#ifdef DDX8228_BOARD_V10
            _REG[3]=(MAPPING_SURROUND_RIGHT_IN << 4) + MAPPING_CENTER_IN;
            _REG[4]=(MAPPING_SURROUND_LEFT_IN << 4) + MAPPING_HEADPHONE_LEFT_IN;
            _REG[5]=(MAPPING_SUBWOOFER_IN << 4) + MAPPING_RIGHT_IN;
            _REG[6]=(MAPPING_HEADPHONE_RIGHT_IN << 4) + MAPPING_LEFT_IN;
#else
            _REG[3]=(MAPPING_SURROUND_LEFT_IN << 4) + MAPPING_RIGHT_IN;
            _REG[4]=(MAPPING_SURROUND_RIGHT_IN << 4) + MAPPING_LEFT_IN;
            _REG[5]=(MAPPING_SUBWOOFER_IN << 4) + MAPPING_CENTER_IN;
            _REG[6]=(MAPPING_HEADPHONE_RIGHT_IN << 4) + MAPPING_HEADPHONE_LEFT_IN;
#endif
#else
            _REG[3]=(MAPPING_RIGHT_IN << 4) + MAPPING_LEFT_IN;
            _REG[4]=(MAPPING_SURROUND_RIGHT_IN << 4) + MAPPING_SURROUND_LEFT_IN;
            _REG[5]=(MAPPING_SUBWOOFER_IN << 4) + MAPPING_CENTER_IN;
            _REG[6]=(MAPPING_HEADPHONE_RIGHT_IN << 4) + MAPPING_HEADPHONE_LEFT_IN;
#endif
            _AMP_WriteReg();
            break;
        case CHANNEL_REMAPPING_2_TO_5_DOT_1:
            _REG[0]=6;
            _REG[1]=DDX8000_ADDR;
            _REG[2]=DDX_C12IM_REG;
#ifdef BINARY_OUTPUT_MODE
#ifdef DDX8228_BOARD_V10
            _REG[3]=(MAPPING_SURROUND_RIGHT_IN << 4) + MAPPING_CENTER_IN;
            _REG[4]=(MAPPING_SURROUND_LEFT_IN << 4) + MAPPING_HEADPHONE_LEFT_IN;
            _REG[5]=(MAPPING_SUBWOOFER_IN << 4) + MAPPING_RIGHT_IN;
            _REG[6]=(MAPPING_HEADPHONE_RIGHT_IN << 4) + MAPPING_LEFT_IN;
#else
            _REG[3]=(MAPPING_LEFT_IN << 4) + MAPPING_RIGHT_IN;
            _REG[4]=(MAPPING_RIGHT_IN << 4) + MAPPING_LEFT_IN;
            _REG[5]=(MAPPING_SUBWOOFER_IN << 4) + MAPPING_RIGHT_IN;
            _REG[6]=(MAPPING_HEADPHONE_RIGHT_IN << 4) + MAPPING_HEADPHONE_LEFT_IN;
#endif
#else
            _REG[3]=(MAPPING_RIGHT_IN << 4) + MAPPING_LEFT_IN;
            _REG[4]=(MAPPING_RIGHT_IN << 4) + MAPPING_LEFT_IN;
            _REG[5]=(MAPPING_RIGHT_IN << 4) + MAPPING_LEFT_IN;
            _REG[6]=(MAPPING_HEADPHONE_RIGHT_IN << 4) + MAPPING_HEADPHONE_LEFT_IN;
#endif
            _AMP_WriteReg();
            break;
    }

    switch(bMode)
    {
        case CHANNEL_REMAPPING_NONE:
            _REG[0]=3;
            _REG[1]=DDX8000_ADDR;
            _REG[2]=DDX_CONFA_REG;
#ifdef BINARY_OUTPUT_MODE
            _REG[3]=MPC + IR_32K_44K1_48K + FS_256;         // Value of conf. A(0x00)
#else
            _REG[3]=MPC + HPE + IR_32K_44K1_48K + FS_256;   // Value of conf. A(0x00)
#endif
            _AMP_WriteReg();
            break;
        case CHANNEL_REMAPPING_2_TO_2_DOT_1:
        case CHANNEL_REMAPPING_2_TO_5_DOT_1:
            _REG[0]=19;
            _REG[1]=DDX8000_ADDR;
            _REG[2]=DDX_CFADDR_REG;
            _REG[3]=0xd0;
            for(bEQCount=0;bEQCount<5;bEQCount++)
            {
                _REG[4+3*bEQCount]=0xe6;
                _REG[5+3*bEQCount]=0x75;
                _REG[6+3*bEQCount]=0xed;
            }
            _REG[19]=0x02;
            _AMP_WriteReg();

            _REG[0]=6;
            _REG[1]=DDX8000_ADDR;
            _REG[2]=DDX_CFADDR_REG;
            _REG[3]=0xd5;
            _REG[4]=0xaf;
            _REG[5]=0x3c;
            _REG[6]=0xcb;
            _AMP_WriteReg();

            _REG[0]=3;
            _REG[1]=DDX8000_ADDR;
            _REG[2]=DDX_CFUD_REG;
            _REG[3]=0x01;
            _AMP_WriteReg();

            _REG[0]=3;
            _REG[1]=DDX8000_ADDR;
            _REG[2]=DDX_CONFA_REG;
#ifdef BINARY_OUTPUT_MODE
            _REG[3]=MPC + IR_32K_44K1_48K + FS_256 + BME;         // Value of conf. A(0x00)
#else
            _REG[3]=MPC + HPE + IR_32K_44K1_48K + FS_256 + BME;   // Value of conf. A(0x00)
#endif
            _AMP_WriteReg();
            break;
    }
    if(bMode==CHANNEL_REMAPPING_NONE)
    {
        if(__bACHN==2)
            HAL1_ExtIOCtrl(EXT_NPRN_LO);
        else
            HAL1_ExtIOCtrl(EXT_NPRN_HI);
    }
    else if(bMode==CHANNEL_REMAPPING_2_TO_2_DOT_1)
        HAL1_ExtIOCtrl(EXT_NPRN_LO);
    else
        HAL1_ExtIOCtrl(EXT_NPRN_HI);

            
#endif  // #if (AMP_VOLUME_SOURCE == DIGITAL_DDX8000)
}

// LLY.278-4, add to program "Equalizer" mode
//  *****************************************************************************
//  Function    :   AMP_SetEQMode
//  Description :   Used to program "Equalizer" mode
//  Arguments   :   bMode, specify the desired "Equalizer" mode
//                         it will same as __bSoundEffect value define (chips.h)
//  Return      :   None
//  Side Effect :
//  ******************************************************************************
#ifdef  SUPPORT_EQUALIZER
void    AMP_SetEQMode(BYTE bMode)
{
#if (AMP_VOLUME_SOURCE == DIGITAL_DDX8000)
    // Step 1: Mute output. Totally sent 3 bytes
    _REG[0]=3;
    _REG[1]=DDX8000_ADDR;
    _REG[2]=DDX_MMUTE_REG;
    _REG[3]=0x01;
    _AMP_WriteReg();

    // Step 2: Set Prescale factor. Totally sent 19 bytes
    _REG[0]=19;
    _REG[1]=DDX8000_ADDR;
    _REG[2]=DDX_CFADDR_REG;
    _REG[3]=0xc8;
    for(bEQCount=0;bEQCount<5;bEQCount++)
    {
        _REG[4+bEQCount*3]=aDDXPreScaleMap[bMode][0];
        _REG[5+bEQCount*3]=aDDXPreScaleMap[bMode][1];
        _REG[6+bEQCount*3]=aDDXPreScaleMap[bMode][2];
    }
    _REG[19]=0x02;
    _AMP_WriteReg();

    // Step 3: Set Biquad factor. Totally sent 456 bytes
    for(bChannelCount=0;bChannelCount<6;bChannelCount++)
    {
        for(bEQCount=0;bEQCount<4;bEQCount++)
        {
            _REG[0]=19;
            _REG[1]=DDX8000_ADDR;
            _REG[2]=DDX_CFADDR_REG;
            _REG[3]=bChannelCount*25+bEQCount*5;
            _REG[4]=aDDXBiquadMap[bMode][bEQCount*15];
            _REG[5]=aDDXBiquadMap[bMode][bEQCount*15+1];
            _REG[6]=aDDXBiquadMap[bMode][bEQCount*15+2];
            _REG[7]=aDDXBiquadMap[bMode][bEQCount*15+3];
            _REG[8]=aDDXBiquadMap[bMode][bEQCount*15+4];
            _REG[9]=aDDXBiquadMap[bMode][bEQCount*15+5];
            _REG[10]=aDDXBiquadMap[bMode][bEQCount*15+6];
            _REG[11]=aDDXBiquadMap[bMode][bEQCount*15+7];
            _REG[12]=aDDXBiquadMap[bMode][bEQCount*15+8];
            _REG[13]=aDDXBiquadMap[bMode][bEQCount*15+9];
            _REG[14]=aDDXBiquadMap[bMode][bEQCount*15+10];
            _REG[15]=aDDXBiquadMap[bMode][bEQCount*15+11];
            _REG[16]=aDDXBiquadMap[bMode][bEQCount*15+12];
            _REG[17]=aDDXBiquadMap[bMode][bEQCount*15+13];
            _REG[18]=aDDXBiquadMap[bMode][bEQCount*15+14];
            _REG[19]=0x02;
            _AMP_WriteReg();
        }
    }

    // Step 4: Unmute output. Totally sent 3 bytes
    _REG[0]=3;
    _REG[1]=DDX8000_ADDR;
    _REG[2]=DDX_MMUTE_REG;
    _REG[3]=0x00;
    _AMP_WriteReg();
#endif // #if (AMP_VOLUME_SOURCE == DIGITAL_DDX8000)
}
#endif  // #ifdef SUPPORT_EQUALIZER

#endif // #ifdef  SUPPORT_AV_SYSTEM


⌨️ 快捷键说明

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