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

📄 wm8753.c

📁 WM9713 audio codec driver for WinCE 5.0
💻 C
📖 第 1 页 / 共 3 页
字号:

/*
 * Mic2Record
 * 
 * Record from Mic2 to I2S.
 * Note: MIC2 goes through ALC to both channels.
 */
static const WM_ACTION s_Mic2RecordActions[] =
{
    /* Send MIC2 to the ALC and MIC mux (sidetone) */
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_2,
                     WM8753_MIC2ALC | WM8753_MICMUX_LEFT_PGA,
                     WM8753_MIC2ALC | WM8753_MICMUX_MASK
                  ),
                  
    /* Now load the common ALC record profile */
    WMACT_LOAD_PROFILE( "ALC Record" ),
    
    /* Power up MIC amp and set full MIC boost */
    WMACT_SET_BITS( WM8753_PWR_MGMT_2,
                    WM8753_PWR2_MICAMP2EN
                   ),
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_1,
                     WM8753_MIC2BOOST_30DB,
                     WM8753_MIC2BOOST_MASK
                   ),
};

/*
 * Mic1LineRecord
 * 
 * Record from Mic1 and LINES to I2S.
 */
static const WM_ACTION s_Mic1LineRecordActions[] =
{
    /* Set line mix to be LINE1 - LINE2 (differential) */
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_1,
                     WM8753_LINEMIXSEL_DIFF,
                     WM8753_LINEMIXSEL_MASK
                   ),
    /* Send MIC1 and LINES to the ALC and MIC mux (sidetone) */
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_2,
                     WM8753_LINEALC | WM8753_MIC1ALC | WM8753_MICMUX_LEFT_PGA,
                     WM8753_LINEALC | WM8753_MIC1ALC | WM8753_MICMUX_MASK
                  ),

    /* Now load the common ALC record profile */
    WMACT_LOAD_PROFILE( "ALC Record" ),

    /* Power up MIC amp and set full MIC boost */
    WMACT_SET_BITS( WM8753_PWR_MGMT_2,
                    WM8753_PWR2_MICAMP1EN
                   ),
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_1,
                     WM8753_MIC1BOOST_30DB,
                     WM8753_MIC1BOOST_MASK
                   ),
};

/*
 * Mic2LineRecord
 * 
 * Record from Mic2 and LINES to I2S.
 */
static const WM_ACTION s_Mic2LineRecordActions[] =
{
    /* Set line mix to be LINE1 - LINE2 (differential) */
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_1,
                     WM8753_LINEMIXSEL_DIFF,
                     WM8753_LINEMIXSEL_MASK
                   ),
    /* Send MIC2 and LINES to the ALC and MIC mux (sidetone) */
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_2,
                     WM8753_LINEALC | WM8753_MIC2ALC | WM8753_MICMUX_LEFT_PGA,
                     WM8753_LINEALC | WM8753_MIC2ALC | WM8753_MICMUX_MASK
                  ),

    /* Now load the common ALC record profile */
    WMACT_LOAD_PROFILE( "ALC Record" ),

    /* Power up MIC amp and set full MIC boost */
    WMACT_SET_BITS( WM8753_PWR_MGMT_2,
                    WM8753_PWR2_MICAMP2EN
                   ),
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_1,
                     WM8753_MIC2BOOST_30DB,
                     WM8753_MIC2BOOST_MASK
                   ),
};

/*
 * MicToVoice
 * 
 * Record from Mic1 + Mic2 to PCM.
 * 
 * This takes Mic1 and Mic2, and records them via the ALC as a mono signal
 * (on both channels).
 */
static const WM_ACTION s_MicToVoiceActions[] =
{
    /* Send MIC1 and MIC2 to the ALC */
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_2,
                     WM8753_MIC1ALC | WM8753_MIC2ALC | WM8753_MICMUX_LEFT_PGA,
                     WM8753_MIC1ALC | WM8753_MIC2ALC | WM8753_MICMUX_MASK
                  ),
                  
    /* Now load the common ALC record profile */
    WMACT_LOAD_PROFILE( "ALC Record" ),

    /* Power up MIC amp and set full MIC boost */
    WMACT_SET_BITS( WM8753_PWR_MGMT_2,
                    WM8753_PWR2_MICAMP2EN
                   ),
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_1,
                     WM8753_MIC2BOOST_30DB,
                     WM8753_MIC2BOOST_MASK
                   ),
};

/*
 * Mic1ToVoice
 * 
 * Record from Mic1 to PCM.
 */
static const WM_ACTION s_Mic1ToVoiceActions[] =
{
    /* Send MIC1 to the ALC */
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_2,
                     WM8753_MIC1ALC | WM8753_MICMUX_LEFT_PGA,
                     WM8753_MIC1ALC | WM8753_MICMUX_MASK
                  ),
                  
    /* Now load the common ALC record profile */
    WMACT_LOAD_PROFILE( "ALC Record" ),

    /* Power up MIC amp and set full MIC boost */
    WMACT_SET_BITS( WM8753_PWR_MGMT_2,
                    WM8753_PWR2_MICAMP2EN
                   ),
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_1,
                     WM8753_MIC2BOOST_30DB,
                     WM8753_MIC2BOOST_MASK
                   ),

};

/*
 * Mic2ToVoice
 * 
 * Record from Mic2 to PCM.
 */
static const WM_ACTION s_Mic2ToVoiceActions[] =
{
    /* Send MIC2 to the ALC */
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_2,
                     WM8753_MIC2ALC | WM8753_MICMUX_LEFT_PGA,
                     WM8753_MIC2ALC | WM8753_MICMUX_MASK
                  ),
                  
    /* Now load the common ALC record profile */
    WMACT_LOAD_PROFILE( "ALC Record" ),

    /* Power up MIC amp and set full MIC boost */
    WMACT_SET_BITS( WM8753_PWR_MGMT_2,
                    WM8753_PWR2_MICAMP2EN
                   ),
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_1,
                     WM8753_MIC2BOOST_30DB,
                     WM8753_MIC2BOOST_MASK
                   ),
};

/*
 * LineToVoice
 * 
 * Record from LINES (differential) to PCM.
 * 
 * This takes LINE1 and LINE2 as a differential input, and records it via
 * the ALC on the left channel only.
 */
static const WM_ACTION s_LineToVoiceActions[] =
{
    /* Set line mix to be LINE1 - LINE2 (differential) */
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_1,
                     WM8753_LINEMIXSEL_DIFF,
                     WM8753_LINEMIXSEL_MASK
                   ),
    /* Send LINES to the ALC */
    WMACT_SET_FIELD( WM8753_INPUT_CONTROL_2,
                     WM8753_LINEALC | WM8753_MICMUX_LEFT_PGA,
                     WM8753_LINEALC | WM8753_MICMUX_MASK
                  ),
                  
    /* Now load the common ALC record profile */
    WMACT_LOAD_PROFILE( "ALC Record" ),
};

/*
 * Mic1 off
 * 
 * Remove Mic1 from the ALC mix (while still recording).
 */
static const WM_ACTION s_Mic1OffActions[] =
{
    /* Remove Mic1 from the ALC */
    WMACT_CLEAR_BITS( WM8753_INPUT_CONTROL_2, WM8753_MIC1ALC ),
    /* Power down Mic1 amp */
    WMACT_CLEAR_BITS( WM8753_PWR_MGMT_2, WM8753_PWR2_MICAMP1EN ),
};

/*
 * Mic2 off
 * 
 * Remove Mic1 from the ALC mix (while still recording).
 */
static const WM_ACTION s_Mic2OffActions[] =
{
    /* Remove Mic2 from the ALC */
    WMACT_CLEAR_BITS( WM8753_INPUT_CONTROL_2, WM8753_MIC2ALC ),
    /* Power down Mic2 amp */
    WMACT_CLEAR_BITS( WM8753_PWR_MGMT_2, WM8753_PWR2_MICAMP2EN ),
};

/*
 * LINES off
 * 
 * Remove LINES from the ALC mix (while still recording).
 */
static const WM_ACTION s_LineOffActions[] =
{
#if WM_ENABLE_ALC
    /* Remove LINES from the ALC */
    WMACT_CLEAR_BITS( WM8753_INPUT_CONTROL_2, WM8753_LINEALC ),
#else
#if WM_ENABLE_SIDETONE
    /* LM Signal to Left Mixer */
    WMACT_CLEAR_BITS( WM8753_LEFT_OUT_MIX_1, WM8753_MIX2OUT ),
    /* RM Signal to Right Mixer */
    WMACT_CLEAR_BITS( WM8753_RIGHT_OUT_MIX_1, WM8753_MIX2OUT ),
#endif
#endif
};

/*
 * Stop Record
 * 
 * Stop recording.  Note there is only one (stereo) ADC on the WM8753,
 * so this stops both HiFi and Voice record.
 */
static const WM_ACTION s_StopRecordActions[] =
{
    /* Stop all streaming */
    WMACT_DISABLE_STREAM( WM_STREAM_HIFI_IN ),
    WMACT_DISABLE_STREAM( WM_STREAM_VOICE_IN ),

    /* Power down the ADC */
    WMACT_POWERDOWN( WM_POWER_AUDIO_ADCS ),

    /* Mute input PGAs */
    WMACT_SET_BITS( WM8753_LEFT_INPUT_VOLUME, WM8753_INVOL_MUTE ),
    WMACT_SET_BITS( WM8753_RIGHT_INPUT_VOLUME,
                    WM8753_INVOL_MUTE | WM8753_VOLUME_UPDATE
                  ),

    /* Select LPGA on left, and RPGA on right so we can mute them */
    WMACT_SET_FIELD( WM8753_ADC_INPUT_MODE,
                     WM8753_LEFTADCSEL_PGA | WM8753_RIGHTADCSEL_PGA,
                     WM8753_LEFTADCSEL_MASK | WM8753_RIGHTADCSEL_MASK
                   ),

    /* Make sure nothing is going to the ALC */
    WMACT_CLEAR_BITS( WM8753_INPUT_CONTROL_2,
                      WM8753_LINEALC | WM8753_MIC1ALC | WM8753_MIC2ALC | WM8753_RXALC
                    ),

    /* Turn off sidetone */
    WMACT_CLEAR_BITS( WM8753_LEFT_OUT_MIX_2, WM8753_ST2OUT ),
    WMACT_CLEAR_BITS( WM8753_RIGHT_OUT_MIX_2, WM8753_ST2OUT ),
    WMACT_CLEAR_BITS( WM8753_MONO_OUT_MIX_2, WM8753_ST2OUT ),

    /* Don't record anything */
    WMACT_CLEAR_BITS( WM8753_RECORD_MIX_1, WM8753_REC_RMIX | WM8753_REC_LMIX ),
    WMACT_CLEAR_BITS( WM8753_RECORD_MIX_2, WM8753_REC_MMIX ),
};

/*
 * Stop HiFi Playback
 */
static const WM_ACTION s_StopHiFiPlaybackActions[] =
{
    /* Stop HiFi playback */
    WMACT_DISABLE_STREAM( WM_STREAM_HIFI_OUT ),

    /* Power down the DAC */
    WMACT_POWERDOWN( WM_POWER_AUDIO_HIFI_DAC ),
};

/*
 * Stop Voice Playback
 */
static const WM_ACTION s_StopVoicePlaybackActions[] =
{
    /* Stop Voice playback */
    WMACT_DISABLE_STREAM( WM_STREAM_VOICE_OUT ),

    /* Power down the DAC */
    WMACT_POWERDOWN( WM_POWER_AUDIO_VOICE_DAC ),
};

/*
 * Stop Playback
 * 
 * Stops all playback, both HiFi and Voice.
 */
static const WM_ACTION s_StopPlaybackActions[] =
{
    /* Stop all playback */
    WMACT_DISABLE_STREAM( WM_STREAM_HIFI_OUT ),
    WMACT_DISABLE_STREAM( WM_STREAM_VOICE_OUT ),

    /* Power down the DACs */
    WMACT_POWERDOWN( WM_POWER_AUDIO_HIFI_DAC | WM_POWER_AUDIO_VOICE_DAC ),

#if !WM_ENABLE_SIDETONE
    /* Turn off all output paths */
    WMACT_CLEAR_BITS( WM8753_LEFT_OUT_MIX_1, WM8753_MIX2OUT | WM8753_DAC2OUT ),
    WMACT_CLEAR_BITS( WM8753_LEFT_OUT_MIX_2, WM8753_ST2OUT | WM8753_VXDAC2OUT ),
    WMACT_CLEAR_BITS( WM8753_RIGHT_OUT_MIX_1, WM8753_MIX2OUT | WM8753_DAC2OUT ),
    WMACT_CLEAR_BITS( WM8753_RIGHT_OUT_MIX_2, WM8753_ST2OUT | WM8753_VXDAC2OUT ),
    WMACT_CLEAR_BITS( WM8753_MONO_OUT_MIX_1, WM8753_MIX2OUT | WM8753_DAC2OUT ),
    WMACT_CLEAR_BITS( WM8753_MONO_OUT_MIX_2,
                      WM8753_ST2OUT | WM8753_DAC2OUT | WM8753_VXD2MO
                    ),
#endif
};

/*
 * Standby
 * 
 * Not doing anything, but still powered up.
 */
static const WM_ACTION s_StandbyActions[] =
{
    /* Stop all streaming */
    WMACT_DISABLE_STREAM( WM_STREAM_VOICE_OUT ),
    WMACT_DISABLE_STREAM( WM_STREAM_VOICE_IN ),
    WMACT_DISABLE_STREAM( WM_STREAM_HIFI_OUT ),

⌨️ 快捷键说明

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