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

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

?? cs1100_drv.c

?? MTK cresilicon FM IC
?? C
字號:

                                                

#include "l1audio_def.h"

#if (defined(CS1100)) 

#define READ	1
#define WRITE	0

#define CS1100_WR_CTRL 0x20
#define CS1100_RD_CTRL 0x21

uint8 CS1100ControlData[26];
  
/* Serial communication interfaces */
void SerialCommInit(void);
void SerialCommRelease(void);
void SerialCommCryClkOn(void);
void SerialCommCryClkOff(void);
void SerialCommRxByte(uint8 *data, uint8 ack);
uint8 SerialCommTxByte(uint8 data);
void SerialCommStop(void);
void SerialCommStart(void);


void   CS1100_Delay_ms(kal_uint32 times)
{
	kal_uint32 delay1;
	kal_uint16   delay2;
       for(delay1=0;delay1<times;delay1++)
	   	 for(delay2=0;delay2<4700;delay2++){ }  // about 1ms
}



unsigned int  CS1100_I2C_ReadCS1100Reg(uint8 *data,uint8 size)	//state=0->success   
{									//state=1->fail
  	unsigned int i,state = 0;
	SerialCommInit();
  	SerialCommStart();
  	if(SerialCommTxByte(CS1100_RD_CTRL))
  	{
 	  state = 1;
	  goto I2C_STOP;
  	}

  	for(i=0;i<size-1;i++)
	{
	   SerialCommRxByte(&data[i],0 );
	}

	SerialCommRxByte(&data[i],1);
I2C_STOP:
	SerialCommStop();
    SerialCommRelease();	 
	return state;
}

unsigned int CS1100_I2C_WriteCS1100Reg(uint8 *data,uint8 size) //state=0->success  
{								      //state=1->fail
	unsigned int i,state = 0;;
	SerialCommInit();
  	SerialCommStart();
	if(SerialCommTxByte(CS1100_WR_CTRL)) 
	{ 
	    state = 1;
	    goto I2C_STOP;
	}

    for(i=0;i<size;i++)
	{
	   if(SerialCommTxByte(data[i]))
	   	{
	   	 state = 1;
		 break;
	   	}
	}

I2C_STOP:
    SerialCommStop();
    SerialCommRelease();
    return state;
}


bool CS1100_FMInit(void)
{
	unsigned char error_ind = 0;
	
	// initial default value of CS1100 READ/WRITE registers 03h~0Eh
  	CS1100ControlData[0] = 0xe4;  
  	CS1100ControlData[1] = 0xd8;   
  	CS1100ControlData[2] = 0x7e; // internal  PA OFF, 0x3e->internal  PA ON
  	CS1100ControlData[3] = 0x26;
	CS1100ControlData[4] = 0x1f; 			
	CS1100ControlData[5] = 0x80; 
	CS1100ControlData[6] = 0x28; //CS1100ControlData[6] = 0x38; // for 32.768k crystal
	CS1100ControlData[7] = 0x53;
	CS1100ControlData[8] = 0xb3;
	CS1100ControlData[9] = 0xb3;
	CS1100ControlData[10] = 0xaa;
	CS1100ControlData[11] = 0xf0;  
	CS1100ControlData[12] = 0x8b;
	CS1100ControlData[13] = 0xaa;   
	CS1100ControlData[14] = 0xc0;
	CS1100ControlData[15] = 0x00; //CS1100ControlData[15] = 0x04;//for 32.768k crystal
	CS1100ControlData[16] = 0x25;
	CS1100ControlData[17] = 0x35;
	CS1100ControlData[18] = 0xff;
	CS1100ControlData[19] = 0xfd;
	CS1100ControlData[20] = 0x92; 
	CS1100ControlData[21] = 0x0f;
	CS1100ControlData[22] = 0x44;
	CS1100ControlData[23] = 0x00;
	CS1100ControlData[24] = 0x84;
	CS1100ControlData[25] = 0x50;

	#if 0
	CS1100ControlData[2] &= 0xfc;
	CS1100ControlData[2] |= (924 & 0x0300)>>8;
	CS1100ControlData[3] =	924 & 0xff;
    CS1100ControlData[0] |= 0x02; // TUNE=1                   
	CS1100ControlData[0] &= 0xdf;  // mute off
	#endif
	
	error_ind = CS1100_I2C_WriteCS1100Reg(CS1100ControlData,26);	

	if (error_ind )
		return 0;
	else
		return 1;
}

void CS1100_FMTune(unsigned int TunerFrequency)
{
	unsigned int ch = 0;
	#if 0
	kal_uint8 Temp[10];
	unsigned int rssi, snr, fd;
	#endif

    // frequency transfer to channel number,  channel=(frequencyMHz-60)/0.05, e.g. 87.5Mhz->550
	ch = (TunerFrequency - 6000)/5; 
	
	// set channel number 
	CS1100ControlData[2] &= 0xfc;
	CS1100ControlData[2] |= (ch & 0x0300)>>8;
	CS1100ControlData[3] =	ch & 0xff;
	//
    
	// tune function
	CS1100ControlData[0] &= 0xfe;  // seek=0 
	CS1100ControlData[0] &= 0xdf;  // mute off
	CS1100ControlData[0] &= 0xfd;  // tune=0
	CS1100_I2C_WriteCS1100Reg(CS1100ControlData,4);

    
	CS1100ControlData[0] |= 0x02;  // tune=1
	CS1100_I2C_WriteCS1100Reg(CS1100ControlData,1);
	CS1100_Delay_ms(100); // wait for 100ms

	#if 0
	CS1100_I2C_ReadCS1100Reg(Temp,10);
		rssi=Temp[1];
		snr=Temp[2]/4;	 	 
		fd=Temp[5]; 
         kal_prompt_trace(MOD_MM, "temp is %x,%x \n", Temp[0],Temp[1]);
		 kal_prompt_trace(MOD_MM, "tune ch,rssi,snr,fd=%d,%d,%d,%d \n",ch,rssi,snr,fd);
	#endif
	
}    


uint8  CS1100_FMSeek_Software(bool seekUp, int16 Frequency)
{
	static int  prefd=-50, preHLSI=0;

	// local variable
	unsigned int ch = 0;
	unsigned int snr,fd,rssi,fd_abs,loop;
	int  fd_comp;
	bool stcflag;
	bool hlsi;
	bool st;
	bool fdstate=0;
	kal_uint8 Temp[10];
	

	ch = (Frequency - 6000)/5; 
	// set channel number 
	CS1100ControlData[2] &= 0xfc;
	CS1100ControlData[2] |= (ch & 0x0300)>>8;
	CS1100ControlData[3] =	ch & 0xff;

	// tune function
	CS1100ControlData[0] &= 0xfe;  // seek=0 
	CS1100ControlData[0] &= 0xfd;  // tune=0
	CS1100_I2C_WriteCS1100Reg(CS1100ControlData,4);
    

	CS1100ControlData[0] |= 0x02;  // tune=1
	CS1100_I2C_WriteCS1100Reg(CS1100ControlData,1);
	CS1100_Delay_ms(50); // wait for 50ms

	
	// read STC indicator and judgement of seek threshold		
	stcflag=0;	
	loop=0;
	do
	{
		CS1100_I2C_ReadCS1100Reg(Temp,10);
        
		stcflag=Temp[0]&0x04; // STC bit
		
		loop++;
		CS1100_Delay_ms(1); // delay 1ms
	}while((!stcflag)&&(loop!=0x1f));


    #if 0
    //CS1100_I2C_ReadCS1100Reg(Temp,10);
    kal_prompt_trace(MOD_MM, "Temp=%x,%x,%x,%x,%x,%x,%x,%x,%x,%x\n",Temp[0],Temp[1],Temp[2],Temp[3],Temp[4],Temp[5],Temp[6],Temp[7],Temp[8],Temp[9]);
    #endif
    
	
	if(!stcflag)  //STC=0
	{
	    //kal_prompt_trace(MOD_MM, "STC error\n");
		return 0; // it's error
		
	}

	// read hlsi, rssi, snr, fd, st
	st = Temp[0]& 0x01;
	hlsi = Temp[0]&0x08;
	rssi=Temp[1];
	snr=Temp[2]/4;	 	 
	fd=Temp[5];     	 	 	 
	if(fd>127)
	{
		fd_comp=fd-256; 
		fd_abs=256-fd;
	}
	else
	{
		fd_abs=fd;
		fd_comp=fd;
	}


	if(seekUp)
	{
	if(preHLSI) 
	{
		if(-prefd<=-20) // prefd inverse
		{
			fdstate=1;
		}
		else
		{
			fdstate=0;
		}
		
	}
	else
	{
		if(prefd<=-20)
		{
			fdstate=1;
		}
		else
		{
			fdstate=0;
			
		}
		
	}
	}
	else
	{
	if(preHLSI) 
	{
		if(-prefd>=20) // prefd inverse
		{
			fdstate=1;
		}
		else
		{
			fdstate=0;
		}
	}
	else
	{
		if(prefd>=20)
		{
			fdstate=1;
		}
		else
		{
			fdstate=0;
		}
		
	}
	}		

	#if 0
	
    kal_prompt_trace(MOD_MM, "seek is %d,%d,%d,%d,%d,%d,%d \n", Frequency,ch,rssi,snr,fd_abs,fd_comp,prefd);
	#endif 
	
	// save to global variables
	prefd = fd_comp; 
	preHLSI = hlsi;

	
	//seek threshod judgement
	if(rssi>=170 && snr<=42 && fd_abs<=10 && fdstate)  
	{
		if((Frequency==10400||Frequency==9600||Frequency==9100)&&st==0)
		{
			return 0;
		}
			
			
		#if 0
        kal_prompt_trace(MOD_MM, "find radio is %d,%d,%d,%d \n", Frequency,rssi,snr,fd_abs);
		#endif
		
		return 1;
	}
	else
	{
		return 0;
	}
		
}




void  FMDrv_PowerOnReset(void)
{

   SerialCommCryClkOn(); //32k clock on
   SerialCommInit();     // I2C initial
   CS1100_Delay_ms(10);

   CS1100ControlData[0] &= 0x7f; //power up
   CS1100_I2C_WriteCS1100Reg(CS1100ControlData,26);	
   CS1100_Delay_ms(100); // delay 100ms, for 32k crystal, waiting for 1s to oscillate  
}
    
void  FMDrv_PowerOffProc(void)
{
	CS1100ControlData[0] |= 0x20;  // mute on
	CS1100_I2C_WriteCS1100Reg(CS1100ControlData,1);	
	
	CS1100ControlData[0] |= 0x80;  // power down
	CS1100_I2C_WriteCS1100Reg(CS1100ControlData,1);	

	SerialCommCryClkOff(); // 32k clock off
}

void FMDrv_ChipInit()
{

   SerialCommCryClkOn(); // 32k clock on

   SerialCommInit(); // I2C initial
 

   CS1100_FMInit();
   
   //FMDrv_PowerOffProc();

}
      
void  FMDrv_Mute(uint8 mute)
{
   if (mute == 0) 
   {
     CS1100ControlData[0] &= 0xdf;// mute off, audio output
    } 
   else 
   {
     CS1100ControlData[0] |= 0x20; // mute on
   }
   
   CS1100_I2C_WriteCS1100Reg(CS1100ControlData,1);
}
void  FMDrv_SetFreq( int16 curf )
{
	CS1100_FMTune(curf*10);
}

uint8 FMDrv_ValidStop(int16 freq, int8 signalvl, bool is_step_up)  //自動搜索時,作為判定條件,再從中選擇信號最強的9個臺
{
    uint8 ret =0;

   	CS1100ControlData[0] |= 0x20; // mute on
   	CS1100_I2C_WriteCS1100Reg(CS1100ControlData,1);

    ret =CS1100_FMSeek_Software(is_step_up,freq*10);

 	return ret;
}
uint8 FMDrv_GetSigLvl( int16 curf )  //當滿足rssi 的條件時,將信號記錄,再選最強的9個頻點
{
     
 	unsigned int rssi,level;
    kal_uint8 Temp[6];

	CS1100_I2C_ReadCS1100Reg(Temp,6);
	rssi=Temp[1];
	level = rssi/20;

	return level;
}

  
bool  FMDrv_IsChipValid(void)
{

   static bool Fm_chip_exist = false;
   static bool Fm_chip_checked = false;

   if(Fm_chip_checked)
   {
   	return	Fm_chip_exist;
   }
   Fm_chip_checked = true;
   
  
   SerialCommCryClkOn();
   SerialCommInit();
   CS1100_Delay_ms(10);;//add by yang guangfu
   Fm_chip_exist = CS1100_FMInit();

	//FMDrv_PowerOffProc();
  
   return Fm_chip_exist;
}

void  FMDrv_SetVolumeLevel(uint8 level)   /*一般不調用,即不用芯片來調節音量。*/
{
/*
	unsigned int temp;
	if(uint8 > 0x0f)
	{
		 uint8 = 0x0f;			
	}
			
	
	temp = uint8<<2;
	temp &= 0x3c; //0x3c=00111100
	CS1100ControlData[2] |= temp;
	CS1100_I2C_WriteCS1100Reg(CS1100ControlData,3);
*/
}



#endif











?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本伊人精品一区二区三区观看方式| 亚洲欧美日韩国产手机在线| 欧美成人欧美edvon| 久久精品男人的天堂| 亚洲女同女同女同女同女同69| 成人一区二区三区在线观看 | 蜜臀av性久久久久av蜜臀妖精| 成人av影视在线观看| 91精品国产91综合久久蜜臀| 中文字幕亚洲精品在线观看| 蜜臀久久久99精品久久久久久| 日韩精品一区二区三区在线播放| 亚洲女人的天堂| 欧美日韩在线免费视频| 国产精品福利一区| 国产成人午夜精品影院观看视频 | 日韩成人伦理电影在线观看| 日韩午夜在线播放| 一卡二卡三卡日韩欧美| 成人av网站大全| 亚洲国产一区二区三区| 97久久精品人人爽人人爽蜜臀| 欧美大片顶级少妇| 成人免费的视频| 调教+趴+乳夹+国产+精品| 色综合久久天天| 国产精品久久看| 欧美精品日韩精品| 亚洲电影视频在线| 欧美日韩视频不卡| 国产成人av一区二区三区在线 | 久久久国产一区二区三区四区小说| 免费精品视频在线| 日韩三区在线观看| av在线不卡电影| 伊人色综合久久天天人手人婷| 97久久人人超碰| 久久国产生活片100| 欧美一区二区精品| 99视频一区二区三区| 毛片不卡一区二区| 一区二区免费看| 亚洲国产成人一区二区三区| 成人免费va视频| 免费人成精品欧美精品| 国产精品久久久久aaaa| 日韩精品专区在线影院重磅| 暴力调教一区二区三区| 精品在线观看免费| 国产欧美日本一区视频| 色婷婷久久综合| 国产成人在线电影| 美洲天堂一区二卡三卡四卡视频 | eeuss鲁一区二区三区| 麻豆免费精品视频| 一区二区三区在线观看视频| 国产欧美一区二区三区鸳鸯浴| 欧美一二三在线| 欧美日韩大陆一区二区| 狠狠色丁香久久婷婷综合_中| 国产欧美日韩精品a在线观看| 555夜色666亚洲国产免| 国产精品99精品久久免费| 中文字幕字幕中文在线中不卡视频| 在线观看视频一区二区欧美日韩| 日本不卡高清视频| 亚洲高清在线精品| 亚洲综合在线第一页| 日韩午夜中文字幕| 欧美日产国产精品| 欧美视频三区在线播放| 国产一区二区三区久久久| 亚洲欧美一区二区三区孕妇| 欧美国产国产综合| 欧美韩日一区二区三区四区| 国产亚洲1区2区3区| 精品国产乱码久久久久久图片| 99riav久久精品riav| 99久久婷婷国产综合精品| 91精品欧美久久久久久动漫| 色婷婷久久久亚洲一区二区三区| 色综合中文字幕国产 | 丝袜亚洲另类欧美| 久久理论电影网| 久久奇米777| 国产欧美视频在线观看| 国产精品全国免费观看高清| 欧美日韩一区视频| 911精品产国品一二三产区| 欧美一区二区三区人| 欧美大胆人体bbbb| 久久亚洲精精品中文字幕早川悠里 | 26uuu成人网一区二区三区| 亚洲精品一线二线三线无人区| 精品免费国产一区二区三区四区| 欧美精品一区二区三区在线| 久久久久久久久97黄色工厂| 国产精品人妖ts系列视频| 亚洲视频资源在线| 亚洲国产三级在线| 久久97超碰色| 不卡av免费在线观看| 在线观看视频一区二区| 777a∨成人精品桃花网| 久久综合99re88久久爱| 国产精品乱人伦中文| 一区二区三区美女| 免费成人av在线| 成人高清伦理免费影院在线观看| 一本色道久久综合亚洲91| 91精品国产一区二区三区蜜臀 | 欧美日韩精品免费观看视频 | 久久精品人人爽人人爽| 一区二区在线观看视频| 免费不卡在线观看| 9久草视频在线视频精品| 欧美日韩中字一区| 久久久久99精品国产片| 一区二区欧美视频| 国产寡妇亲子伦一区二区| 在线一区二区三区四区五区| 99久久精品免费看国产免费软件| 欧美日韩视频不卡| 国产欧美一区在线| 日韩av一级片| 99久久精品免费| 精品三级在线看| 亚洲午夜国产一区99re久久| 国产在线精品一区二区不卡了 | 懂色av一区二区三区免费观看| 国产夫妻精品视频| 欧美酷刑日本凌虐凌虐| 国产精品久久久久久久久免费相片 | 国产精品卡一卡二卡三| 蜜臀av性久久久久av蜜臀妖精| 色婷婷激情一区二区三区| 久久这里都是精品| 天堂av在线一区| 91视频在线观看免费| 91女人视频在线观看| 久久人人超碰精品| 日本三级亚洲精品| 91久久精品午夜一区二区| 国产欧美一区二区精品久导航| 日韩精品一二三区| 日韩欧美精品在线视频| 亚洲视频在线观看一区| 国产精品99久久久久久似苏梦涵| 欧美日韩精品电影| 亚洲精品国产品国语在线app| 国产激情一区二区三区四区| 日韩午夜精品电影| 天堂蜜桃一区二区三区 | 精品国产凹凸成av人网站| 日本一区二区三区高清不卡| 久久av资源站| 欧美顶级少妇做爰| 亚洲成a人片在线不卡一二三区| 91美女精品福利| 1区2区3区精品视频| 成人av在线看| 一区精品在线播放| 99久久久无码国产精品| 国产精品天干天干在线综合| 国产精品一二三在| 国产午夜亚洲精品羞羞网站| 极品少妇xxxx精品少妇偷拍| 亚洲精品一区二区三区影院| 久久国产精品99久久人人澡| 欧美成人vr18sexvr| 精品一区二区三区影院在线午夜| 欧美一区二区精美| 久久99精品一区二区三区| 日韩欧美二区三区| 国产综合成人久久大片91| 久久久午夜电影| 成人久久18免费网站麻豆| 国产精品第一页第二页第三页| eeuss影院一区二区三区 | 99久久精品国产麻豆演员表| 中文字幕色av一区二区三区| 99精品欧美一区二区三区综合在线| 国产精品对白交换视频| 欧美性大战久久久久久久蜜臀| 亚洲午夜精品久久久久久久久| 欧美狂野另类xxxxoooo| 精品系列免费在线观看| 国产午夜精品一区二区三区视频| 成人黄色国产精品网站大全在线免费观看 | 亚洲va欧美va天堂v国产综合| 欧美日韩国产首页在线观看| 美女视频网站黄色亚洲| 国产午夜精品福利| 色综合天天综合网国产成人综合天| 一区二区在线看| 欧美mv和日韩mv的网站| 不卡的看片网站| 亚洲成人av中文| 久久男人中文字幕资源站| 91免费视频网|