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

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

?? tea5767.c

?? 君正早期ucos系統(tǒng)(只有早期的才不沒有打包成庫(kù)),MPLAYER,文件系統(tǒng),圖片解碼,瀏覽,電子書,錄音,想學(xué)ucos,識(shí)貨的人就下吧 russblock fmradio explore set
?? C
字號(hào):
//
// Copyright (c) Ingenic Semiconductor Co., Ltd. 2007.
//

#include "tea5767.h"
#include "jz4740.h"

//------------------------------------------------------------------------------
//// Private globals
#define UP		1
#define DOWN 	0
#define TUNE_FOUND 1
#define BAND_LIMIT 0
#define  TRUE  1
#define  FALSE  0
#define DEVCLK	11200000
#define I2C_READ 1
#define I2C_WRITE 0
#define TIMEOUT         1000

/* error code */
#define ETIMEDOUT	1
#define ENODEV		2
unsigned char ucWritData[5] = {0x00, 0x00, 0x20, 0x17, 0x00};
unsigned char ucReadData[5] = {0x00, 0x00, 0x00, 0x00, 0x00};
unsigned int  frequency =87500;//kHZ
unsigned int  pll;


//------------------------------------------------------------------------------

/*
 * I2C bus protocol basic routines
 */
static int i2c_put_data(unsigned char data)
{
	unsigned int timeout = TIMEOUT*10;
	__i2c_write(data);
	__i2c_set_drf();
	while (__i2c_check_drf() != 0);
	while (!__i2c_transmit_ended());
	while (!__i2c_received_ack() && timeout)
		timeout--;
	if (timeout)
		return 0;
	else
		return -ETIMEDOUT;
}

static int i2c_get_data(unsigned char *data, int ack)
{
	int timeout = TIMEOUT*10;

	if (!ack)
		__i2c_send_nack();
	else
		__i2c_send_ack();

	while (__i2c_check_drf() == 0 && timeout)
		timeout--;

	if (timeout) {
		if (!ack)
			__i2c_send_stop();
		*data = __i2c_read();
		__i2c_clear_drf();
		return 0;
	} else
		return -ETIMEDOUT;
}

int i2cucs_read(unsigned char device, unsigned char *buf,
	      int count)
{
	unsigned char *ptr = buf;
	int cnt = count;
	int timeout = 5;

	__i2c_set_clk(DEVCLK, 10000); /* default 10 KHz */
	__i2c_enable();

L_try_again:

	if (timeout < 0)
		goto L_timeout;
	__i2c_send_start();
	if (i2c_put_data( (device << 1) | I2C_READ ) < 0)
		goto device_rerr;
	__i2c_send_ack();	/* Master sends ACK for continue reading */
	while (cnt) {
		if (cnt == 1) {
			if (i2c_get_data(buf, 0) < 0)
				break;
		} else {
			if (i2c_get_data(buf, 1) < 0)
				break;
		}
		cnt--;
		buf++;
	}

	__i2c_send_stop();

	udelay(300); /* wait for STOP goes over. */
	__i2c_disable();

	return count - cnt;

 device_rerr:
 device_werr:
	printf("ERROR: No I2C device 0x%2x.\n", device);
 offset_err:
	timeout --;
	__i2c_send_stop();
	goto L_try_again;

L_timeout:
	printf("Read I2C device 0x%2x failed.\n", device);
	__i2c_send_stop();
	udelay(300); /* wait for STOP goes over. */
	__i2c_disable();
	return -ENODEV;
}
int i2cucs_write(unsigned char device, unsigned char *buf,
	       int count)
{
	int cnt = count;
	int cnt_in_pg;
	int timeout = 5;
	unsigned char *tmpbuf;
	__i2c_set_clk(DEVCLK, 10000); /* default 10 KHz */
	__i2c_enable();

	__i2c_send_nack();	/* Master does not send ACK, slave sends it */
 W_try_again:
	if (timeout < 0)
		goto W_timeout;

	cnt = count;
	tmpbuf = (unsigned char *)buf;

 start_write_page:
	cnt_in_pg = 0;
 	__i2c_send_start();
	if (i2c_put_data( (device << 1) | I2C_WRITE ) < 0)
		goto device_err;
	while (cnt) { 
		if (++cnt_in_pg > 8) {
			__i2c_send_stop();
			mdelay(1);
			goto start_write_page;
		}
		if (i2c_put_data(*tmpbuf) < 0)
			break;
		cnt--;
		tmpbuf++;
	}
	__i2c_send_stop();
	udelay(300); /* wait for STOP goes over. */
	__i2c_disable();
	return count - cnt;
 device_err:
	printf("ERROR: No I2C device 0x%2x.\n", device);
	timeout--;
	__i2c_send_stop();
	goto W_try_again;

 W_timeout:
	printf("Write I2C device 0x%2x failed.\n", device);
	__i2c_send_stop();
	udelay(300); /* wait for STOP goes over. */
	__i2c_disable();
	return -ENODEV;
}

char I2CSim_CommonRead(unsigned char ucSlaveID, unsigned char *pucBuffer, unsigned char ucBytes)
{
	return (char)(i2cucs_read(ucSlaveID, pucBuffer,ucBytes));
}
char I2CSim_CommonWrite(unsigned char ucSlaveID, unsigned char *pucBuffer, unsigned char ucBytes)
{
	return (char)(i2cucs_write(ucSlaveID, pucBuffer,ucBytes));
}
//------------------------------------------------------------------------------
void Sleep(unsigned int time)
{
	//unsigned int i;
	//for( i = 0; i < time; i++)
	//{}
    OSTimeDly(1);
}

int AICInit(void )
{
	REG_AIC_FR |= 0x00000030;
	REG_AIC_FR &= 0xFFFFFFF9;
	REG_AIC_I2SCR &= 0xFFFFFFFE;
	REG_ICDC_CDCCR1 = 0x28002000;
	REG_ICDC_CDCCR2 &=0xffe0fffc;
	REG_ICDC_CDCCR2 |=0x00130000;
	return (TRUE);
}
void AICDeinit(void )
{
	REG_ICDC_CDCCR1 = 0x0033300;
}
int  FMM_Deinit(void)
{
	AICDeinit();
	ucWritData[3]|=0x40;
	FMM_Write();
	return (TRUE);
}
//------------------------------------------------------------------------------

int FMM_Init( void )
{
	int	bRet = FALSE;
	unsigned char	i;

	if ( !AICInit())
		return (FALSE);
	i = 0;
	ucWritData[3] &=0xBF;
	Get_Pll();
	printf("Write1:%x,Write2:%x,Write3:%x,Write4:%x,Write5:%x\n",ucWritData[0],ucWritData[1],ucWritData[2],ucWritData[3],ucWritData[4]);
	FMM_Write(); 
	Sleep(500);
	FMM_Read();
	printf("Read1:%x,Read2:%x,Read3:%x,Read4:%x,Read5:%x\n",ucReadData[0],ucReadData[1],ucReadData[2],ucReadData[3],ucReadData[4]);
	while (i)
	{
		Mul_Search ();
		i--;
		switch(i)
		{
		case 4:
			frequency = 103900;
			break;
		case 3:
			frequency = 97400;
			break;
		case 2:
			frequency = 91500;
			break;
		case 1:
			frequency = 87600;
			break;
		}
	}
	//Auto_Search_Save ( UP);

	return ( bRet );
}
//-----------------------------------------------------------------------------
int HLSI_optimal(unsigned int freq)
{
	unsigned char status;
	int temp;
	unsigned char levelhigh, levellow;	
	freq = freq+450;
	Get_Pll(); // Set PLL value High
	status = FMM_Write();  // Send Command
	Sleep(100);
	     
	status = FMM_Read();  // Read status
	
	levelhigh = ((ucReadData[3] >> 4) & 0x0f); // Get ADC value
	freq = freq-450;  
	Get_Pll(); // Set PLL value Low
	status = FMM_Write();
	Sleep(100);  
	     
	status = FMM_Read();
	
	levellow = ((ucReadData[3] >> 4) & 0x0f); // Get ADC value
	  
	if(levelhigh < levellow) 
		temp = 1;
	else 
		temp = 0;
	
	return temp;
}
//------------------------------------------------------------------------------
//Calculate PLL from frequency
void Get_Pll(void)
{
    unsigned char hlsi,temp;
    unsigned int twpll=0;
    hlsi=ucWritData[2]&0x10;
    if(frequency > 108000)
    	frequency = 108000;
    else if (frequency < 87500)
    	frequency = 87500;
    if (hlsi)
        pll=(unsigned int)((float)((frequency + 225 ) * 4000) / (float)32768);    //k
    else
        pll=(unsigned int)((float)((frequency - 225) * 4000) / (float)32768);    //k
	temp = (ucWritData[0] & 0xC0);
	ucWritData[0] = (unsigned char)(pll/256);//Search mode
	ucWritData[0] |= temp;
    ucWritData[1] = (unsigned char)(pll%256);     
}
//------------------------------------------------------------------------------
void Set_Volume(int vol_level)
{
	if(vol_level==0)
		REG_ICDC_CDCCR1 |= 0x00004000;
	else
	{
	  REG_ICDC_CDCCR1 &=0xFFFFBFFF;
		REG_ICDC_CDCCR2 &=0xffe0fffc;
		REG_ICDC_CDCCR2 |=(vol_level<<16);	
	}	
}
int Get_Volume(void)
{
	int vol;
	if (REG_ICDC_CDCCR1 & 0x00004000)
	{
		vol = 0;
		return vol;
	}
	else
	{
		vol = (REG_ICDC_CDCCR2 & 0x001f0000);
		return (vol>>16);	
	}
}
int Get_Max_Vol(void)
{
	return (31);	
}
int Get_Min_Vol(void)
{
	return (0);
}
//Calculate frequency from PLL
void Set_Frequency(int freq)
{
	frequency = freq;
	Get_Pll();
	FMM_Write();
    Get_Status();
	printf("Read1:%x,Read2:%x,Read3:%x,Read4:%x,Read5:%x\n",ucReadData[0],ucReadData[1],ucReadData[2],ucReadData[3],ucReadData[4]);
}
int Get_Frequency(void)
{
    unsigned char hlsi;
    unsigned int npll=0;
    npll=pll;
    hlsi=ucWritData[2]&0x10;
    if (hlsi)
        frequency=(unsigned int)(((float)(npll * 32768) / 4 - 225000)/1000);    //KHz
    else
        frequency=(unsigned int)(((float)(npll * 32768) / 4 + 225000)/1000);    //KHz
	return frequency;
}
char   Is_Bandlimit( void )
{
	if ( ucReadData[0] & 0x40 )
		return ( TRUE );
	else
		return ( FALSE );		
}
char   Is_Ready( void )
{
	if ( ucReadData[0] & 0x80 )
		return ( TRUE );
	else
		return ( FALSE );		
}
//------------------------------------------------------------------------------

unsigned int FMM_Open (unsigned int dwData, unsigned int dwAccess, unsigned int dwShareMode) {return (4);}

//------------------------------------------------------------------------------

int FMM_Read ( void )
{
	int bRet;
	unsigned char temp_l,temp_h; 
	bRet = I2CSim_CommonRead(TEA5767_READ_ADDR, ucReadData, 5);
	
	temp_l = ucReadData[1];
    temp_h = ucReadData[0];
    temp_h &= 0x3f;
    pll = ((temp_h << 8 )| temp_l);
    Get_Frequency();
    
	return (bRet);
}

//------------------------------------------------------------------------------

int FMM_Write(void) 
{
	int bRet = FALSE;
	bRet = I2CSim_CommonWrite(TEA5767_WRITE_ADDR, ucWritData, 5);
	return (bRet);
}

//------------------------------------------------------------------------------
void Mul_Search (void )
{
	unsigned char i;
    Get_Pll(); 
    FMM_Write();
	FMM_Read();
} 

int Auto_Search ( int direc)
{
	unsigned char i;
	FMM_Read();
    Get_Pll();
    if(direc)
    {
        ucWritData[2]=0xC0;
    	ucWritData[2]&=0xEF;
		frequency += 100;
    }
    else
    {
        ucWritData[2]=0x40;    
   		ucWritData[2]|=0x10;
		frequency -= 100;
    }
	Get_Pll();
	ucWritData[0]|= 0x40;//Search mode
    FMM_Write();
	Sleep(2000);
	FMM_Read();
	
    while(!Is_Ready())     //Flag of search successful
    {
      FMM_Read();
    }
    if ( Is_Bandlimit() )
    	return (BAND_LIMIT);
	else
		return (TUNE_FOUND);
}

void Auto_Search_Save( int dir )
{
	unsigned char   bRet = TRUE;
	unsigned int   channel[100][2]; //index and frequency
	unsigned char  i = 0;
	if (dir)
	{
	  do
	  {
	     Sleep(10000);
	     i++;
	     bRet = Auto_Search( UP );
	     if (bRet && frequency)
	     {
			channel[i][0] =i;
			channel[i][1] =frequency; 	
			printf("channel:%d,frequency:%d\r\n",i,channel[i][1] );
	     }	
	     Sleep(100000);
	     if ( i>100 )
		 break;
	   }while (bRet);
	}
	else
	{
		i = 0;
		do
		{
		  	i++;
			bRet = Auto_Search( DOWN );
	    	 if (bRet && frequency)
	     	{
				channel[i][0] =i;
				channel[i][1] =frequency; 	
				printf("channel:%d,frequency:%d\r\n",i,channel[i][1] );
	     	}		
		 
			if (i==0)
			break;
		}while (bRet);	
	}
} 
int	Set_Status( int mute, int stereo, int level, int band)
{
  /*	if (!mute)
		ucWritData[0]|=0x80;//mute
	else 
		ucWritData[0]&=0x7F;//play
  */	
	if (stereo)
		ucWritData[2]|=0x8;
	else
		ucWritData[2]&=0xF7;
		
	/*	level = (level << 5);
	ucWritData[2]&=0x9F;
	ucWritData[2]|=level;
	
	if (band)//0--us/e
		ucWritData[3]|=0x20;
	else
		ucWritData[3]&=0xDF;
	*/
	if(FMM_Write())
		return TRUE;
	
	return FALSE;
		
}
	  
int Get_Status( void )
{
	//bit[0]--Ready flag,bit[1]--band limit reach,bit[2]--stereo,
	//bit[3]--Reserved,bit[4]~bit[5]--level ADC Output(low,mid,high).
	int status=0;
	int temp_IF=0,temp_LEV=0;
	FMM_Read();
	/*	if (ucReadData[0]& 1 )
		status |=1;//Ready flag
	if (ucReadData[0]& 0x2)
		status |=(1<<1);//band limit flag
	*/
	if (ucReadData[2]&0x80)
		status |=(1<<2);//stereo flag
	temp_LEV=(ucReadData[3]& 0xF0)>>4;
	temp_IF=(ucReadData[2]& 0x7F);
    printf("LEV=%d,IF =%d\n",temp_LEV,temp_IF);
	if ((temp_LEV == 8)&& (temp_IF==0x38 ))
	    status |= 0x30;//level high,true channel

	return status;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日产亚洲精品系列| 蜜桃一区二区三区在线观看| 国产色91在线| 亚洲精品一区二区三区四区高清| 欧美一区二区视频免费观看| 欧美一区二区三区精品| 欧美一卡二卡在线| 精品国产乱码久久久久久久| 日韩三级免费观看| 精品国产91洋老外米糕| 久久久久久一级片| 欧美国产精品久久| 国产精品人成在线观看免费| 亚洲视频一二三| 亚洲久草在线视频| 亚洲第一在线综合网站| 日韩精品电影在线| 韩国中文字幕2020精品| 丁香亚洲综合激情啪啪综合| 99re成人精品视频| 欧美亚洲高清一区二区三区不卡| 6080亚洲精品一区二区| 精品欧美久久久| 国产日产欧美精品一区二区三区| 亚洲色图制服诱惑 | 亚洲午夜一区二区| 一区二区三区在线免费播放 | 夫妻av一区二区| 色婷婷久久99综合精品jk白丝| 欧美探花视频资源| 日韩免费电影一区| 国产精品美女久久久久久久久久久| 亚洲精品免费看| 奇米777欧美一区二区| 国产一区二区三区免费| 99国产精品久久久久久久久久| 欧美日韩在线亚洲一区蜜芽| 精品成人a区在线观看| 自拍偷在线精品自拍偷无码专区| 香蕉加勒比综合久久| 国产一区二区精品久久| 色综合一区二区| 日韩视频123| 亚洲欧美一区二区三区国产精品| 日韩综合小视频| 高潮精品一区videoshd| 欧美男女性生活在线直播观看| 久久蜜桃一区二区| 亚洲一区二区美女| 国产精品99久久久久久久女警 | 国产成人精品午夜视频免费| 色网站国产精品| 日韩精品一区二区三区中文不卡 | 亚洲欧美乱综合| 麻豆91精品91久久久的内涵| a亚洲天堂av| 日韩限制级电影在线观看| 亚洲欧洲成人精品av97| 免费不卡在线视频| 色激情天天射综合网| 久久久综合精品| 无码av免费一区二区三区试看| 成av人片一区二区| 日韩久久精品一区| 亚洲1区2区3区视频| 成人h动漫精品| 欧美不卡视频一区| 午夜精品久久一牛影视| 91一区在线观看| 久久精品一区蜜桃臀影院| 日韩电影一区二区三区四区| 91麻豆视频网站| 国产日韩欧美在线一区| 蜜臀av一区二区在线免费观看| 色综合色狠狠天天综合色| 久久久久九九视频| 成人av电影在线| 2024国产精品| 日韩成人一级片| 欧美图片一区二区三区| 日韩美女视频一区| 粉嫩高潮美女一区二区三区| 亚洲精品在线免费播放| 久久精品国产亚洲高清剧情介绍| 欧美日韩高清一区二区三区| 亚洲一区二区三区不卡国产欧美| av一本久道久久综合久久鬼色| 欧美激情在线一区二区三区| 精品在线观看视频| 日韩三级高清在线| 美女久久久精品| 日韩一级视频免费观看在线| 日本不卡一区二区三区高清视频| 欧美日韩亚洲国产综合| 亚洲综合免费观看高清在线观看| 91色porny在线视频| **性色生活片久久毛片| 不卡的av中国片| 国产精品视频九色porn| 国产999精品久久| 欧美激情综合五月色丁香小说| 国产一区二区三区在线观看精品| 日韩欧美成人激情| 久久99精品网久久| 精品理论电影在线观看 | 99免费精品视频| 国产精品毛片久久久久久| 成人av第一页| 亚洲人成小说网站色在线 | 欧美午夜片在线看| 午夜av电影一区| 欧美一区二区三区视频在线| 久久福利资源站| 国产亚洲欧美日韩日本| 成人免费视频视频| 亚洲特黄一级片| 欧美色爱综合网| 奇米影视一区二区三区小说| 精品国产自在久精品国产| 国产一区三区三区| 中文字幕第一页久久| 一本在线高清不卡dvd| 亚洲免费视频中文字幕| 欧美色精品天天在线观看视频| 丝袜亚洲精品中文字幕一区| 日韩美一区二区三区| 国产98色在线|日韩| 一区二区三区四区高清精品免费观看| 欧美性三三影院| 蜜桃av一区二区| 中文字幕巨乱亚洲| 日本大香伊一区二区三区| 视频精品一区二区| 久久久久国产精品厨房| 91美女在线视频| 日本欧美一区二区在线观看| 久久夜色精品国产欧美乱极品| kk眼镜猥琐国模调教系列一区二区| 亚洲女人的天堂| 91精品国产手机| 国产成人免费视频网站高清观看视频| 综合久久久久久| 日韩限制级电影在线观看| 成人av网站在线观看| 无吗不卡中文字幕| 中文天堂在线一区| 欧美日韩精品欧美日韩精品一| 国产麻豆精品在线观看| 亚洲一区在线看| 久久欧美一区二区| 日本道色综合久久| 国产精品996| 午夜精品久久久久久不卡8050| 久久一日本道色综合| 91极品视觉盛宴| 国产综合久久久久久鬼色 | 精品一区二区av| 中文字幕va一区二区三区| 欧美日韩久久久| 丁香婷婷综合五月| 蜜臂av日日欢夜夜爽一区| 中文字幕欧美一| 精品国产麻豆免费人成网站| 欧洲视频一区二区| 丁香天五香天堂综合| 久久精品久久精品| 一区二区三区在线影院| 国产婷婷一区二区| 91精品国产色综合久久不卡电影| av中文字幕在线不卡| 极品少妇一区二区| 日韩国产一二三区| 亚洲精品国产一区二区精华液 | 日本大胆欧美人术艺术动态| 亚洲蜜臀av乱码久久精品 | 美腿丝袜在线亚洲一区| 亚洲精品欧美综合四区| 日本一区二区三区久久久久久久久不| 制服丝袜激情欧洲亚洲| 欧美在线色视频| 成人国产精品免费网站| 国产麻豆精品久久一二三| 热久久久久久久| 五月天激情小说综合| 一区二区三区高清| 国产精品欧美久久久久无广告 | 亚洲综合色噜噜狠狠| 国产精品久久久久久久蜜臀| 久久奇米777| 日韩精品一区二区三区视频| 3d动漫精品啪啪一区二区竹菊| 欧美日韩在线播放三区四区| 色播五月激情综合网| 成人动漫av在线| 丁香天五香天堂综合| 大尺度一区二区| 国产精品一二三在| 国产麻豆精品theporn| 国产乱码精品一区二区三区忘忧草 | 久久蜜桃av一区精品变态类天堂|