亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? codecs.c

?? 2.4G無線音箱的接收程序,采用ATMEGA8單片機(jī)和STS公司的無線模塊完成
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/******************************************************************************
*
* Purpose:      CODEC Functions
*
* Comment:	 	Type of codec can be set with the defines : CODEC_PCM3002 or
*				CODEC_WM8731
*				USE_DUAL_CODEC : if this define is set the interface B will also
*				be enabled.
*		 		VOLUME_DARR and VOLUME_CODEC defines if the volume on mu is
*				control using the codec or using the DARR79 volume registers.
*
* Creator:      Rob Lansbergen
*
* Version:		$Revision: 9 $
*
* File Name:	$Workfile: codecs.c $
*
* Author:		Rob Lansbergen
*
* Check in:		$Author: Chong.cheeleong $
*
* The information is provided 揳s is?without any express or implied warranty
* of any kind, * including warranties of merchantability, noninfringement of
* intellectual property, or fitness for any particular purpose. In no event sha
* Wireless Sound Solutions and/or its affiliate companies, or its suppliers be
* liable for any damages whatsoever arising out of the use of or inability to
* use the information or the materials. Wireless Sound Solutions, its affiliate
* companies, and its suppliers further do not warrant the accuracy or
* completeness of information, text, graphics, or other items contained within
* materials. Wireless Sound Solutions, Inc., may make changes to materials, or
* the products described within, at any time, without notice.
* ?007 Wireless Sound Solutions. All rights reserved. Wireless Sound Solutions
* STS and STS-wireless are trademarks of Wireless Sound Solutions.
******************************************************************************/
#include "defines.h"

unsigned char Wolfson_Slave_Address;
unsigned char Wireless_Codec_Select;
unsigned char prev_Sync_Stat = 0;

/* Local function declarations */
unsigned char 	Config_Codec_PCM3002	(void);
unsigned char 	Config_Codec_WM8731		(void);
unsigned char 	Config_Codec_CS4251 	(void);
unsigned char 	ConfigCodecSingle_WM8731(unsigned char Codec_A_B);
unsigned char 	Config_Codec_CS4341 	(void);

void          	Set_PCM3003       		(unsigned char address, int data);
unsigned char 	Set_WM8731        		(unsigned char address, int data);
unsigned char 	Set_CS4251       		(unsigned char address, int data);
unsigned char 	Set_CS4341       		(unsigned char address, int data);

void 			SetInVolume_PCM3002		(unsigned char Left_Right, unsigned char Volume);
void 			SetInVolume_WM8731		(unsigned char Left_Right, unsigned char Volume);
void 			SetInVolume_CS4251		(unsigned char Left_Right, unsigned char Volume);
void 			SetInVolume_CS4341		(unsigned char Left_Right, unsigned char Volume);

void 			SetVolume_PCM3002		(unsigned char Left_Right, unsigned char Volume);
void 			SetVolume_WM8731		(unsigned char Left_Right, unsigned char Volume);
void 			SetVolume_DARR80		(unsigned char Left_Right, unsigned char Volume);
void 			SetVolume_CS4251		(unsigned char Left_Right, unsigned char Volume);
void 			SetVolume_CS4341		(unsigned char Left_Right, unsigned char Volume);

extern char key_state; 
/******************************************************************************
*
* Function Name : Config Codec
*
* Purpose       : Config the codec to I2S 48 Khz
*
* Return value  : none
*
******************************************************************************/
unsigned char Config_Codec(void)
{
#ifdef CODEC_PCM3002
	return(Config_Codec_PCM3002());
#endif

#ifdef CODEC_WM8731
	return(Config_Codec_WM8731());
#endif

#ifdef CODEC_CS5341_WM8728
	return(0);
#endif

#ifdef CODEC_CS5368
	return(0);
#endif

#ifdef CODEC_CS4251
	return(Config_Codec_CS4251());
#endif
#ifdef CODEC_CS4341
	return(Config_Codec_CS4341());
#endif
}

/******************************************************************************
*
* Function Name : SetVolume
*
* Purpose       : Set Volume
*
* arguments	: Left_Right
*		  0 is Left
*         1 is Right
*		  Volume is a value from 0 to 0xFF
* Return value  : none
*
******************************************************************************/
void SetVolume(unsigned char Left_Right, unsigned char Volume)
{
#ifdef VOLUME_DARR
	SetVolume_DARR80(Left_Right, Volume);
#endif

#ifdef CODEC_PCM3002
	#ifdef VOLUME_CODEC
		SetVolume_PCM3002(Left_Right, Volume);
	#endif
#endif

#ifdef CODEC_WM8731
	#ifdef VOLUME_CODEC
		SetVolume_WM8731(Left_Right, Volume);
	#endif
#endif

#ifdef CODEC_CS5341_WM8728
#endif

#ifdef CODEC_CS5368
#endif

#ifdef CODEC_WM8731
	#ifdef VOLUME_CODEC
		SetVolume_CS4251(Left_Right, Volume);
	#endif
#endif

#ifdef CODEC_CS4251
	#ifdef VOLUME_CODEC
		SetVolume_CS4251(Left_Right, Volume);
	#endif
#endif
#ifdef CODEC_CS4341
	#ifdef VOLUME_CODEC
		SetVolume_CS4341(Left_Right, 0x00);
	#endif
#endif

}


/******************************************************************************
*
* Function Name : SetInVolume
*
* Purpose       : Set Volume
*
* arguments	: Left_Right
*		  0 is Left
*         1 is Right
*		  Volume is a value from 0 to 0xff
* Return value  : none
*
******************************************************************************/
void SetInVolume(unsigned char Left_Right, unsigned char Volume)
{
#ifdef CODEC_PCM3002
	SetInVolume_PCM3002(Left_Right, Volume);
#endif

#ifdef CODEC_WM8731
	SetInVolume_WM8731(Left_Right, Volume);
#endif

#ifdef CODEC_CS5341_WM8728
#endif

#ifdef CODEC_CS5368
#endif

#ifdef CODEC_CS4251
	SetInVolume_CS4251(Left_Right, Volume);
#endif

#ifdef CODEC_CS4341
	SetInVolume_CS4341(Left_Right, 0x00);
#endif

}


//==============================================================================================

/*********************/
/*** CODEC_PCM3002 ***/
/*********************/
void Set_PCM3003 (unsigned char address, int data)
{
#ifdef CODEC_PCM3002
	unsigned char i;
	unsigned int tmp16;

	tmp16 = ((address & 0x03) << 9) + (data & 0x1FF); /* set Registers Address */

	PCM_ML_HIGH;
	PCM_MC_HIGH;
	PCM_ML_LOW;

	for (i = 0; i < 16; i++)
	{
		PCM_MC_LOW;

		if (tmp16 & 0x8000) {PCM_MD_HIGH;}
		else                {PCM_MD_LOW;}

		tmp16 = tmp16 << 1;
		PCM_MC_HIGH;
	}

	PCM_MC_LOW;
	PCM_ML_HIGH;
#endif
}

void SetInVolume_PCM3002(unsigned char Left_Right, unsigned char Volume)
{
	//Set_PCM3003(Left_Right & 0x01, Volume | 0x100);
}

void SetVolume_PCM3002(unsigned char Left_Right, unsigned char Volume)
{
	//Set_PCM3003(Left_Right & 0x01, Volume | 0x100);
}

unsigned char Config_Codec_PCM3002(void)
{
#ifdef CODEC_PCM3002
	RESET_CODEC_OFF;

	if (Use_ModuleMode == MU)
		Set_PCM3003(2, 0x100 | 2);
	else
		Set_PCM3003(2, 0x40 | 2);

	Set_PCM3003(0x03, 0x0000E); /* Set to I2S */
	//Set_PCM3003(0x00, 0x100 | START_UP_VOLUME);
	//Set_PCM3003(0x01, 0x100 | START_UP_VOLUME);

#endif
	return (0);
}

//==============================================================================================

/********************/
/*** CODEC_WM8731 ***/
/********************/
unsigned char Set_WM8731 (unsigned char address, int data)
{
	unsigned char I2C_error = 0;

	/* Warning, disable unit before configuring */

	/* Wolfson register map */
	/* address part 7 bits  */
	/* data part 9 bits     */

	/* i2c_map = 7 bits address + MSB bit of Wolfson data */
	/* i2c_data = lower 8 bits of Wolfson data            */

	if (Wireless_Codec_Select == 0)
	{
		i2cSlaveAddress	= Wolfson_Slave_Address; /* Address of Wolfson */
		I2C_error = I2C_Write_Byte((address << 1) + ((data >> 8) & 0x01), data & 0xFF);
		/* switch back to org i2c slave address */
		i2cSlaveAddress = I2C_SLAVE_ADDRESS;
	}
	else /* codec on MU side is programm by CU using the wireless I2C mechanism */
	{
		TX_Data_send_array[0] = MSG_TYPE_WRITE_WITHOUT_ACK + 4;
		TX_Data_send_array[1] = IMSL_ADDR;
		TX_Data_send_array[2] = Wolfson_Slave_Address;		// Slave Address
		TX_Data_send_array[3] = (address << 1) + ((data >> 8) & 0x01);
		TX_Data_send_array[4] = 1;		// Amount of I2C Words
		TX_Data_send_array[5] = data & 0xff;
		Send_Message(STR_A, 2049); /* Magic number!!! */
	}
	return (I2C_error);
}


void SetInVolume_WM8731(unsigned char Left_Right, unsigned char Volume)
{
	if ((Left_Right == 0x00) || (Left_Right == 0x01))
	{
		Wolfson_Slave_Address = 0x34;
		Set_WM8731(0x00 + (Left_Right), Volume >> 3); /* volume is 8->5 bit */
	}
	#ifdef USE_DUAL_CODEC
	else /* 0x02 & 0x03 stript down to 0x00 and 0x01 */
	{
		Wolfson_Slave_Address = 0x36; /* Codec B */
		Set_WM8731(0x00 + (Left_Right & 0x01), Volume >> 3); /* volume is 8->5 bit */
		Wolfson_Slave_Address = 0x34;
	}
	#endif /* USE_DUAL_CODEC */
}


void SetVolume_WM8731(unsigned char Left_Right, unsigned char Volume)
{
	if ((Left_Right == 0x00) || (Left_Right == 0x01))
	{
		Wolfson_Slave_Address = 0x34;
		Set_WM8731(0x02 + (Left_Right & 0x01), Volume >> 1); /* volume is 8->7 bit */
	}
	#ifdef USE_DUAL_CODEC
		else
		{
			Wolfson_Slave_Address = 0x36; /* Codec B */
			Set_WM8731(0x02 + (Left_Right & 0x01), Volume >> 1); /* volume is 8->7 bit */
			Wolfson_Slave_Address = 0x34;
		}
	#endif /* END USE_DUAL_CODEC */	
}


unsigned char Config_Codec_WM8731(void)
{
	unsigned char I2C_error = 0;

	I2C_error = ConfigCodecSingle_WM8731(0); /* Inteface A */
	#ifdef USE_DUAL_CODEC
		I2C_error = ConfigCodecSingle_WM8731(1); /* Inteface B */
	#endif

	#ifdef VOLUME_DARR
		/* set darr to start-up volume, with IB the max setting is 126 because of clipping signals */
		SetVolume_DARR80(0, START_UP_VOLUME);
		SetVolume_DARR80(1, START_UP_VOLUME);
		SetVolume_DARR80(2, START_UP_VOLUME);
		SetVolume_DARR80(3, START_UP_VOLUME);
	#endif

	return (I2C_error);
}

/* Power down Registers bit address */
#define LINEIN_ON   0x00
#define LINEIN_OFF  0x01
#define MIC_ON      0x00
#define MIC_OFF     0x02
#define ADC_ON      0x00
#define ADC_OFF     0x04
#define DAC_ON      0x00
#define DAC_OFF     0x08
#define LINEOUT_ON  0x00
#define LINEOUT_OFF 0x10
#define OSC_ON      0x00
#define OSC_OFF     0x20
#define CLKOUT_ON   0x00
#define CLKOUT_OFF  0x40
#define POWER_ON    0x00
#define POWER_OFF   0x80

unsigned char ConfigCodecSingle_WM8731(unsigned char Codec_A_B)
{
	unsigned char I2C_error = 0;

	if (Codec_A_B == 0) Wolfson_Slave_Address = 0x34;
	else                Wolfson_Slave_Address = 0x36;

	I2C_error += Set_WM8731(0, 0x17); /* LinVol Left  17 is 0 db versterking */
	I2C_error += Set_WM8731(1, 0x17); /* LinVol Right 17 is 0 db versterking */
	I2C_error += Set_WM8731(2, 0x7F); /* HPVol Left */
	I2C_error += Set_WM8731(3, 0x7F); /* HPVol Right */
	I2C_error += Set_WM8731(4, 0x12); /* Analog audio path control */
	I2C_error += Set_WM8731(5, 0x01); /* Digital audio path control */

	if (Use_ModuleMode == MU)
	{
		if (Codec_A_B == 0)
		{
			#ifdef USE_DUAL_CODEC
				I2C_error += Set_WM8731(6, POWER_ON|OSC_ON|CLKOUT_ON|MIC_OFF|DAC_ON|ADC_ON|LINEOUT_ON|LINEIN_ON);
			#else
				I2C_error += Set_WM8731(6, POWER_ON|OSC_ON|CLKOUT_OFF|MIC_OFF|DAC_ON|ADC_OFF|LINEOUT_ON|LINEIN_OFF);
			#endif
		}
		if (Codec_A_B != 0)
			I2C_error += Set_WM8731(6, OSC_OFF|POWER_ON|CLKOUT_OFF|MIC_OFF|DAC_ON|ADC_ON|LINEOUT_ON);
	}
	else
	{
		/* if bit 6 is set the ADC does not work anymore (according to the data sheet this bit should be set. */
		/* Keep LINEOUT_ON also on CU because this helps VMID to get to the correct value faster */
		if (Codec_A_B == 0)
		{
			#ifdef	USE_DUAL_CODEC
				I2C_error += Set_WM8731(6, POWER_ON|OSC_ON|CLKOUT_ON|ADC_ON|DAC_ON|LINEOUT_ON);
			#else
				I2C_error += Set_WM8731(6, POWER_ON|OSC_ON|CLKOUT_OFF|ADC_ON|DAC_OFF|LINEOUT_ON|LINEIN_ON);
			#endif
		}
		if (Codec_A_B != 0)
			I2C_error += Set_WM8731(6, OSC_OFF|POWER_ON|CLKOUT_OFF|MIC_OFF|DAC_ON|ADC_ON|LINEOUT_ON);
	}

	if (Codec_A_B == 0) I2C_error += Set_WM8731(7, 0x4A); /* Master */
	else                I2C_error += Set_WM8731(7, 0x0A); /* Slave  */

	
	if (Use_SPDIF) I2C_error += Set_WM8731(8, 0x00); /* codecs are not used, set 12MHz clock undivided to DARR79 */
	else
	{
		#ifdef USE_WM8731_12Mhz
			I2C_error += Set_WM8731(8, 0x5D); /* half Sampling control : use USB mode (12MHZ/250=48KHz) */
		#else
			if (Codec_A_B == 0) I2C_error += Set_WM8731(8, 0x5c); /* half Clock output(Div intclock) */
		  	else                I2C_error += Set_WM8731(8, 0x1c); /* receive halve clock but still use 96 kHZ   */
		#endif
	}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
666欧美在线视频| 久久久久久一二三区| 国产一区二区视频在线| 一区二区三区在线播放| 精品88久久久久88久久久| 日本道色综合久久| 成人性生交大片免费看视频在线| 亚洲va天堂va国产va久| 国产精品久久久久aaaa樱花| 精品国产一区二区三区久久久蜜月 | 综合激情网...| 久久夜色精品国产噜噜av| 欧美亚洲国产一区二区三区va| 粉嫩一区二区三区性色av| 久色婷婷小香蕉久久| 亚洲妇熟xx妇色黄| 一区二区三区中文字幕电影| 国产偷国产偷精品高清尤物| 日韩免费电影一区| 91精品国产品国语在线不卡| 欧美性淫爽ww久久久久无| 91在线免费播放| 成人a免费在线看| 国产成人av影院| 国产又粗又猛又爽又黄91精品| 日韩电影免费在线看| 亚洲成人精品一区| 亚洲国产一区视频| 亚洲影院理伦片| 亚洲综合丝袜美腿| 亚洲综合一区在线| 亚洲国产中文字幕在线视频综合| 一区二区三区日韩| 亚洲制服丝袜一区| 午夜一区二区三区视频| 国内精品嫩模私拍在线| 日韩不卡在线观看日韩不卡视频| 亚洲va欧美va天堂v国产综合| 亚洲制服欧美中文字幕中文字幕| 亚洲最快最全在线视频| 亚洲综合小说图片| 亚洲国产毛片aaaaa无费看| 夜夜精品浪潮av一区二区三区| 亚洲最新视频在线观看| 天天综合日日夜夜精品| 日韩av网站免费在线| 日韩av电影免费观看高清完整版| 日韩电影在线观看一区| 紧缚奴在线一区二区三区| 国产中文字幕精品| 成人高清免费观看| 色久综合一二码| 欧美男男青年gay1069videost| 欧美一级日韩不卡播放免费| 日韩精品专区在线影院观看| 久久九九久久九九| 国产精品美女久久久久久久网站| 综合激情网...| 亚洲va欧美va人人爽午夜| 日本中文字幕一区| 国产精华液一区二区三区| av爱爱亚洲一区| 欧美日韩一级黄| 久久午夜羞羞影院免费观看| 欧美国产日韩a欧美在线观看 | 免费看欧美美女黄的网站| 偷拍亚洲欧洲综合| 经典一区二区三区| www.亚洲色图.com| 欧美日韩国产一二三| 精品国产免费人成在线观看| 国产精品国产自产拍在线| 爽好久久久欧美精品| 国产一区二区在线观看视频| 成人av网站在线观看| 欧美日韩国产综合一区二区三区 | 中文字幕综合网| 日韩电影免费在线| 国产 欧美在线| 欧美精品电影在线播放| 亚洲成av人片在线观看无码| 久久99精品视频| 91麻豆精品视频| 欧美草草影院在线视频| 自拍偷自拍亚洲精品播放| 久久精品国产精品亚洲精品| 91丝袜美腿高跟国产极品老师| 欧美精品久久久久久久多人混战| 国产欧美日韩一区二区三区在线观看 | 欧美天天综合网| 欧美国产精品中文字幕| 丝袜美腿一区二区三区| 99国产精品久| 国产亚洲精品超碰| 日韩一区精品视频| 91亚洲男人天堂| 久久蜜桃香蕉精品一区二区三区| 亚洲国产精品一区二区久久恐怖片 | 亚洲精品乱码久久久久| 国产精品911| 日韩精品中文字幕一区二区三区| 日韩美女啊v在线免费观看| 精品制服美女丁香| 欧美色成人综合| 综合久久国产九一剧情麻豆| 国产麻豆精品在线| 欧美一区二区播放| 亚洲高清免费一级二级三级| 色综合久久综合| 国产精品三级av| 精品一区二区av| 日韩你懂的在线观看| 日韩一区精品字幕| 欧美日韩国产精选| 亚洲综合色成人| 99在线精品一区二区三区| 欧美激情中文字幕| 国产在线麻豆精品观看| 日韩欧美国产三级电影视频| 视频一区中文字幕国产| 欧美视频一区在线观看| 亚洲男同性视频| 色婷婷综合在线| 亚洲男人天堂一区| 91美女片黄在线观看91美女| 亚洲欧洲韩国日本视频| 成人黄色小视频在线观看| 国产亚洲精品资源在线26u| 91免费国产在线| 国产精品日产欧美久久久久| 国产成人一级电影| 亚洲国产岛国毛片在线| 成人av在线资源网站| 国产精品国产自产拍高清av王其| 波多野结衣视频一区| 国产精品日韩精品欧美在线| 成人激情电影免费在线观看| 亚洲特黄一级片| 在线亚洲一区二区| 亚洲国产精品久久久久秋霞影院| 欧美色欧美亚洲另类二区| 图片区小说区区亚洲影院| 日韩一区和二区| 国内精品免费在线观看| 欧美激情一区三区| av成人免费在线| 亚洲在线中文字幕| 欧美一级xxx| 国产成人精品aa毛片| 中文字幕欧美一| 欧美日韩国产一级| 精品在线观看免费| 国产精品情趣视频| 91高清在线观看| 另类成人小视频在线| 国产日产欧美一区二区视频| eeuss影院一区二区三区| 亚洲国产中文字幕在线视频综合| 欧美日韩国产在线观看| 国产麻豆视频精品| 亚洲日本在线天堂| 欧美一区二区视频观看视频| 国产在线精品国自产拍免费| 亚洲天堂a在线| 日韩一级黄色大片| yourporn久久国产精品| 亚洲地区一二三色| 2020国产精品| 91免费看`日韩一区二区| 日本成人在线电影网| 中文字幕不卡一区| 欧美精品免费视频| 国产高清视频一区| 一区二区三区影院| 精品免费一区二区三区| 91视频在线看| 韩国女主播一区| 亚洲在线视频网站| 久久久精品免费观看| 欧美曰成人黄网| 国产麻豆91精品| 亚洲一区二区三区美女| 久久你懂得1024| 欧美日韩久久久一区| 国产成人精品1024| 日韩成人精品在线观看| **性色生活片久久毛片| 日韩欧美国产系列| 91啪九色porn原创视频在线观看| 日韩国产精品91| 亚洲精品欧美激情| 国产女人18毛片水真多成人如厕| 欧美人与z0zoxxxx视频| 99久久久国产精品| 国产自产v一区二区三区c| 五月婷婷激情综合| 亚洲激情自拍偷拍| 欧美国产精品专区| 日韩精品中午字幕| 在线播放欧美女士性生活|