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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dac.cpp

?? EM8511s中使用的mp3播放器
?? CPP
字號:
#include "dac.h"#if 0#include <stdio.h>static void debug_break (void){}#define ASSERT(exp)					((void)((exp)?1:(printf ("ASSERT failed: line %d, file %s\n", __LINE__,__FILE__), debug_break(), 0)))#define DEBUGMSG(cond,printf_exp)	((void)((cond)?(printf printf_exp),1:0))#else#define ASSERT(exp)#define DEBUGMSG(cond,printf_exp)#endif#define MAX(X,Y) (((X)>=(Y))?(X):(Y))	// to find the max between two number.#define MIN(X,Y) (((X)<=(Y))?(X):(Y))	// to find the min between two number.static int mute = 0;static int volume = 50;static int balance = 50;typedef unsigned char RMuint8;typedef unsigned long RMuint32;#define I2C_MASTER_BASE_ADDRESS		(0x500800)#define I2C_MASTER_CONFIG			(I2C_MASTER_BASE_ADDRESS + 0x00)#define I2C_MASTER_CLK_DIV			(I2C_MASTER_BASE_ADDRESS + 0x04)#define I2C_MASTER_DEV_ADDR			(I2C_MASTER_BASE_ADDRESS + 0x08)#define I2C_MASTER_ADR				(I2C_MASTER_BASE_ADDRESS + 0x0c)#define I2C_MASTER_DATAOUT			(I2C_MASTER_BASE_ADDRESS + 0x10)#define I2C_MASTER_DATAIN			(I2C_MASTER_BASE_ADDRESS + 0x14)#define I2C_MASTER_STATUS			(I2C_MASTER_BASE_ADDRESS + 0x18)#define I2C_MASTER_STARTXFER		(I2C_MASTER_BASE_ADDRESS + 0x1c)#define I2C_MASTER_BYTE_CNT			(I2C_MASTER_BASE_ADDRESS + 0x20)#define I2C_MASTER_INTEN			(I2C_MASTER_BASE_ADDRESS + 0x24)#define I2C_MASTER_INT				(I2C_MASTER_BASE_ADDRESS + 0x28)#define ADRR_DEVICE					0x34	//adresse of the device (0x36)#define ADRR_REG_VOL_LEFT			4	//adresse of the register for the volume headphone left#define ADRR_REG_VOL_RIGHT			6	//adresse of the register for the volume headphone right#define ADRR_REG_RESET				0x1e //0	//adresse of the register for the reset of board#define ADRR_REG_ACTIVATION			18	//adresse of the register for the actvation of sound#define ADRR_REG_DAC_SELECTED		8	//adresse of the register for the selected dac#define ADRR_REG_MUTE				10	//adresse of the register for manage mute#define ADRR_REG_POWER				12	//adresse of the register for manage power#define DAC_SELECTED_ENABLE			0x10	//to selected the dac#define RESET_SOUND					0x00	//to reset all function of sound#define ACTIVATION_ENABLE			0x01	//to activate the sound#define MUTE_DISABLE				0x00	//to disable the function mute#define MUTE_ENABLE					0x08	//to enable the function mute#define ENABLE_POWER				0x66	//to manage the function power down (DAC and LINEOUT power on) [01100110]static void EM85xx_WriteReg (RMuint32 Reg, RMuint32 Data){	*((volatile RMuint32 *)Reg) = Data;}static RMuint32 EM85xx_ReadReg (RMuint32 Reg){	return *((volatile RMuint32 *)(Reg));}static int EM85xxI2C__Write (RMuint8 devaddr, RMuint8 adr, RMuint8* pData, int n){	int i;	EM85xx_WriteReg (I2C_MASTER_CONFIG, 0xf8);	EM85xx_WriteReg (I2C_MASTER_CLK_DIV, 375);	// assume 150mhz clock (375=750/2)	EM85xx_WriteReg (I2C_MASTER_DEV_ADDR, devaddr >> 1);	// ready for a command	// XXX bug: we really should have a timeout here	while ((EM85xx_ReadReg (I2C_MASTER_STATUS) & 1) == 0);	// write	for (i=0; i<n; i++)	{ 		EM85xx_WriteReg (I2C_MASTER_ADR, adr++);		EM85xx_WriteReg (I2C_MASTER_BYTE_CNT, 0);		EM85xx_WriteReg (I2C_MASTER_DATAOUT, *pData++);		EM85xx_WriteReg (I2C_MASTER_STARTXFER, 0);		// XXX bug: we really should have a timeout here		while ((EM85xx_ReadReg (I2C_MASTER_STATUS) & 2) == 0);	}		return 1;}static int EM85xxI2C__Read (RMuint8 devaddr, RMuint8 adr, RMuint8* pData, int n){	int i;		EM85xx_WriteReg (I2C_MASTER_CLK_DIV, 375);	// assume 150mhz clock (375=750/2)		// ready for a command	// XXX bug: we really should have a timeout here	while ((EM85xx_ReadReg (I2C_MASTER_STATUS) & 1) == 0);	for (i=0; i<n; i++)	{		EM85xx_WriteReg (I2C_MASTER_CONFIG, 0xfa);		EM85xx_WriteReg (I2C_MASTER_BYTE_CNT, 0);		EM85xx_WriteReg (I2C_MASTER_DEV_ADDR, devaddr >> 1);		EM85xx_WriteReg	(I2C_MASTER_DATAOUT, adr++);				EM85xx_WriteReg	(I2C_MASTER_STARTXFER, 0 | 0x4);		// XXX bug: we really should have a timeout here		while ((EM85xx_ReadReg (I2C_MASTER_STATUS) & 2) == 0);		while ((EM85xx_ReadReg (I2C_MASTER_STATUS) & 1) == 0);		EM85xx_WriteReg (I2C_MASTER_CONFIG, 0x00FA);		EM85xx_WriteReg (I2C_MASTER_BYTE_CNT, 0);				EM85xx_WriteReg (I2C_MASTER_DEV_ADDR, devaddr >> 1);			EM85xx_WriteReg (I2C_MASTER_STARTXFER, 1);		// XXX bug: we really should have a timeout here		while ((EM85xx_ReadReg (I2C_MASTER_STATUS) & 4) == 0);		while ((EM85xx_ReadReg (I2C_MASTER_STATUS) & 1) == 0);		*pData++ = (RMuint8)EM85xx_ReadReg (I2C_MASTER_DATAIN);	}	return 1;}int dac_init (void){	RMuint8 data;	// reset the dac	data = (RMuint8)RESET_SOUND;	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_RESET, &data, 1);	DEBUGMSG (1, ("%02x: wrote 0x%02x to register %d\n", (RMuint8)ADRR_DEVICE, data, (RMuint8)ADRR_REG_RESET));    // activate dac	data = (RMuint8)ACTIVATION_ENABLE;	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_ACTIVATION, &data, 1);	DEBUGMSG (1, ("%02x: wrote 0x%02x to register %d\n", (RMuint8)ADRR_DEVICE, data, (RMuint8)ADRR_REG_ACTIVATION));	// select dac	data = (RMuint8)DAC_SELECTED_ENABLE;	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_DAC_SELECTED, &data, 1);	DEBUGMSG (1, ("%02x: wrote 0x%02x to register %d\n", (RMuint8)ADRR_DEVICE, data, (RMuint8)ADRR_REG_DAC_SELECTED));	// disable mute	data = (RMuint8)MUTE_DISABLE;	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_MUTE, &data, 1);	DEBUGMSG (1, ("%02x: wrote 0x%02x to register %d\n", (RMuint8)ADRR_DEVICE, data, (RMuint8) ADRR_REG_MUTE));	// disable power down	data = (RMuint8)ENABLE_POWER;	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_POWER, &data, 1);		DEBUGMSG (1, ("%02x: wrote 0x%02x to register %d\n", (RMuint8)ADRR_DEVICE, data, (RMuint8)ADRR_REG_POWER));	// put the volume at 50%	int volLeft;	int volRight;	if (balance > 50)	{		volLeft = (balance*volume) / 100;		volRight = volume;		}	else if (balance < 50)	{		volLeft = volume;		volRight = ((100-balance)*volume)/100;		}	else if (balance == 50)	{		volLeft = volume;		volRight = volume;		}	DEBUGMSG (1, ("balance : %d volume is :%d and [volLeft : %d volRight : %d ]\n", balance, volume, volLeft, volRight));	// to pump up the volume	volLeft = (volLeft*79/100) + 48;	volRight = (volRight*79/100) + 48;	DEBUGMSG (1, ("balance : %d volume is :%d and [volLeft : %d volRight : %d ]\n",balance, volume, volLeft, volRight));		EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_VOL_LEFT, (RMuint8 *)&volLeft, 1);	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_VOL_RIGHT, (RMuint8 *)&volRight, 1);	return 0;}int dac_getvolume (void){	return volume;}int dac_getbalance (void){	return balance;}int dac_setvolume (int vol) {	int volLeft;	int volRight;	volume = MIN (100, vol);	volume = MAX (0, vol);	if (balance > 50)	{		volLeft = ((100-balance)*2*volume)/100;		volRight = volume;		}	else if (balance < 50)	{		volLeft = volume;		volRight = (balance*2*volume)/100;		}	else if (balance == 50)	{		volLeft=volume;		volRight=volume;		}	DEBUGMSG (1, ("balance : %d volume is :%d and [volLeft : %d volRight : %d ]\n", balance, volume, volLeft, volRight));	// to pump up the volume	volLeft = (volLeft*79/100) + 48;	volRight = (volRight*79/100) + 48;	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_VOL_LEFT, (RMuint8 *)&volLeft, 1);	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE,( RMuint8)ADRR_REG_VOL_RIGHT, (RMuint8 *)&volRight, 1);	return volume;}int dac_setbalance (const int bal) {	int volLeft;	int volRight;	balance = MIN (100, bal);	balance = MAX (0, bal);	if (balance > 50)	{		volLeft = ((100-balance)*2*volume)/100;		volRight = volume;		}	else if(balance < 50)	{		volLeft = volume;		volRight = (balance*2*volume)/100;		}	else if(balance == 50)	{		volLeft = volume;		volRight = volume;		}	DEBUGMSG (1, ("\nbalance : %d volume is :%d and [volLeft : %d volRight : %d ]\n", balance, volume, volLeft, volRight));	// to pump up the volume	volLeft = (volLeft*79/100)+48;	volRight = (volRight*79/100)+48;		EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_VOL_LEFT, (RMuint8 *)&volLeft, 1);	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_VOL_RIGHT, (RMuint8 *)&volRight, 1);	return balance;}int dac_getmute (void){	return mute;}int dac_volumeup (void){	int volLeft;	int volRight;	volume = MIN (100, volume+5);	if (balance > 50)	{		volLeft = ((100-balance)*2*volume)/100;		volRight = volume;		}	else if (balance < 50)	{		volLeft = volume;		volRight = (balance*2*volume)/100;		}	else if (balance == 50)	{		volLeft=volume;		volRight=volume;		}	DEBUGMSG (1, ("balance : %d volume is :%d and [volLeft : %d volRight : %d ]\n", balance, volume, volLeft, volRight));	// to pump up the volume	volLeft = (volLeft*79/100) + 48;	volRight = (volRight*79/100) + 48;	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_VOL_LEFT, (RMuint8 *)&volLeft, 1);	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE,( RMuint8)ADRR_REG_VOL_RIGHT, (RMuint8 *)&volRight, 1);	return volume;}int dac_volumedown (void){		int volLeft;	int volRight;	volume = MAX (0, volume-5);	if (balance > 50)	{		volLeft = ((100-balance)*2*volume)/100;		volRight = volume;		}	else if (balance < 50)	{		volLeft = volume;		volRight = (balance*2*volume)/100;		}	else if (balance == 50)	{		volLeft = volume;		volRight = volume;		}	DEBUGMSG (1, ("balance : %d volume is :%d and [volLeft : %d volRight : %d ]\n", balance, volume, volLeft, volRight));	// to pump up the volume	volLeft = (volLeft*79/100)+48;	volRight = (volRight*79/100)+48;	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_VOL_LEFT,(RMuint8 *)&volLeft, 1);	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_VOL_RIGHT,(RMuint8 *)&volRight, 1);	return volume;}int dac_balanceright (void){	int volLeft;	int volRight;	balance = MIN (100, balance+5);	if (balance > 50)	{		volLeft = ((100-balance)*2*volume)/100;		volRight = volume;		}	else if(balance < 50)	{		volLeft = volume;		volRight = (balance*2*volume)/100;		}	else if(balance == 50)	{		volLeft = volume;		volRight = volume;		}	DEBUGMSG (1, ("\nbalance : %d volume is :%d and [volLeft : %d volRight : %d ]\n", balance, volume, volLeft, volRight));	// to pump up the volume	volLeft = (volLeft*79/100)+48;	volRight = (volRight*79/100)+48;		EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_VOL_LEFT, (RMuint8 *)&volLeft, 1);	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_VOL_RIGHT, (RMuint8 *)&volRight, 1);	return balance;}int dac_balanceleft (void){	int volLeft;	int volRight;	balance = MAX (0, balance-5);	if (balance>50)	{		volLeft = ((100-balance)*2*volume)/100;		volRight = volume;		}	else if (balance < 50)	{		volLeft = volume;		volRight = (balance*2*volume)/100;		}	else if (balance == 50)	{		volLeft = volume;		volRight = volume;		}	DEBUGMSG (1, ("balance : %d volume is :%d and [volLeft : %d volRight : %d ]\n", balance, volume, volLeft, volRight));	// to pump up the volume	volLeft = (volLeft*79/100)+48;	volRight = (volRight*79/100)+48;		EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_VOL_LEFT,(RMuint8 *)&volLeft, 1);	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_VOL_RIGHT,(RMuint8 *)&volRight, 1);	return balance;}int dac_mute (int mute_enable){	int data;	mute = mute_enable;	if (mute)		data = MUTE_ENABLE;	else		data = MUTE_DISABLE;	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)ADRR_REG_MUTE, (RMuint8 *)&data, 1);	DEBUGMSG (1, ("mute= : %d \n", mute));	return mute;}int dac_write (int addr, int data){	RMuint8 b = (RMuint8)data;	EM85xxI2C__Write ((RMuint8)ADRR_DEVICE, (RMuint8)addr, &b, 1);	return data;}int dac_read (int addr){	RMuint8 b = 0xff;	EM85xxI2C__Read ((RMuint8)ADRR_DEVICE, (RMuint8)addr, &b, 1); 	return b;}void dac_powerdown_input(const bool down) {	const int def = ENABLE_POWER;	if(down)		//111 (left to right: adc, mic input + bias, line input)		dac_write(ADRR_REG_POWER, def | 0x7);	else		dac_write(ADRR_REG_POWER, def & 0xFFF8);}void dac_powerdown_output(const bool down) {	const int def = ENABLE_POWER;	if(down)		//11000 (left to right: dac, line output)		dac_write(ADRR_REG_POWER, def | 0x18);	else		dac_write(ADRR_REG_POWER, def & 0xFFE7);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品资源二区在线| 亚洲小说欧美激情另类| 艳妇臀荡乳欲伦亚洲一区| 亚洲成av人片在线观看| 丁香六月久久综合狠狠色| 在线不卡中文字幕播放| 中文字幕一区二区三区在线播放| 天天av天天翘天天综合网 | 色菇凉天天综合网| 精品av久久707| 日韩成人dvd| 欧美日韩国产美| 日韩美女啊v在线免费观看| 国产一区二区三区在线观看精品| 欧美日韩在线电影| 亚洲精品欧美激情| 91浏览器在线视频| 中文字幕综合网| eeuss国产一区二区三区| 2021国产精品久久精品| 久久电影国产免费久久电影 | 99在线精品视频| 久久久久久久免费视频了| 免费在线看成人av| 91麻豆精品国产91久久久久久| 亚洲第一久久影院| 欧美日韩一区二区三区视频| 亚洲影视在线观看| 在线视频欧美区| 一区二区三区在线高清| 成人中文字幕合集| 国产精品国产a级| 99久久国产免费看| 亚洲伦理在线免费看| 色婷婷精品久久二区二区蜜臀av | 国产成人自拍高清视频在线免费播放| 制服视频三区第一页精品| 三级一区在线视频先锋| 日韩丝袜美女视频| 精品在线播放免费| 中国色在线观看另类| 色综合天天综合网天天狠天天| 亚洲色欲色欲www在线观看| jiyouzz国产精品久久| 亚洲免费视频中文字幕| 日本乱码高清不卡字幕| 无码av中文一区二区三区桃花岛| 在线播放中文一区| 狂野欧美性猛交blacked| 欧美r级电影在线观看| 国产揄拍国内精品对白| 国产精品超碰97尤物18| 欧洲生活片亚洲生活在线观看| 日韩精品福利网| 国产午夜亚洲精品羞羞网站| 97se亚洲国产综合在线| 亚洲一区二区三区免费视频| 欧美一级电影网站| 成人精品视频网站| 亚洲成人av中文| 久久久久久一级片| 欧美性视频一区二区三区| 奇米影视一区二区三区| 国产精品免费免费| 欧美电影一区二区| 成人高清免费在线播放| 三级久久三级久久久| 国产午夜亚洲精品不卡| 欧美色图12p| 国产成人精品免费在线| 亚洲妇熟xx妇色黄| 国产亚洲精品aa午夜观看| 欧洲精品在线观看| 国产99久久久国产精品潘金| 亚洲一区二区美女| 中文字幕国产精品一区二区| 欧美日韩免费电影| 高清在线观看日韩| 日韩不卡免费视频| 国产精品久久久久aaaa樱花 | 日本黄色一区二区| 国产激情视频一区二区在线观看| 亚洲国产日韩精品| 亚洲国产精品av| 精品国产制服丝袜高跟| 91福利精品视频| 成人中文字幕电影| 国内久久精品视频| 日韩有码一区二区三区| 亚洲精品久久嫩草网站秘色| 久久精品在这里| 日韩精品最新网址| 5月丁香婷婷综合| 91久久精品国产91性色tv| 成人精品视频网站| 国产精品一区2区| 精品伊人久久久久7777人| 亚洲成人免费看| 亚洲高清在线视频| 一区二区三区中文字幕| 国产精品热久久久久夜色精品三区| 精品国产乱码久久久久久图片 | 亚洲国产成人午夜在线一区| 日韩欧美综合一区| 欧美久久久久久久久久| 日本高清视频一区二区| 94-欧美-setu| 91浏览器打开| 在线观看视频一区| 色哟哟一区二区三区| 一本色道a无线码一区v| 91美女蜜桃在线| 91久久精品一区二区| 色哟哟欧美精品| 欧美午夜视频网站| 欧美色视频在线观看| 欧美蜜桃一区二区三区| 欧美精品在线观看一区二区| 宅男噜噜噜66一区二区66| 欧美精品在线一区二区三区| 制服丝袜中文字幕亚洲| 日韩欧美国产综合| 欧美精品一区在线观看| 国产亚洲精品aa| 亚洲欧洲一区二区在线播放| 亚洲丝袜制服诱惑| 亚洲成在线观看| 日本vs亚洲vs韩国一区三区二区| 免费成人在线观看| 国产精品 欧美精品| 成人av资源在线观看| 在线观看视频欧美| 欧美大肚乱孕交hd孕妇| 国产视频一区在线观看| ●精品国产综合乱码久久久久| 亚洲精选视频在线| 午夜成人在线视频| 国产乱码字幕精品高清av| 99免费精品在线观看| 欧美日本在线观看| 久久精品亚洲精品国产欧美kt∨ | 久久老女人爱爱| 亚洲色欲色欲www在线观看| 午夜视频一区二区| 国产精品资源在线看| 91污在线观看| 欧美一区二区免费| 国产精品午夜在线观看| 午夜精品福利在线| 国产91精品精华液一区二区三区 | 日韩国产一二三区| 国产成人在线看| 欧美片网站yy| 国产精品欧美久久久久一区二区| 伊人开心综合网| 国产精品亚洲午夜一区二区三区 | 久久久精品人体av艺术| 亚洲综合一区二区三区| 国产精品正在播放| 欧美日本一区二区| 最新国产精品久久精品| 蜜桃久久久久久| 日本电影欧美片| 欧美国产国产综合| 青青青爽久久午夜综合久久午夜| hitomi一区二区三区精品| 欧美成人在线直播| 亚洲午夜视频在线| 成人精品在线视频观看| 日韩欧美资源站| 亚洲h动漫在线| 色婷婷久久久亚洲一区二区三区| 精品久久久久久久久久久久久久久| 亚洲色图制服诱惑| 国产精品一区二区三区四区| 91精品国产色综合久久不卡蜜臀 | 精品视频999| 亚洲精品欧美专区| av动漫一区二区| 亚洲国产精华液网站w| 狠狠狠色丁香婷婷综合激情| 91精品国产色综合久久久蜜香臀| 亚洲另类中文字| 91蜜桃视频在线| 国产精品欧美久久久久一区二区| 国产乱人伦偷精品视频免下载| 91精品欧美福利在线观看| 一二三区精品福利视频| 99视频热这里只有精品免费| 国产日韩欧美高清在线| 强制捆绑调教一区二区| 在线播放91灌醉迷j高跟美女 | 激情欧美一区二区| 欧美日韩在线综合| 一区二区三区在线免费播放| 在线免费观看日韩欧美| 亚洲色图.com| 在线观看国产日韩| 亚洲一区二区av在线| 欧美精品色综合|