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

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

?? fmtuner.c

?? 一個panisonic 的收音頭驅(qū)動程序。不錯
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "reg52.h"
#include "intrins.h"
#include "custdef.h"
#include "i2c_comm.h"
#include "eeprom.h"
#include "fmtuner.h"
#include "kernel.h"
#include "audio_control.h"
#define FMTUNERWRITEADDRESS		0xB6
#define FMTUNERREADADDRESS		0xB7
#define TUNER_START				0x20
#define NO_MEM_MODE		0x00
#define MEM_MODE		0x01

#define AM_STEP_WIDTH	9		//9Khz
#define AM_MAX_FREQ		1620
#define AM_MIN_FREQ		522
#define AM_IF_FREQ		450
#define AM_MAX_COUNT	((AM_MAX_FREQ+AM_IF_FREQ)/AM_STEP_WIDTH)
#define AM_MIN_COUNT ((AM_MIN_FREQ+AM_IF_FREQ)/AM_STEP_WIDTH) 

#define W40KHZ		group1_00&=0xfc
#define W80KHZ		group1_00&=0xfc,group1_00|=0x01
#define W120KHZ		group1_00&=0xfc,group1_00|=0x02
#define W160KHZ		group1_00&=0xfc,group1_00|=0x03
#define G0DB			group1_00&=0xcf
#define GMINUS6DB	group1_00&=0xcf,group1_00|=0x10
#define GPLUS7DB	group1_00&=0xcf,group1_00|=0x20
#define GPLUS4DB	group1_00&=0xcf,group1_00|=0x30
#define SET_FM_WIDTH	W40KHZ
#define SET_FM_IF_GAIN	GPLUS7DB

#define SET_FM_MODE		group2_03&=0xfe
#define SET_AM_MODE		group2_03|=0x01
#define SET_SD_SWITCH_ON	group2_03|=0x02
#define SET_SD_SWITCH_OFF	group2_03&=0xfd
#define SET_MONO_ON		group2_03|=0x04
#define SET_MONO_OFF		group2_03&=0xfb
#define SET_TUNER_MUTE_ON	group2_03|=0x20
#define SET_TUNER_MUTE_OFF	group2_03&=0xdf

#define SET_32MS	group2_04&=0xf9
#define SET_64MS	group2_04&=0xf9,group2_04|=0x02
#define SET_256MS	group2_04&=0xf9,group2_04|=0x04
#define SET_512MS	group2_04&=0xf9,group2_04|=0x06
#define SET_FM_GATE_TIME		SET_64MS

#define LOCK_DETECT_ON			group2_04|=0x01
#define LOCK_DETECT_OFF		group2_04&=0xfe
#define SET_SD_BANDWIDTH_ON	group2_04|=0x10
#define SET_SD_BANDWIDTH_OFF  group2_04&=0xef

#define BAND25K				group2_04&=0x1f
#define BAND37DOT5K		group2_04&=0x1f,group2_04|=0x20
#define BAND50K				group2_04&=0x1f,group2_04|=0x40
#define BAND62DOT5K		group2_04&=0x1f,group2_04|=0x60
#define BAND75K				group2_04&=0x1f,group2_04|=0x80
#define BAND87DOT5K		group2_04&=0x1f,group2_04|=0xa0
#define BAND100K			group2_04&=0x1f,group2_04|=0xc0
#define BAND112DOT5K		group2_04&=0x1f,group2_04|=0xe0
#define SET_SD_BANDWIDTH	BAND50K

#define SET_PLL1				group2_05&=0xfe
#define SET_PLL10			group2_05|=0x01
#define PLLDIVIDER01K		group2_05&=0xf1
#define PLLDIVIDER03K		group2_05&=0xf1,group2_05|=0x02
#define PLLDIVIDER05K		group2_05&=0xf1,group2_05|=0x04
#define PLLDIVIDER09K		group2_05&=0xf1,group2_05|=0x06
#define PLLDIVIDER10K		group2_05&=0xf1,group2_05|=0x08
#define PLLDIVIDER125K		group2_05&=0xf1,group2_05|=0x0a
#define PLLDIVIDER25K		group2_05&=0xf1,group2_05|=0x0c
#define PLLDIVIDER50K		group2_05&=0xf1,group2_05|=0x0e
#define SET_PLLDIVIDER		PLLDIVIDER50K
#define SET_PLLDEADZONE	group2_05|=0x10
//#define SET_PLLDEADZONE	group2_05&=0xef	// detector
#define SET_PLLCHARGEPUMP 	group2_05|=0x60
#define SET_FM_IF_AMP_STOP			group2_0a &=0x7f
#define SET_FM_IF_AMP_START			group2_0a |=0x80
#define SET_MONITER_PS					group2_0a &=0xf8;group2_0a |=0x01
#define SET_MONITER_ANC				group2_0a &=0xf8;group2_0a |=0x02
#define SET_MONITER_RED				group2_0a &=0xf8;group2_0a |=0x03
#define SET_MONITER_F450				group2_0a &=0xf8;group2_0a |=0x04
#define SET_MONITER_NIFC				group2_0a &=0xf8;group2_0a |=0x05
#define SET_MONITER_POINT				SET_MONITER_NIFC
#define SET_IF_FREQ_ON	group2_03|=0x02
#define SET_IF_FREQ_OFF	group2_03&=0xfd

 BYTE memory_status;
 BYTE bandswitch;                /*0,fm;1,am*/
 BYTE st_mono;                    /*0--mono ; 1--st*/
 BYTE fm_ch;
 BYTE am_ch;	
WORD ambak;
WORD fmbak;   
WORD curfmfreq;
WORD curamfreq;
 BYTE  fmamflag;
static BYTE group1_00;
static BYTE group1_01;
static BYTE group1_02;
static BYTE group2_03;
static BYTE group2_04;
static BYTE group2_05;
static BYTE group2_0a;
BYTE search_station;
BYTE detect_station;
BYTE searchupordown;
BYTE found_ch;
BYTE found_station;
WORD code fmfreq[FM_MAX_MEM_BAND]=
{
    0x7AC,0x7e0,0x880,0x920,0x946,0x7AC,0x7e0,0x880,0x920,0x946,
    0x7AC,0x7e0,0x880,0x920,0x946,0x7AC,0x7e0,0x880,0x920,0x946,
    0x7AC,0x7e0,0x880,0x920,0x946,0x7AC,0x7e0,0x880,0x920,0x946,
    0x7AC,0x7e0,0x880,0x920,0x946,0x7AC,0x7e0,0x880,0x920,0x946
};// 87.5 90.1 98.1 106.1 108.0
WORD code amfreq[AM_MAX_MEM_BAND]=
{
0x1440,0x1620,0x1e30,0x2680,0x2b20,
0x1440,0x1620,0x1e30,0x2680,0x2b20,
0x1440,0x1620,0x1e30,0x2680,0x2b20,
0x1440,0x1620,0x1e30,0x2680,0x2b20,
0x1440,0x1620,0x1e30,0x2680,0x2b20,
0x1440,0x1620,0x1e30,0x2680,0x2b20,
0x1440,0x1620,0x1e30,0x2680,0x2b20,
0x1440,0x1620,0x1e30,0x2680,0x2b20
};//522 612 999 1400 1620
BYTE idata configvalue[]=
{
0xa8,// a8 IF 40Khz    a9  IF 80Khz
0x45,
0x4f,
0x00,
0xc6,
0x1e,
0xde,
0x07,
0x00,
0x00,
0x80,
0x00,
0x00,
0x00,
0x00,
0x00
};

void Fmtuner_Read(BYTE subaddress,BYTE *databuffer, BYTE datalen)
{
	I2C_Start();
	I2C_WriteByte(FMTUNERWRITEADDRESS);
	I2C_Ack();
	
	I2C_WriteByte(subaddress);	
	I2C_Ack();
	
	I2C_Start();
	I2C_WriteByte(FMTUNERREADADDRESS);
	I2C_Ack();
	
	while(datalen!=1)
	{
		*databuffer=I2C_ReadByte();
		I2C_Ack();
		databuffer++;
		datalen--;
	}
	*databuffer=I2C_ReadByte();
	I2C_NoAck();
	I2C_Stop();
}
void Fmtuner_Write(BYTE subaddress,BYTE *databuffer, BYTE datalen)
{
	BYTE datanum,temp2;
	BYTE pagei;
	
	temp2=datalen;
	for( pagei=0;pagei<=(datalen/8);pagei++)
	{
		if(temp2>8) 
		{
			datanum=8;
			temp2-=8;
		}
		else datanum=temp2;	
		if (pagei == 0)
		{
			I2C_Start();
			I2C_WriteByte(FMTUNERWRITEADDRESS);
			I2C_Ack(); 
		 	
			I2C_WriteByte(subaddress);
			I2C_Ack();
		
			for(;datanum!=0;datanum--)
			{
				I2C_WriteByte(*databuffer);
		 		I2C_Ack();
				databuffer++;
			}
			I2C_Stop();
			Delay_X_ms(10);		
		}
		else
		{
			I2C_Start();
			I2C_WriteByte(FMTUNERWRITEADDRESS);
			I2C_Ack(); 
		 	
			I2C_WriteByte(subaddress+pagei*8);
			I2C_Ack();
		
			for(;datanum!=0;datanum--)
			{
				I2C_WriteByte(*databuffer);
		 		I2C_Ack();
				databuffer++;
			}
			I2C_Stop();
			Delay_X_ms(10);		
		
		}

	} 	
}
void WriteToEeprom(BYTE stationnum, WORD wfreq)
{
	BYTE temp,address;
	if (fmamflag==0) // 0: fm 1:am
	{
		temp=wfreq &0xff;
		address = stationnum*2+FM_STATION_START;
		Eeprom_Write(address, &temp,1);
		temp=(wfreq>>8)&0xff;
		address = stationnum*2+1+FM_STATION_START;
		Eeprom_Write(address, &temp,1);
	}
	else
	{
		temp=wfreq &0xff;
		address = stationnum*2+AM_STATION_START;
		Eeprom_Write(address, &temp,1);
		temp=(wfreq>>8)&0xff;
		address = stationnum*2+1+AM_STATION_START;
		Eeprom_Write(address, &temp,1);
	}
}
BYTE ReadFromEepromtest(BYTE stationnum)
{
	WORD temp;
	BYTE temp1,address;
	temp=0;
	if (fmamflag==0) // 0: fm 1:am
	{
		address=(stationnum)*2+1+FM_STATION_START;
		Eeprom_Read(address,&temp1,1);
		temp=temp1;
		address=(stationnum)*2+FM_STATION_START;
		Eeprom_Read(address,&temp1,1);
		temp=((temp<<8)&0xff00)|temp1;
              if ((temp < FM_MIN_COUNT) || (temp > FM_MAX_COUNT))
                return 1;
       }
	else
	{
		address=(stationnum)*2+1+AM_STATION_START;
		Eeprom_Read(address,&temp1,1);
		temp=temp1;
		address=(stationnum)*2+AM_STATION_START;
		Eeprom_Read(address,&temp1,1);
		temp=((temp<<8)&0xff00)|temp1;
              if ((temp >= AM_MIN_COUNT) && (temp <= AM_MAX_COUNT))
                ambak = temp;
              else
                return 1;
	}
	return 0;
}

BYTE ReadFromEeprom(BYTE stationnum)
{
	WORD temp;
	BYTE temp1,address;
	temp=0;
	if (fmamflag==0) // 0: fm 1:am
	{
		address=(stationnum)*2+1+FM_STATION_START;
		Eeprom_Read(address,&temp1,1);
		temp=temp1;
		address=(stationnum)*2+FM_STATION_START;
		Eeprom_Read(address,&temp1,1);
		temp=((temp<<8)&0xff00)|temp1;
              if ((temp >= FM_MIN_COUNT) && (temp <= FM_MAX_COUNT))
                fmbak = temp;
              else 
                return 1;
       }
	else
	{
		address=(stationnum)*2+1+AM_STATION_START;
		Eeprom_Read(address,&temp1,1);
		temp=temp1;
		address=(stationnum)*2+AM_STATION_START;
		Eeprom_Read(address,&temp1,1);
		temp=((temp<<8)&0xff00)|temp1;
              if ((temp >= AM_MIN_COUNT) && (temp <= AM_MAX_COUNT))
                ambak = temp;
              else
                return 1;
	}
	return 0;
}
void Tuner_Init()
{
       BYTE i;
	for(i=0;i<FM_MAX_MEM_BAND-30;i++)
	{
	        fmamflag=0;    //0:fm, 1:am
		WriteToEeprom(i+1,fmfreq[i]);
	}
	for(i=0;i<AM_MAX_MEM_BAND-30;i++)
	{
	       fmamflag=1;    //0:fm, 1:am
		WriteToEeprom(i+1,amfreq[i]);
	}
	memory_status=NO_MEM_MODE;
	fmamflag=0;    //0:fm, 1:am
	//fmbak = 0x07DE;// 90Mhz
	//fmbak = 0x086c;// 97.1Mhz
       fmbak=0x7AC; // 87.5
       fm_ch=1;
       ambak=0x1440; //522Khz
       am_ch=1;
	configvalue[3]&=0xFE; // fm
	Set_Freq(fmbak);
	Reset_Tuner_Config();
       //Set_Station(1);
	
}
void Tuner_Select_FM()
{
	fmamflag = 0;
	configvalue[3]&=0xFE;
	Fmtuner_Write(3, &configvalue[3], 1);

	
}
void Tuner_Select_AM()
{
	fmamflag = 1;
	configvalue[3]|=fmamflag;
	Reset_Tuner_Config();
}
void Reset_Tuner_Config()
{
        Fmtuner_Write(0x00,configvalue,sizeof(configvalue));
}
#if 0
BYTE Is_Stereo()
{
	return 0;
}
#endif
//#define TEST_IF_COUNT
#ifdef TEST_IF_COUNT
extern BYTE if_count;
#endif
BYTE Is_Station()
{
	BYTE temp;
	BYTE retry_count;
	//P3_2=1;
    	if (fmamflag == 0) // 0:fm 1:am
    	   Set_Freq(fmbak);
    	else
	    Set_Freq(ambak);
        configvalue[3] = 0x10;// Mute on
        Reset_Tuner_Config();
        found_station = 0;
        //search_station = 0;
       if (P3_2 == 0)
       {
        	configvalue[2] = 0x02;// SD mode on
        	//Delay_X_ms(100);
        	Reset_Tuner_Config();
                retry_count = 5;
      	      while(--retry_count )
        	{
                    temp = 0x02;// must be this value
                    Fmtuner_Write(0x83, &temp, 1);
                    Delay_X_ms(100); 
        	       //if (P3_2 == 0)
            	       {
                        Fmtuner_Read(0x00,&temp,1);
                        #ifdef TEST_IF_COUNT
                        if_count = temp&0xf;
                        #endif
                        if ((temp & 0x01)== 0x01)
                        {
                        search_station = 1;
                        found_station = 1;
                        configvalue[2] = 0x00;// SD mode off

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
理论片日本一区| 欧美高清性hdvideosex| 欧美视频在线一区二区三区 | 一区二区三区四区乱视频| 亚洲精品日韩综合观看成人91| 亚洲最快最全在线视频| 久99久精品视频免费观看| 99精品视频在线播放观看| 欧美一区二区日韩| 国产亚洲污的网站| 亚洲aⅴ怡春院| 成人晚上爱看视频| 欧美老女人第四色| 欧美精品一区二区三区视频| 国产精品成人免费精品自在线观看| 亚洲一区在线观看视频| 国产精品自拍av| 99re热这里只有精品免费视频| 欧美日韩成人综合| 亚洲欧美一区二区视频| 蜜桃一区二区三区四区| 色琪琪一区二区三区亚洲区| 国产日产欧美精品一区二区三区| 天天影视色香欲综合网老头| 99精品偷自拍| 国产女人aaa级久久久级| 日韩精品一二三| 色综合天天狠狠| 国产精品三级av在线播放| 精品一区二区三区影院在线午夜 | 久久亚洲一区二区三区四区| 一区二区三区久久久| 免费xxxx性欧美18vr| 欧美色图免费看| 亚洲精品ww久久久久久p站| 不卡的看片网站| 日韩区在线观看| 天堂va蜜桃一区二区三区| 91麻豆文化传媒在线观看| 国产日韩欧美一区二区三区综合| 日韩1区2区3区| 777精品伊人久久久久大香线蕉| 亚洲欧美日韩中文播放 | 一区二区三区丝袜| 一本一道综合狠狠老| 亚洲欧洲韩国日本视频| 成人高清视频在线| 国产精品免费视频观看| 成人免费视频网站在线观看| 国产人妖乱国产精品人妖| 国产精品亚洲综合一区在线观看| 精品粉嫩超白一线天av| 国产一区二区不卡在线| 久久夜色精品国产噜噜av| 国产精品一区二区三区四区| 久久久久久久久久久久久女国产乱 | 亚洲视频免费观看| 国产一区二区久久| 日本一区二区综合亚洲| 99视频热这里只有精品免费| 亚洲欧美日韩国产一区二区三区| 色嗨嗨av一区二区三区| 亚洲一区二区三区四区不卡| 欧美日韩综合不卡| 国产一区二区三区在线观看免费| 亚洲特级片在线| 日韩三级视频在线观看| 99国产精品久久久久久久久久久| 日日摸夜夜添夜夜添亚洲女人| 国产欧美精品在线观看| 在线观看三级视频欧美| 国产在线播精品第三| 亚洲美女视频一区| 久久精品男人的天堂| 欧美日韩午夜精品| www.亚洲在线| 精品写真视频在线观看| 亚洲国产精品影院| 中文字幕一区二区视频| 精品福利一区二区三区免费视频| 在线观看欧美黄色| www.视频一区| 国产精品自拍毛片| 美女视频一区在线观看| 亚洲国产精品天堂| 最新成人av在线| 国产亚洲精品aa| 欧美一级日韩免费不卡| 欧美性猛交xxxx黑人交 | 国精产品一区一区三区mba视频| 亚洲另类中文字| 国产精品国产三级国产专播品爱网| 欧美二区乱c少妇| 在线精品视频小说1| 99久久免费精品高清特色大片| 国产毛片精品视频| 美国毛片一区二区| 日韩电影免费在线看| 亚洲福利视频一区二区| 亚洲欧美日韩国产综合在线| 国产精品久久免费看| 国产日产亚洲精品系列| 国产欧美一区二区精品性色| 欧美一区二区三区啪啪| 6080国产精品一区二区| 欧美三级韩国三级日本三斤| 欧美在线观看18| 欧美在线观看一二区| 欧美中文字幕一区二区三区| 色综合一区二区| 色拍拍在线精品视频8848| 一本色道久久综合亚洲aⅴ蜜桃 | 久久综合国产精品| 欧美成人a视频| 日韩欧美亚洲国产另类| 精品国产三级电影在线观看| 精品国产一区二区三区四区四| 欧美成人一区二区三区| 精品国产三级电影在线观看| 精品国产伦一区二区三区观看体验| 精品久久久久久综合日本欧美| 亚洲精品一线二线三线| 日本一区二区免费在线| 亚洲视频在线观看一区| 亚洲在线观看免费| 日日夜夜精品免费视频| 久久精品国产在热久久| 国产精品一区二区久激情瑜伽 | 中文字幕一区二区三区四区不卡| 亚洲人成影院在线观看| 午夜久久电影网| 久久99国产乱子伦精品免费| 国产精品夜夜嗨| 91免费看`日韩一区二区| 欧美午夜宅男影院| 精品理论电影在线观看| 中文字幕亚洲电影| 亚洲成人动漫精品| 国产精品影视在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美在线不卡一区| 日韩欧美一区电影| 中文字幕乱码久久午夜不卡 | 偷拍日韩校园综合在线| 久久国产日韩欧美精品| www..com久久爱| 欧美日韩国产综合视频在线观看 | 欧美二区在线观看| 欧美激情一区二区三区全黄| 亚洲国产中文字幕在线视频综合| 九九国产精品视频| 91社区在线播放| 日韩欧美中文一区| 亚洲女人小视频在线观看| 欧美aaaaa成人免费观看视频| www.日韩av| 精品国免费一区二区三区| 又紧又大又爽精品一区二区| 国产一区二区三区免费播放| 日本韩国欧美一区| 久久先锋资源网| 亚洲成av人片一区二区三区| 国产成人精品www牛牛影视| 欧美日韩电影在线播放| 国产精品久久久久国产精品日日| 麻豆国产一区二区| 在线一区二区视频| 国产精品视频看| 久久国产婷婷国产香蕉| 欧美乱妇15p| 亚洲乱码日产精品bd| 国产成人午夜精品5599| 91精品免费在线| 亚洲一区二区美女| 91原创在线视频| 日本一区二区久久| 久久成人18免费观看| 欧美日韩中文字幕精品| 亚洲色图欧美偷拍| 成人动漫精品一区二区| 国产偷国产偷亚洲高清人白洁| 蜜臀久久99精品久久久画质超高清| 在线免费观看日本一区| 亚洲女人的天堂| 成人动漫精品一区二区| 国产三级精品在线| 国产一区二区不卡| 亚洲精品一区二区三区在线观看| 午夜精品123| 91精品久久久久久久91蜜桃| 亚洲高清不卡在线| 欧美三级欧美一级| 爽好多水快深点欧美视频| 欧美日韩国产一二三| 亚洲国产成人va在线观看天堂| 色婷婷精品大视频在线蜜桃视频| 亚洲天堂中文字幕| 色欧美片视频在线观看在线视频| 亚洲免费观看高清完整版在线观看| 91免费国产视频网站|