📄 pcm1742.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 + -