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

📄 audio.c

📁 dm270 source code
💻 C
📖 第 1 页 / 共 3 页
字号:
/****************************************************************************
*	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 + -