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

📄 pcm1742.c

📁 SAMSUNG 5009的源代码
💻 C
字号:
/******************************************************************************
 * File name   : PCM1742.c
 * Start date  : 2003.09.15
 * By          : Chongkun Lee
 * Contact     : bach1004@samsung.com
 * Description : PCM1742 Audio DAC control Low Level API
 * $Log:$
 ******************************************************************************
 */
#ifndef	_PCM1742_C_
#define	_PCM1742_C_


/******************************************************
 *       INCLUDES
 *****************************************************/
#include 	"PCM1742.h"

/******************************************************************************
 *  Function name : PCM1742_Control
 *  Arguments     :
 *       IN         register address, data
 *       OUT
 *       INOUT
 *  Return        : VOID
 *  By            : Chongkun Lee
 *  Description   : PCM1742 series audio dac control function.
 *
 *  Revisions     :
 ******************************************************************************
 */
VOID PCM1742_Control(UCHAR idx,UCHAR data)
{
	UCHAR 				count;
	SysInterruptLevel_t oldlevel;

	//SysPrintf("\n PCM1742 Start[%x][%x]\n", idx, data);	

	PCM1742_DataReset();
  
	/* Interrupt disable temporary */
	SysControlInterrupt( INTERRUPT_DISABLE, &oldlevel, 0 );

	PCM1742_Enable();

	/* Send Register Address */
	for(count=0 ; count<8 ; count++)
	{
		PCM1742_ClkLow();
		
		if(idx & 0x80)
			PCM1742_DataHigh();
		else
			PCM1742_DataLow();
		
		idx=idx<<1;
				
		PCM1742_ClkHigh();
	}
	
	/* Send Data */
	for(count=0 ; count<8 ; count++)
	{
		PCM1742_ClkLow();
				
		if(data & 0x80)
			PCM1742_DataHigh();
		else
			PCM1742_DataLow();
		
		data=data<<1;

		PCM1742_ClkHigh();		
	}
	
	PCM1742_Disable();
	
	PCM1742_ClkLow();
	
	PCM1742_DataLow();
	
  	/* Interrupt enable */
	SysControlInterrupt( oldlevel, &oldlevel, 0 );

	//SysPrintf("\n PCM1742 End \n");
}

/******************************************************************************
 *  Function name : ADAC_Init
 *  Arguments     :
 *       IN         
 *       OUT
 *       INOUT
 *  Return        : VOID
 *  By            : Chongkun Lee
 *  Description   : DAC initialize function
 *  Revisions     :
 ******************************************************************************
 */
VOID ADAC_Init( VOID )
{
	PCM1742_Control(0x10, 0xff);	// No Attenuation control
	PCM1742_Control(0x11, 0xff);	// NO Attenuation control
	PCM1742_Control(0x12, 0x40);	// Oversampling is 128x
//	PCM1742_Control(0x13, 0x00); 	// this register set at PCM1742_SetDeemphasis()
	PCM1742_Control(0x14, 0x05);	// Left Justified, for all data
//	PCM1742_Control(0x15, 0x0ff);	// No Attenuation control   ??
	PCM1742_Control(0x16, 0x00); 	// optput phase normal, zero flag high at zero, L/R channel zero flag independant	
}

/******************************************************************************
 *  Function name : ADAC_Mute
 *  Arguments     :
 *       IN         
 *       OUT
 *       INOUT
 *  Return        : VOID
 *  By            : Chongkun Lee
 *  Description   : DAC mute function
 *  Revisions     :
 ******************************************************************************
 */
VOID ADAC_Mute( BOOL mute )
{
	if( mute )
	{
		UINT i;
		
		PCM1742_Control( 0x12, 3 );
		for(i=0;i<0x10000;i++);
		PCM1742_HWMUTE_ON();	/* HW Mute On */
	}
	else
	{
		PCM1742_HWMUTE_OFF();	/* HW Mute Off */
		PCM1742_Control( 0x12, 0 );
	}	
}

/******************************************************************************
 *  Function name : ADAC_Mute
 *  Arguments     :
 *       IN         
 *       OUT
 *       INOUT
 *  Return        : VOID
 *  By            : Chongkun Lee
 *  Description   : DAC mute function
 *  Revisions     :
 ******************************************************************************
 */
VOID ADAC_Deemphasis( BOOL onoff, UINT fs )
{
	UCHAR data = 0;

	if( fs == 44100 )
		data = 0<<5;
	else if( fs == 48000 )
		data = 1<<5;
	else if( fs == 32000 )
		data = 2<<5;
		 
	if( onoff )
	{
		PCM1742_Control( 0x13, data|0x10);	// DeEmphasis
	}
	else
	{
		PCM1742_Control( 0x13, 0x0);	// DeEmphasis
	}
}


/******************************************************************************
 *  Function name : ADAC_Volume
 *  Arguments     :
 *       IN         
 *       OUT
 *       INOUT
 *  Return        : VOID
 *  By            : Chongkun Lee
 *  Description   : DAC volume control function ( 0x0 - 0xff )
 *  Revisions     :
 ******************************************************************************
 */
VOID ADAC_Volume( UCHAR vol )
{
	UCHAR data;

	if( vol == 0 )
		data = 0;
	else
		data = vol + 225;
	
	PCM1742_Control(0x10, vol);
	PCM1742_Control(0x11, vol);
}
#endif //_PCM1742_C_
/* end of PCM1742.c */

⌨️ 快捷键说明

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