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

📄 wm8750.c

📁 dm270 source code
💻 C
📖 第 1 页 / 共 5 页
字号:
/****************************************************************************
*	Copyright(C)  All rights Reserved.										*
*	Compiler		: TI Code Composer OMAP 2.1								*
*	FileName		: WM8750.c												*
*	Description		: Device driver for Wolfson 8750						*
*	Author			: Daniel Lin											*
*	Revision History:														*
*		2004/04/27	: First Coding 											*
****************************************************************************/

/*--------------------------------------------------------------------------*
*	Include Files															*
*--------------------------------------------------------------------------*/
#include 	<demo/gio270.h>
#include	<user/Audio.h>
#include 	<demo/uart270.h>

/*--------------------------------------------------------------------------*
*	External Dependancies													*
*--------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------*
*	Const, Macro, type definition											*
*--------------------------------------------------------------------------*/
#define WM8750_CSB	1

/*	WM8750 I2C ID	*/
#if	WM8750_CSB	
#define WM8750_I2C_SLAVE	0x36
#else
#define WM8750_I2C_SLAVE	0x34
#endif

#define	USB_Mode	0

typedef unsigned short  USHORT;
#define STATUS Int16
typedef short       Int16;
#define E_PASS  0
#define E_INVALID_INPUT     (-1)
/*--------------------------------------------------------------------------*
*	External Functions														*
*--------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------*
*	External Variables														*
*--------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------*
*	Global Functions 														*
*--------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------*
*	Global Variables 														*
*--------------------------------------------------------------------------*/
unsigned short	WM8750Regs[ 43 ];
unsigned char 	success;
/*--------------------------------------------------------------------------*
*	Local Functions declaration												*
*--------------------------------------------------------------------------*/
STATUS 	DEV_Audio_Init( void );
STATUS	DEV_Audio_SetClockSampleRate(unsigned long Oscillator_Freq,unsigned int Sampling_Freq);
STATUS	DEV_ADEC_WriteCmd( unsigned char Reg, unsigned short Val );

STATUS	DEV_ADEC_LeftInputVol_LIVU(BOOL trueorfalse);
STATUS	DEV_ADEC_LeftInputVol_LINMUTE(BOOL trueorfalse);
STATUS	DEV_ADEC_LeftInputVol_LIZC(BOOL trueorfalse);
STATUS	DEV_ADEC_LeftInputVol_LINVOL(unsigned char vol);
STATUS	DEV_ADEC_RightInputVol_RIVU(BOOL trueorfalse);
STATUS	DEV_ADEC_RightInputVol_RINMUTE(BOOL trueorfalse);
STATUS	DEV_ADEC_RightInputVol_RIZC(BOOL trueorfalse);
STATUS	DEV_ADEC_RightInputVol_RINVOL(unsigned char vol);
STATUS	DEV_ADEC_LOUT1Vol_LO1VU(BOOL trueorfalse);
STATUS	DEV_ADEC_LOUT1Vol_LO1ZC(BOOL trueorfalse);
STATUS	DEV_ADEC_LOUT1Vol_LOUT1VOL(int vol);
STATUS	DEV_ADEC_ROUT1Vol_RO1VU(BOOL trueorfalse);
STATUS	DEV_ADEC_ROUT1Vol_RO1ZC(BOOL trueorfalse);
STATUS	DEV_ADEC_ROUT1Vol_ROUT1VOL(int vol);
STATUS	DEV_ADEC_AdcDacCtrl_ADCDIV2(BOOL trueorfalse);
STATUS	DEV_ADEC_AdcDacCtrl_DACDIV2(BOOL trueorfalse);
STATUS	DEV_ADEC_AdcDacCtrl_ADCPOL(unsigned char polarity);
STATUS	DEV_ADEC_AdcDacCtrl_HPOR(BOOL trueorfalse);
STATUS	DEV_ADEC_AdcDacCtrl_DACMUTE(BOOL trueorfalse);
STATUS	DEV_ADEC_AdcDacCtrl_DEEMPH(unsigned char sample_rate_select);
STATUS	DEV_ADEC_AdcDacCtrl_ADCHPD(BOOL trueorfalse);
STATUS	DEV_ADEC_AudioInterface_BCLKINV(BOOL trueorfalse);
STATUS	DEV_ADEC_AudioInterface_MS(BOOL trueorfalse);
STATUS	DEV_ADEC_AudioInterface_LRSWAP(BOOL trueorfalse);
STATUS	DEV_ADEC_AudioInterface_LRP(BOOL trueorfalse);
STATUS	DEV_ADEC_AudioInterface_WL(unsigned char bits);
STATUS	DEV_ADEC_AudioInterface_FORMAT(unsigned char select);
STATUS	DEV_ADEC_SampleRate_CLKDIV2(BOOL trueorfalse);
STATUS	DEV_ADEC_SampleRate_SR(unsigned char sample_rate);
STATUS	DEV_ADEC_SampleRate_USB(BOOL trueorfalse);
STATUS	DEV_ADEC_LeftDacVol_LDVU(BOOL trueorfalse);
STATUS	DEV_ADEC_LeftDacVol_LDACVOL(unsigned char vol);
STATUS	DEV_ADEC_RightDacVol_RDVU(BOOL trueorfalse);
STATUS	DEV_ADEC_RightDacVol_RDACVOL(unsigned char vol);
STATUS	DEV_ADEC_BassCtrl_BB(BOOL trueorfalse);
STATUS	DEV_ADEC_BassCtrl_BC(BOOL trueorfalse);
STATUS	DEV_ADEC_BassCtrl_BASS(unsigned char vol);
STATUS	DEV_ADEC_TrebleCtrl_TC(BOOL trueorfalse);
STATUS	DEV_ADEC_TrebleCtrl_TRBL(unsigned char vol);
STATUS 	DEV_ADEC_Reset(void);
STATUS	DEV_ADEC_3dCtrl_MODE3D(BOOL trueorfalse);
STATUS	DEV_ADEC_3dCtrl_3DUC(BOOL trueorfalse);
STATUS	DEV_ADEC_3dCtrl_3DLC(BOOL trueorfalse);
STATUS	DEV_ADEC_3dCtrl_3DDEPTH(unsigned char depth);
STATUS	DEV_ADEC_3dCtrl_3DEN(BOOL trueorfalse);
STATUS	DEV_ADEC_ALC1_ALCSEL(unsigned char select);
STATUS	DEV_ADEC_ALC1_MAXGAIN(unsigned char gain);
STATUS	DEV_ADEC_ALC1_ALCL(unsigned char level);
STATUS	DEV_ADEC_ALC2_ALCZC(BOOL trueorfalse);
STATUS	DEV_ADEC_ALC2_HLD(unsigned char time);
STATUS	DEV_ADEC_ALC3_DCY(unsigned char time);
STATUS	DEV_ADEC_ALC3_ATK(unsigned char time);
STATUS	DEV_ADEC_NoiseGate_NGTH(unsigned char level);
STATUS	DEV_ADEC_NoiseGate_NGG(unsigned char type);
STATUS	DEV_ADEC_NoiseGate_NGAT(BOOL trueorfalse);
STATUS	DEV_ADEC_LeftAdcVol_LAVU(BOOL trueorfalse);
STATUS	DEV_ADEC_LeftAdcVol_LADCVOL(unsigned char vol);
STATUS	DEV_ADEC_RightdcVol_RAVU(BOOL trueorfalse);
STATUS	DEV_ADEC_RightdcVol_RADCVOL(unsigned char vol);
STATUS	DEV_ADEC_AddiCtrl1_TSDEN(BOOL trueorfalse);
STATUS	DEV_ADEC_AddiCtrl1_VSEL(unsigned char avdd);
STATUS	DEV_ADEC_AddiCtrl1_DMONOMIX(unsigned char select);
STATUS	DEV_ADEC_AddiCtrl1_DATSEL(unsigned char select);
STATUS	DEV_ADEC_AddiCtrl1_DACINV(BOOL trueorfalse);
STATUS	DEV_ADEC_AddiCtrl1_TOEN(BOOL trueorfalse);
STATUS	DEV_ADEC_AddiCtrl2_OUT3SW(unsigned char select);
STATUS	DEV_ADEC_AddiCtrl2_HPSWEN(BOOL trueorfalse);
STATUS	DEV_ADEC_AddiCtrl2_HPSWPOL(BOOL trueorfalse);
STATUS	DEV_ADEC_AddiCtrl2_ROUT2INV(BOOL trueorfalse);
STATUS	DEV_ADEC_AddiCtrl2_TRI(BOOL trueorfalse);
STATUS	DEV_ADEC_AddiCtrl2_LRCM(BOOL trueorfalse);
STATUS	DEV_ADEC_AddiCtrl2_ADCOSR(BOOL trueorfalse);
STATUS	DEV_ADEC_AddiCtrl2_DACOSR(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt1_VMIDSEL(unsigned char select);
STATUS	DEV_ADEC_PwrMgmt1_VREF(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt1_AIN(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt1_AINL(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt1_AINR(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt1_ADC(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt1_ADCL(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt1_ADCR(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt1_MICB(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt1_DIGENB(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt2_DAC(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt2_DACL(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt2_DACR(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt2_OUT1(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt2_LOUT1(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt2_ROUT1(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt2_OUT2(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt2_LOUT2(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt2_ROUT2(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt2_MONO(BOOL trueorfalse);
STATUS	DEV_ADEC_PwrMgmt2_OUT3(BOOL trueorfalse);
STATUS	DEV_ADEC_AddiCtrl3_ADCLRM(unsigned char select);
STATUS	DEV_ADEC_AddiCtrl3_VROI(BOOL trueorfalse);
STATUS	DEV_ADEC_AdcInputMode_DS(BOOL trueorfalse);
STATUS	DEV_ADEC_AdcInputMode_MONOMIX(unsigned char select);
STATUS	DEV_ADEC_AdcInputMode_RDCM(BOOL trueorfalse);
STATUS	DEV_ADEC_AdcInputMode_LDCM(BOOL trueorfalse);
STATUS	DEV_ADEC_AdclPath_LINSEL(unsigned char select);
STATUS	DEV_ADEC_AdclPath_LMICBOOST(unsigned char boost);
STATUS	DEV_ADEC_AdcrPath_RINSEL(unsigned char select);
STATUS	DEV_ADEC_AdcrPath_RMICBOOST(unsigned char boost);
STATUS	DEV_ADEC_LeftOutMix1_LD2LO(BOOL trueorfalse);
STATUS	DEV_ADEC_LeftOutMix1_LI2LO(BOOL trueorfalse);
STATUS	DEV_ADEC_LeftOutMix1_LI2LOVOL(unsigned char vol);
STATUS	DEV_ADEC_LeftOutMix1_LMIXSEL(unsigned char select);
STATUS	DEV_ADEC_LeftOutMix2_RD2LO(BOOL trueorfalse);
STATUS	DEV_ADEC_LeftOutMix2_RI2LO(BOOL trueorfalse);
STATUS	DEV_ADEC_LeftOutMix2_RI2LOVOL(unsigned char vol);
STATUS	DEV_ADEC_RightOutMix1_LD2RO(BOOL trueorfalse);
STATUS	DEV_ADEC_RightOutMix1_LI2RO(BOOL trueorfalse);
STATUS	DEV_ADEC_RightOutMix1_LI2ROVOL(unsigned char vol);
STATUS	DEV_ADEC_RightOutMix1_RMIXSEL(unsigned char select);
STATUS	DEV_ADEC_RightOutMix2_RD2RO(BOOL trueorfalse);
STATUS	DEV_ADEC_RightOutMix2_RI2RO(BOOL trueorfalse);
STATUS	DEV_ADEC_RightOutMix2_RI2ROVOL(unsigned char vol);
STATUS	DEV_ADEC_MonoOutMix1_LD2MO(BOOL trueorfalse);
STATUS	DEV_ADEC_MonoOutMix1_LI2MO(BOOL trueorfalse);
STATUS	DEV_ADEC_MonoOutMix1_LI2MOVOL(unsigned char vol);
STATUS	DEV_ADEC_MonoOutMix2_RD2MO(BOOL trueorfalse);
STATUS	DEV_ADEC_MonoOutMix2_RI2MO(BOOL trueorfalse);
STATUS	DEV_ADEC_MonoOutMix2_RI2MOVOL(unsigned char vol);
STATUS	DEV_ADEC_LOUT2Vol_LO2VU(BOOL trueorfalse);
STATUS	DEV_ADEC_LOUT2Vol_LO2ZC(BOOL trueorfalse);
STATUS	DEV_ADEC_LOUT2Vol_LOUT2VOL(int vol);
STATUS	DEV_ADEC_ROUT2Vol_RO2VU(BOOL trueorfalse);
STATUS	DEV_ADEC_ROUT2Vol_RO2ZC(BOOL trueorfalse);
STATUS	DEV_ADEC_ROUT2Vol_ROUT2VOL(int vol);
STATUS	DEV_ADEC_MonoOutVol_MOZC(BOOL trueorfalse);
STATUS	DEV_ADEC_MonoOutVol_MOUTVOL(unsigned char vol);

/*--------------------------------------------------------------------------*
*	Local Variables Declartaion												*
*--------------------------------------------------------------------------*/
static	STATUS	ret;

/*--------------------------------------------------------------------------*
*	Code																	*
*---------------------------------------------------------------------------*
*	For API Function Call													*
*---------------------------------------------------------------------------*
*	Brief		:	Initalize Audio codec 									*
*	Return		:	None													*
*	Description	:	Run only when system initilization						*
*--------------------------------------------------------------------------*/
STATUS 	DEV_Audio_Init( void )
{
	int	i;
	
	for(i=0; i<43; i++)
	{
		WM8750Regs[i]=0;
	}

//	Register Default Value Table	
	WM8750Regs[0]=	0x0097;
	WM8750Regs[1]=	0x0097;
	WM8750Regs[2]=	0x0079;
	WM8750Regs[3]=	0x0079;
	WM8750Regs[5]=	0x0008;
	WM8750Regs[7]=	0x000A;
//	WM8750Regs[8]=	0x0000;
	WM8750Regs[10]=	0x00FF;
	WM8750Regs[11]=	0x00FF;
	WM8750Regs[12]=	0x000F;
	WM8750Regs[13]=	0x000F;
//	WM8750Regs[16]=	0x0000;
	WM8750Regs[17]=	0x007B;
//	WM8750Regs[18]=	0x0000;
	WM8750Regs[19]=	0x0032;
//	WM8750Regs[20]=	0x0000;
	WM8750Regs[21]=	0x00C3;
	WM8750Regs[22]=	0x00C3;
	WM8750Regs[23]=	0x00C0;
//	WM8750Regs[24]=	0x0000;
	WM8750Regs[25]=	0x00C0;
//	WM8750Regs[26]=	0x0000;
//	WM8750Regs[27]=	0x0000;
//	WM8750Regs[31]=	0x0000;
//	WM8750Regs[32]=	0x0000;
//	WM8750Regs[33]=	0x0000;
	WM8750Regs[34]=	0x0050;
	WM8750Regs[35]=	0x0050;
	WM8750Regs[36]=	0x0050;
	WM8750Regs[37]=	0x0050;
	WM8750Regs[38]=	0x0050;
	WM8750Regs[39]=	0x0050;
	WM8750Regs[40]=	0x0079;
	WM8750Regs[41]=	0x0079;
	WM8750Regs[42]=	0x0079;

//	initial test set default dac mode

	ret = 	DEV_ADEC_LOUT1Vol_LOUT1VOL(0x00);
	if( ret != E_PASS )	goto	dev_audio_init_end;
	
	/*DEV_ADEC_ROUT1Vol_ROUT1VOL(0x00);
	DEV_ADEC_LOUT2Vol_LOUT2VOL(0x00); 
	DEV_ADEC_ROUT2Vol_ROUT2VOL(0x00); 
	//	R0
	DEV_ADEC_LeftInputVol_LINMUTE(FALSE);
	DEV_ADEC_LeftInputVol_LIVU(TRUE);
	DEV_ADEC_LeftInputVol_LIZC(TRUE);
	//	R1
	DEV_ADEC_RightInputVol_RINMUTE(FALSE);
	DEV_ADEC_RightInputVol_RIVU(TRUE);
	DEV_ADEC_RightInputVol_RIZC(TRUE);
	//	R2
	DEV_ADEC_LOUT1Vol_LO1VU(TRUE);
	DEV_ADEC_LOUT1Vol_LO1ZC(TRUE);

	//	R3
	DEV_ADEC_ROUT1Vol_RO1VU(TRUE);
	DEV_ADEC_ROUT1Vol_RO1ZC(TRUE);
	DEV_ADEC_AdcDacCtrl_DACMUTE(FALSE);
	DEV_ADEC_AdcDacCtrl_DEEMPH( NO_DEEMP );
	//	R7
	DEV_ADEC_AudioInterface_MS(FALSE);	//slave mode
	DEV_ADEC_AudioInterface_FORMAT(DSP_Mode);
	DEV_ADEC_AudioInterface_LRP(TRUE);
	DEV_ADEC_AudioInterface_WL( Bits_16 );
	//	R10
	DEV_ADEC_LeftDacVol_LDVU(TRUE);
	DEV_ADEC_LeftDacVol_LDACVOL(0xFF);
	//	R11
	DEV_ADEC_RightDacVol_RDVU(TRUE);
	DEV_ADEC_RightDacVol_RDACVOL(0xFF);
	//	R12
	DEV_ADEC_BassCtrl_BB(TRUE);
	//	R20
	DEV_ADEC_NoiseGate_NGAT(TRUE);
	//	R21
	DEV_ADEC_LeftAdcVol_LAVU(TRUE);
	DEV_ADEC_LeftAdcVol_LADCVOL(0xC7);
	//	R22
	DEV_ADEC_RightdcVol_RAVU(TRUE);
	DEV_ADEC_RightdcVol_RADCVOL(0xC7);
	//	R23
	DEV_ADEC_AddiCtrl1_TSDEN(TRUE);
	DEV_ADEC_LeftOutMix1_LI2LOVOL(0x00);
//	DEV_ADEC_LeftOutMix1_LD2LO( TRUE );
	//	R35
	DEV_ADEC_LeftOutMix2_RI2LOVOL(0x00);
	//	R36
	DEV_ADEC_RightOutMix1_LI2ROVOL(0x00);
	//	R37
	DEV_ADEC_RightOutMix2_RI2ROVOL(0x00);
//	DEV_ADEC_RightOutMix2_RD2RO( TRUE );
	//	R40
	DEV_ADEC_LOUT2Vol_LO2VU(TRUE);
	DEV_ADEC_LOUT2Vol_LO2ZC(TRUE);
	//	R41	
	DEV_ADEC_ROUT2Vol_RO2VU(TRUE);
	DEV_ADEC_ROUT2Vol_RO2ZC(TRUE);
	*/
dev_audio_init_end:
	return	ret;	
}

/*--------------------------------------------------------------------------*
*	Brief		:	Setting Clock & Sample Rate of Audio codec 				*
*	Return		:	None													*
*	Description	:	Run only when system initilization						*
*--------------------------------------------------------------------------*/
STATUS	DEV_Audio_SetClockSampleRate(unsigned long Oscillator_Freq,unsigned int Sampling_Freq)
{
	
	if(USB_Mode)
	{
		ret = DEV_ADEC_SampleRate_USB(TRUE);
		if( ret != E_PASS )	goto	dev_audio_scsr_usb_end;
		
		if(Oscillator_Freq == 24000000)
		{
			Oscillator_Freq = 12000000;
			DEV_ADEC_SampleRate_CLKDIV2(TRUE);
		}
		else
		{
			DEV_ADEC_SampleRate_CLKDIV2(FALSE);
		}
		
		switch(Sampling_Freq)
		{
			case	8000:
				DEV_ADEC_SampleRate_SR(0x06);
				DEV_ADEC_WriteCmd(R8_Sample_Rate, WM8750Regs[8]);
				break;
				
			case	8021:
				DEV_ADEC_SampleRate_SR(0x17);
				DEV_ADEC_WriteCmd(R8_Sample_Rate, WM8750Regs[8]);
				break;
				
			case	802144118:
				DEV_ADEC_SampleRate_SR(0x15);
				DEV_ADEC_WriteCmd(R8_Sample_Rate, WM8750Regs[8]);
				break;
				
			case	11025:
				DEV_ADEC_SampleRate_SR(0x19);
				DEV_ADEC_WriteCmd(R8_Sample_Rate, WM8750Regs[8]);
				break;
				
			case	12000:
				DEV_ADEC_SampleRate_SR(0x08);
				DEV_ADEC_WriteCmd(R8_Sample_Rate, WM8750Regs[8]);
				break;
				
			case	16000:
				DEV_ADEC_SampleRate_SR(0x0A);
				DEV_ADEC_WriteCmd(R8_Sample_Rate, WM8750Regs[8]);
				break;
			
			case	22058:
				DEV_ADEC_SampleRate_SR(0x1B);
				DEV_ADEC_WriteCmd(R8_Sample_Rate, WM8750Regs[8]);
				break;
			
			case	24000:
				DEV_ADEC_SampleRate_SR(0x1C);
				DEV_ADEC_WriteCmd(R8_Sample_Rate, WM8750Regs[8]);
				break;
				
			case	32000:
				DEV_ADEC_SampleRate_SR(0x0C);
				DEV_ADEC_WriteCmd(R8_Sample_Rate, WM8750Regs[8]);
				break;

⌨️ 快捷键说明

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