📄 audio.c
字号:
/****************************************************************************
* Copyright(C) All rights Reserved. *
* Compiler : TI Code Composer OMAP 2.1 *
* FileName : audio.c *
* Description : API Function For Audio Module *
* Author : Daniel Lin *
* Revision History: *
* 2004/05/04 : First Coding *
* 2004/05/25 : Combine AIC23 & WM8750 API *
* 2004/06/15 : Separate AIC23 & WM8750 again *
****************************************************************************/
/*--------------------------------------------------------------------------*
* Include Files *
*--------------------------------------------------------------------------*/
#include <user/Audio.h>
#include <demo/gio270.h>
/*--------------------------------------------------------------------------*
* Const, Macro, type definition *
*--------------------------------------------------------------------------*/
#define STATUS Int16
typedef short Int16;
#define E_PASS 0
#define ACLK_EN GIO20
unsigned char EEP_Volume; // Audio volume initial value
/*--------------------------------------------------------------------------*
* External Dependancies *
*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*
* Global Functions *
*--------------------------------------------------------------------------*/
STATUS API_AUDIO_Init(int vol_step);
STATUS API_AUDIO_PowerOn(void);
void API_AUDIO_PowerOff(void);
void API_AUDIO_PowerStandBy( BOOL TrueEnable );
void API_AUDIO_Input_SelChannel(unsigned char channel);
void API_AUDIO_Input_StepVolume(BOOL trueorfalse);
void API_AUDIO_Input_SetVolume(unsigned char vol);
void API_AUDIO_Output_SelChannel(unsigned char channel);
void API_AUDIO_Output_StepVolume(BOOL trueorfalse);
void API_AUDIO_Output_SetVolume(unsigned char volR, unsigned char volL);
void API_AUDIO_StepBalance(BOOL trueorfalse);
void API_AUDIO_StepTreble(BOOL trueorfalse);
void API_AUDIO_SetTreble(unsigned char value);
void API_AUDIO_StepBass(BOOL trueorfalse);
void API_AUDIO_SetBass(unsigned char value);
void API_AUDIO_Output_Mute(BOOL trueorfalse);
void API_AUDIO_Reset(void);
void API_AUDIO_SetDataFormat(unsigned char select);
void API_AUDIO_Input_MixerSelect(unsigned char select);
void API_AUDIO_Input_MicBiasEnable(BOOL trueorfalse);
void API_AUDIO_Input_MicBoost(unsigned char level);
void API_AUDIO_Output_MixerSelect(BOOL dac_mixer);
void API_AUDIO_Output_MixerGain(int vol);
void API_AUDIO_SetSampleRate(unsigned int Oscillator_freq,unsigned int Sampling_freq);
void API_AUDIO_Input_Mute( BOOL trueorfalse );
void API_AUDIO_SetPlaybackMode( unsigned char out_channel );
void API_AUDIO_SetRecordMode( unsigned char in_channel, unsigned char out_channel );
void API_AUDIO_SetByPassMode( unsigned char in_channel, unsigned char out_channel );
void API_AUDIO_AclkEnable( BOOL TrueEnable );
/*--------------------------------------------------------------------------*
* Global Variables *
*--------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
// Audio Device defination
int R_output_vol; // right channel output volume value
int L_output_vol; // lrft channel output volume value
int R_input_vol; // right channel input volume value
int L_input_vol; // left channel input volume value
int API_Vol_StepIndex; // volume value step index, setting in initial
int API_Balance_ValueIndex; // volume balance value index
int API_Treble_ValueIndex; // treble tone value index
int API_Bass_ValueIndex; // bass tone value index
int API_Balance_StepIndex; // balance setting step index
int API_Treble_StepIndex; // treble setting step index
int API_Bass_StepIndex; // bass setting step index
int Vol_OutputChannel_Index; // now output channel select index
int Vol_InputChannel_Index; // now input channel select index
int API_OutputVolumeIndex; // L_output_vol + R_output_vol - 94
int API_Vol_StepSet; // volume step setting from audio initial
/*--------------------------------------------------------------------------*
* Local Variables Declartaion *
*--------------------------------------------------------------------------*/
static STATUS ret; // status return temp variable
/*--------------------------------------------------------------------------*
* Code *
*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*
* Brief : Audio Device select WM8750 *
* Return : None *
* Description : *
*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*
* Brief : Audio API Power On *
* Return : E_PASS or E_DEVICE *
* Description : initial register setting *
*--------------------------------------------------------------------------*/
STATUS API_AUDIO_Init(int vol_step)
{
ret = DEV_Audio_Init();
if( ret != E_PASS ) goto api_audio_init_end;
API_AUDIO_Output_Mute( TRUE );
API_Balance_ValueIndex = 5;
API_Treble_ValueIndex = 6;
DEV_ADEC_TrebleCtrl_TRBL(0x06);
API_Bass_ValueIndex = 6;
DEV_ADEC_BassCtrl_BASS(0x06);
API_Vol_StepIndex = (80/vol_step);
API_Balance_StepIndex = (10/vol_step);
API_Bass_StepIndex = (10/vol_step);
API_Treble_StepIndex = (10/vol_step);
API_Vol_StepSet = vol_step;
L_input_vol = 32;
DEV_ADEC_LeftInputVol_LINVOL(L_input_vol);
R_input_vol = 32;
DEV_ADEC_RightInputVol_RINVOL(R_input_vol);
API_AUDIO_Output_SetVolume(EEP_Volume, EEP_Volume);
api_audio_init_end:
return ret;
}
/*--------------------------------------------------------------------------*
* Brief : Audio API Power On *
* Return : E_PASS or E_DEVICE *
* Description : 1. turn Vref On *
* 2. set Vmid = enable for playback and record *
* 3. enable ACLK *
*--------------------------------------------------------------------------*/
STATUS API_AUDIO_PowerOn(void)
{
int i;
// API_AUDIO_AclkEnable( TRUE );
ret = DEV_ADEC_PwrMgmt1_VREF(TRUE);
if( ret != E_PASS ) goto end_api_audio_poweron;
DEV_ADEC_PwrMgmt1_VMIDSEL(Divider_50k_ohm); // power on in playback/record mode
for (i = 0; i < 10000; i++) asm(" NOP");
API_AUDIO_AclkEnable( TRUE );
end_api_audio_poweron:
return ret;
}
/*--------------------------------------------------------------------------*
* Brief : Audio API Set Playback Mode *
* Input : output channel *
* Return : None *
* Description : set playback mode with setting output channel *
*--------------------------------------------------------------------------*/
void API_AUDIO_SetPlaybackMode( unsigned char out_channel )
{
API_AUDIO_Output_Mute(TRUE);
DEV_ADEC_AdcDacCtrl_DACMUTE(TRUE);
DEV_ADEC_PwrMgmt2_DAC(FALSE);
DEV_ADEC_PwrMgmt1_AIN(FALSE);
DEV_ADEC_PwrMgmt1_ADC(FALSE);
DEV_ADEC_PwrMgmt2_DAC(TRUE);
API_AUDIO_Output_SelChannel( out_channel );
API_AUDIO_Output_MixerSelect( TRUE );
DEV_ADEC_AdcDacCtrl_DACMUTE(FALSE);
API_AUDIO_Output_Mute(FALSE);
}
/*--------------------------------------------------------------------------*
* Brief : Audio API Set Record Mode *
* Input : input Record Channel, ByPass volume enable or not *
* Return : None *
* Description : set record mode with selected channel & decide bypass *
* output or not *
*--------------------------------------------------------------------------*/
void API_AUDIO_SetRecordMode( unsigned char in_channel, unsigned char out_channel )
{
API_AUDIO_Output_Mute(TRUE);
DEV_ADEC_AdcDacCtrl_DACMUTE(TRUE);
DEV_ADEC_PwrMgmt2_DAC(FALSE);
DEV_ADEC_PwrMgmt1_AIN(TRUE);
DEV_ADEC_PwrMgmt1_ADC(TRUE);
switch( in_channel )
{
case Channel_1: // MIC as Input, setting voice mode
DEV_ADEC_ALC1_ALCSEL(ACLSEL_Stereo);
DEV_ADEC_ALC1_ALCL(0x0B);
DEV_ADEC_ALC2_ALCZC(FALSE);
DEV_ADEC_ALC2_HLD(0x00);
DEV_ADEC_ALC3_DCY(0x03);
API_AUDIO_Input_MicBoost( Boost_29dB );
break;
case Channel_2: // Line in as input, setting audio mode
DEV_ADEC_ALC1_ALCSEL(ALC_Off);
DEV_ADEC_ALC1_MAXGAIN( 0x07 );
DEV_ADEC_ALC1_ALCL(0x0F);
DEV_ADEC_ALC2_ALCZC(TRUE);
DEV_ADEC_ALC2_HLD(0x08);
DEV_ADEC_ALC3_DCY(0x08);
API_AUDIO_Input_MicBoost( Boost_20dB );
break;
case Channel_3: // FM as input, FM as voice, setting voice mode
DEV_ADEC_ALC1_ALCSEL(ALC_Off);
DEV_ADEC_ALC1_MAXGAIN( 0x07 );
DEV_ADEC_ALC1_ALCL(0x0B);
DEV_ADEC_ALC2_ALCZC(FALSE);
DEV_ADEC_ALC2_HLD(0x00);
DEV_ADEC_ALC3_DCY(0x03);
API_AUDIO_Input_MicBoost( Boost_20dB );
break;
}
API_AUDIO_Input_SelChannel( in_channel );
API_AUDIO_Input_MixerSelect( in_channel );
switch( out_channel )
{
case Channel_1:
API_AUDIO_Output_SelChannel( out_channel );
API_AUDIO_Output_MixerSelect( FALSE );
break;
case Channel_2:
API_AUDIO_Output_SelChannel( out_channel );
API_AUDIO_Output_MixerSelect( FALSE );
break;
case Channel_None:
API_AUDIO_Output_MixerSelect( TRUE );
break;
}
/* if( BypassTrueEnable )
{
API_AUDIO_Output_MixerSelect( FALSE );
}
else
{
API_AUDIO_Output_SelChannel( Channel_1 );
API_AUDIO_Output_MixerSelect( TRUE );
}
*/
DEV_ADEC_AdcDacCtrl_DACMUTE(FALSE);
API_AUDIO_Output_Mute(FALSE);
}
/*--------------------------------------------------------------------------*
* Brief : Audio API Set Playback Mode *
* input : input channel & output channel *
* Return : None *
* Description : *
*--------------------------------------------------------------------------*/
void API_AUDIO_SetByPassMode( unsigned char in_channel, unsigned char out_channel )
{
API_AUDIO_Output_Mute(TRUE);
DEV_ADEC_AdcDacCtrl_DACMUTE(TRUE);
DEV_ADEC_PwrMgmt2_DAC(FALSE);
DEV_ADEC_PwrMgmt1_AIN(FALSE);
DEV_ADEC_PwrMgmt1_ADC(FALSE);
API_AUDIO_Input_SelChannel( in_channel );
API_AUDIO_Input_MixerSelect( in_channel );
API_AUDIO_Output_SelChannel( out_channel );
API_AUDIO_Output_MixerSelect( FALSE );
DEV_ADEC_AdcDacCtrl_DACMUTE(FALSE);
API_AUDIO_Output_Mute(FALSE);
}
/*--------------------------------------------------------------------------*
* Brief : Audio API Power Off *
* Return : None *
* Description : set audio codec work into off mode *
*--------------------------------------------------------------------------*/
void API_AUDIO_PowerOff(void)
{
API_AUDIO_Output_Mute( TRUE );
DEV_ADEC_PwrMgmt1_AIN(FALSE);
DEV_ADEC_PwrMgmt1_ADC(FALSE);
DEV_ADEC_PwrMgmt1_MICB(FALSE);
DEV_ADEC_PwrMgmt2_DAC(FALSE);
#if HW_VER_NUMBER == HW_VER_CMFEVM
DEV_ADEC_PwrMgmt2_OUT1(FALSE);
#elif HW_VER_NUMBER == HW_VER_CMG200
DEV_ADEC_PwrMgmt2_OUT1(FALSE);
#else
DEV_ADEC_PwrMgmt2_OUT1(FALSE);
DEV_ADEC_PwrMgmt2_OUT2(FALSE);
#endif
DEV_ADEC_PwrMgmt1_VMIDSEL(Vmid_Off);
DEV_ADEC_PwrMgmt1_VREF(FALSE);
API_AUDIO_AclkEnable( FALSE );
}
/*--------------------------------------------------------------------------*
* Brief : Audio API Power StandBy *
* Return : None *
* Description : *
*--------------------------------------------------------------------------*/
void API_AUDIO_PowerStandBy( BOOL TrueEnable )
{
if(TrueEnable) // enable for low power stand by
{
DEV_ADEC_PwrMgmt1_VMIDSEL(Divider_500k_ohm);
}
else
{
DEV_ADEC_PwrMgmt1_VMIDSEL(Divider_50k_ohm);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -