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

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

?? si47xx_rx_am.c

?? si47xx FM 收音機的程序,通過單片機來控制搜臺燈功能
?? C
字號:
/**************************************

Si47XX AM RX part

***************************************/

#include "Si47xx_common.h"

/**************************************

Si47XX_Set_Property_AM_DEEMPHASIS()

***************************************/

T_ERROR_OP Si47XX_Set_Property_AM_DEEMPHASIS(void)
{
	unsigned short loop_counter = 0;
	unsigned char Si47XX_reg_data[32];	
	unsigned char error_ind = 0;
	unsigned char Si47XX_set_property[] = {0x12,0x00,0x31,0x00,0x00,0x01};	//AM deemphasis is 50us

	//send CMD
 	error_ind = OperationSi47XX_2w(WRITE, &(Si47XX_set_property[0]), 6);
	if(error_ind)
		return I2C_ERROR;

	//wait CTS = 1
	do
	{	
		error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1);
		if(error_ind)
			return I2C_ERROR;	
		loop_counter++;
	}
	while(((Si47XX_reg_data[0]) != 0x80) && (loop_counter < 0xff));  //loop_counter limit should guarantee at least 300us
	
	if(loop_counter >= 0xff)
		return LOOP_EXP_ERROR;	

	return OK;

}

/**************************************

Si47XX_Set_Property_AM_Seek_Space()

***************************************/

T_ERROR_OP Si47XX_Set_Property_AM_Seek_Space(void)
{
	unsigned short loop_counter = 0;
	unsigned char Si47XX_reg_data[32];	
	unsigned char error_ind = 0;
	unsigned char Si47XX_set_property[] = {0x12,0x00,0x34,0x02,0x00,0x09};	//seek space = 0x09 = 9 = 9KHz

	//send CMD
 	error_ind = OperationSi47XX_2w(WRITE, &(Si47XX_set_property[0]), 6);
	if(error_ind)
		return I2C_ERROR;

	//wait CTS = 1
	do
	{	
		error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1);
		if(error_ind)
			return I2C_ERROR;	
		loop_counter++;
	}
	while(((Si47XX_reg_data[0]) != 0x80) && (loop_counter < 0xff));  //loop_counter limit should guarantee at least 300us
	
	if(loop_counter >= 0xff)
		return LOOP_EXP_ERROR;	

	return OK;

}

/**************************************

Si47XX_Set_Property_AM_SNR_Threshold()

Default is 5dB.

***************************************/

T_ERROR_OP Si47XX_Set_Property_AM_SNR_Threshold(void)
{
	unsigned short loop_counter = 0;
	unsigned char Si47XX_reg_data[32];	
	unsigned char error_ind = 0;
	unsigned char Si47XX_set_property[] = {0x12,0x00,0x34,0x03,0x00,0x05};	//SNR threshold = 0x0005 = 5dB

	//send CMD
 	error_ind = OperationSi47XX_2w(WRITE, &(Si47XX_set_property[0]), 6);
	if(error_ind)
		return I2C_ERROR;

	//wait CTS = 1
	do
	{	
		error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1);
		if(error_ind)
			return I2C_ERROR;	
		loop_counter++;
	}
	while(((Si47XX_reg_data[0]) != 0x80) && (loop_counter < 0xff));  //loop_counter limit should guarantee at least 300us
	
	if(loop_counter >= 0xff)
		return LOOP_EXP_ERROR;	

	return OK;

}

/**************************************

Si47XX_Set_Property_AM_RSSI_Threshold()

Default is 25dBuV.

***************************************/

T_ERROR_OP Si47XX_Set_Property_AM_RSSI_Threshold(void)
{
	unsigned short loop_counter = 0;
	unsigned char Si47XX_reg_data[32];	
	unsigned char error_ind = 0;
	unsigned char Si47XX_set_property[] = {0x12,0x00,0x34,0x04,0x00,0x19};	//RSSI threshold = 0x0019 = 25dBuV

	//send CMD
 	error_ind = OperationSi47XX_2w(WRITE, &(Si47XX_set_property[0]), 6);
	if(error_ind)
		return I2C_ERROR;

	//wait CTS = 1
	do
	{	
		error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1);
		if(error_ind)
			return I2C_ERROR;	
		loop_counter++;
	}
	while(((Si47XX_reg_data[0]) != 0x80) && (loop_counter < 0xff));  //loop_counter limit should guarantee at least 300us
	
	if(loop_counter >= 0xff)
		return LOOP_EXP_ERROR;	

	return OK;

}

/**************************************

static Si47XX_AM_Tune_Freq()

***************************************/

static T_ERROR_OP Si47XX_AM_Tune_Freq(unsigned short channel_freq)
{
	unsigned short loop_counter = 0;
	unsigned char Si47XX_reg_data[32];	
	unsigned char error_ind = 0;
	unsigned char Si47XX_tune_freq[] = {0x40,0x00,0x03,0xE8,0x00,0x00};	//0x03E8=1000KHz
	
	Si47XX_tune_freq[2] = (channel_freq&0xff00) >> 8;
	Si47XX_tune_freq[3] = (channel_freq&0x00ff);	

	//send CMD
 	error_ind = OperationSi47XX_2w(WRITE, &(Si47XX_tune_freq[0]), 6);
	if(error_ind)
		return I2C_ERROR;

	//wait CTS = 1
	do
	{	
		error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1);
		if(error_ind)
			return I2C_ERROR;	
		loop_counter++;
	}
	while(((Si47XX_reg_data[0]) != 0x80) && (loop_counter < 0xff));  //loop_counter limit should guarantee at least 300us
	
	if(loop_counter >= 0xff)
		return LOOP_EXP_ERROR;	

	return OK;

}

/**************************************

static Si47XX_AM_Seek_Start()

***************************************/

static T_ERROR_OP Si47XX_AM_Seek_Start(T_SEEK_MODE seek_mode)
{
	unsigned short loop_counter = 0;
	unsigned char Si47XX_reg_data[32];	
	unsigned char error_ind = 0;
	unsigned char Si47XX_seek_start[] = {0x41,0x0C};
			
	
	switch(seek_mode)
	{
		case SEEKDOWN_HALT:
		{
			Si47XX_seek_start[1] = 0x00;
			break;
		}
    case SEEKDOWN_WRAP:
    {
    	Si47XX_seek_start[1] = 0x04;
    	break;
    }
    case SEEKUP_HALT:
    {
    	Si47XX_seek_start[1] = 0x08;
    	break;
    }
    case SEEKUP_WRAP:
    {
    	Si47XX_seek_start[1] = 0x0C;
    	break;
    }
  }
	//send CMD
 	error_ind = OperationSi47XX_2w(WRITE, &(Si47XX_seek_start[0]), 2);
	if(error_ind)
		return I2C_ERROR;

	//wait CTS = 1
	do
	{	
		error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1);
		if(error_ind)
			return I2C_ERROR;	
		loop_counter++;
	}
	while(((Si47XX_reg_data[0]) != 0x80) && (loop_counter < 0xff));  //loop_counter limit should guarantee at least 300us
	
	if(loop_counter >= 0xff)
		return LOOP_EXP_ERROR;	

	return OK;

}

/**************************************

static Si47XX_AM_Tune_Status()

***************************************/

static T_ERROR_OP Si47XX_AM_Tune_Status(unsigned short *pChannel_Freq, unsigned char *SeekFail, unsigned char *valid_channel)
{
	unsigned short loop_counter = 0;
	unsigned char Si47XX_reg_data[32];	
	unsigned char error_ind = 0;
	unsigned char Si47XX_fm_tune_status[] = {0x42,0x01};		

	//send CMD
 	error_ind = OperationSi47XX_2w(WRITE, &(Si47XX_fm_tune_status[0]), 2);
	if(error_ind)
		return I2C_ERROR;

	//wait CTS = 1
	do
	{	
		error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1);
		if(error_ind)
			return I2C_ERROR;	
		loop_counter++;
	}
	while(((Si47XX_reg_data[0]) != 0x80) && (loop_counter < 0xff));  //loop_counter limit should guarantee at least 300us
	
	if(loop_counter >= 0xff)
		return LOOP_EXP_ERROR;	
		
	//read tune status: you should read out: {0x80,0x81,0x03,0xE8,0x2A,0x1A,0x0D,0x95} //Freq=0x03E8=1000KHz, RSSI=0x2A=42dBuV, SNR=0x1A=26dB
	error_ind = OperationSi47XX_2w(READ, &Si47XX_reg_data[0], 8);	
	if(error_ind)
		return I2C_ERROR;
		
	if(((Si47XX_reg_data[1]&0x80) != 0))
		*SeekFail = 1;
	else
		*SeekFail = 0;
		
	if(((Si47XX_reg_data[1]&0x01) != 0))
		*valid_channel = 1;
	else
		*valid_channel = 0;
		
	*pChannel_Freq = ((Si47XX_reg_data[2] << 8) | Si47XX_reg_data[3]);

	return OK;

}

/**************************************

Si47XX_Set_AM_Frequency()

***************************************/

T_ERROR_OP Si47XX_Set_AM_Frequency(unsigned short channel_freq)
{
	if(Si47XX_AM_Tune_Freq(channel_freq) != OK) return ERROR;
	if(Si47XX_Wait_STC() != OK) return ERROR;	
	return OK;
}

/**************************************

Si47XX_AM_Seek()

SeekFail:"no any station" or not when in WRAP mode

***************************************/

T_ERROR_OP Si47XX_AM_Seek(T_SEEK_MODE seek_mode, unsigned short *pChannel_Freq, unsigned char *SeekFail)
{
	unsigned char valid_channel;
	unsigned short loop_counter = 0;

	do
	{
		if(Si47XX_AM_Seek_Start(seek_mode) != OK) return ERROR;
		if(Si47XX_Wait_STC() != OK) return ERROR;
		//read seek result:
		if(Si47XX_AM_Tune_Status(pChannel_Freq, SeekFail, &valid_channel) != OK) return ERROR;	
		
		loop_counter++;
	}
	while((valid_channel == 0) && (loop_counter < 0xff) && (*SeekFail == 0));  

	if(loop_counter >= 0xff)
		return LOOP_EXP_ERROR;
		
	if((seek_mode == SEEKDOWN_WRAP) || (seek_mode == SEEKUP_WRAP))
		if((valid_channel == 1) && (*SeekFail == 1))
			*SeekFail = 0;

	return OK;
}

/**************************************

Si47XX_AM_Seek_All()

***************************************/

T_ERROR_OP Si47XX_AM_Seek_All(unsigned short *pChannel_All_Array, unsigned char Max_Length, unsigned char *pReturn_Length)
{
	unsigned char SeekFail;
	unsigned short Channel_Result, Last_Channel = 520;
		
	*pReturn_Length = 0;
	
	if(Si47XX_Set_AM_Frequency(520) != OK) return ERROR;
	
	while(*pReturn_Length < Max_Length)
	{
		if(Si47XX_AM_Seek(SEEKUP_WRAP, &Channel_Result, &SeekFail) != OK) return ERROR;
			
		if(SeekFail)
			return OK;
		
		if((Channel_Result) <= Last_Channel)	
		{
			if((Channel_Result) == 520)
			{
				*pChannel_All_Array++ = Channel_Result;
				(*pReturn_Length)++;
			}
			return OK;
		}
		else
		{
			*pChannel_All_Array++ = Last_Channel = Channel_Result;
			(*pReturn_Length)++;
		}
	}
	
	return OK;
}













?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av在线影院| 久久五月婷婷丁香社区| 日韩一区二区在线观看| 国产日韩精品一区| 亚洲国产精品久久不卡毛片| 国产精品一区不卡| 69堂国产成人免费视频| 国产精品网站在线| 国模大尺度一区二区三区| 欧美视频日韩视频| 亚洲男女一区二区三区| 成人永久免费视频| 欧美一区二区三区白人| 亚洲综合丝袜美腿| 91麻豆高清视频| 欧美国产综合一区二区| 国产伦精品一区二区三区免费| 欧美日韩黄色一区二区| 亚洲精品国产a| 99视频热这里只有精品免费| 久久久久久久久蜜桃| 精品一区二区三区久久久| 欧美日韩www| 亚洲自拍偷拍麻豆| 色先锋aa成人| 一区二区三区高清在线| 91麻豆swag| 一区二区三区在线观看动漫| 色综合一个色综合亚洲| 一区精品在线播放| 成人avav在线| 最新不卡av在线| 不卡一区在线观看| 国产精品电影院| 99re这里只有精品首页| 中文字幕av免费专区久久| 成人精品gif动图一区| 国产精品网曝门| 成人aa视频在线观看| 亚洲视频一二区| 91麻豆精东视频| 亚洲电影第三页| 欧美一区二区三区日韩视频| 日韩电影在线免费观看| 欧美va亚洲va香蕉在线| 韩国一区二区三区| 国产精品久久久一本精品| 欧美一级久久久久久久大片| 视频一区欧美精品| 日韩欧美一级片| 成人av网站在线| 亚洲国产视频a| 日韩欧美久久久| 大白屁股一区二区视频| 亚洲青青青在线视频| 欧美喷潮久久久xxxxx| 久久av中文字幕片| 1024精品合集| 欧美一区二区三级| 懂色av中文一区二区三区| 亚洲欧美区自拍先锋| 在线电影一区二区三区| 国产美女视频91| 一区二区三区免费网站| 日韩三区在线观看| 91麻豆国产精品久久| 日本麻豆一区二区三区视频| 欧美国产国产综合| 欧美精品视频www在线观看| 国产一区二区三区日韩| 亚洲夂夂婷婷色拍ww47| 久久免费精品国产久精品久久久久| 99国产麻豆精品| 精品中文字幕一区二区| 亚洲伦在线观看| 精品美女一区二区| 91亚洲精华国产精华精华液| 免费国产亚洲视频| 一区二区三区在线视频免费观看| 精品国产成人系列| 色琪琪一区二区三区亚洲区| 国产综合色产在线精品| 午夜精品爽啪视频| 国产精品电影一区二区| 日韩视频一区二区三区| 色噜噜狠狠成人网p站| 国产精品综合在线视频| 午夜成人在线视频| 中文字幕制服丝袜成人av| 欧美丝袜丝交足nylons图片| 成人精品高清在线| 国产一区二区不卡| 久久精品国产一区二区三| 亚洲综合丁香婷婷六月香| 国产欧美日韩三级| 欧美大片在线观看一区| 欧美日韩精品欧美日韩精品 | 一区二区三区四区av| 久久久久国产精品免费免费搜索| 欧美女孩性生活视频| 99re成人在线| 成人免费视频播放| 成人一级视频在线观看| 国产九九视频一区二区三区| 麻豆91免费看| 久久国产尿小便嘘嘘尿| 日韩av电影免费观看高清完整版 | 国产91清纯白嫩初高中在线观看| 伦理电影国产精品| 天堂av在线一区| 性做久久久久久免费观看欧美| 亚洲精品国产一区二区精华液 | 亚洲精品videosex极品| 国产精品私人影院| 国产精品久久久久久久午夜片| 国产欧美日韩视频在线观看| 国产欧美日韩精品一区| 国产精品三级久久久久三级| 国产精品无码永久免费888| 国产精品美女久久久久久2018 | 欧美视频三区在线播放| 欧美日韩中文字幕一区| 欧美日韩dvd在线观看| 欧美丰满美乳xxx高潮www| 91精品国产麻豆| 日韩精品一区二区三区中文不卡| 日韩精品中文字幕在线一区| 精品国产一二三| 国产欧美一区二区三区鸳鸯浴| 国产免费观看久久| 亚洲欧美日韩国产成人精品影院| 亚洲一区在线观看视频| 日韩国产一区二| 国产精品12区| 一本一道波多野结衣一区二区 | 亚洲图片自拍偷拍| 免费观看一级欧美片| 国产一区 二区 三区一级| 99re热这里只有精品视频| 欧美精品久久天天躁| wwww国产精品欧美| 国产精品久久久久7777按摩| 亚洲成人在线免费| 国产一区二三区| 色婷婷av久久久久久久| 欧美一区二区三区免费在线看| 久久精品免费在线观看| 亚洲男人的天堂网| 九一九一国产精品| 色婷婷久久久综合中文字幕| 6080yy午夜一二三区久久| 久久精品在线观看| 一区二区三区视频在线看| 精品一区二区三区的国产在线播放| 成人午夜碰碰视频| 欧美乱熟臀69xxxxxx| 亚洲国产经典视频| 亚瑟在线精品视频| 成人av免费网站| 欧美大片免费久久精品三p| 亚洲欧美色图小说| 国产成人综合亚洲网站| 精品视频1区2区3区| 夜夜嗨av一区二区三区网页 | 精品日本一线二线三线不卡| 国产精品二三区| 激情av综合网| 欧美丰满嫩嫩电影| 亚洲人成小说网站色在线| 国产精品影视网| 日韩一区二区精品在线观看| 亚洲精品欧美综合四区| 国产精品白丝jk黑袜喷水| 欧美日韩一卡二卡| 亚洲欧美在线aaa| 国产在线视视频有精品| 欧美肥妇bbw| 亚洲一区二区三区四区中文字幕| 高清在线成人网| 精品国产一二三区| 奇米色777欧美一区二区| 在线观看亚洲一区| 中文字幕综合网| 国产福利91精品一区| 精品国产乱码久久久久久牛牛| 亚洲成人免费电影| 欧美性大战久久| 亚洲精品伦理在线| 91视频在线看| 亚洲色图视频网| 91视频国产观看| 亚洲视频你懂的| 色香蕉成人二区免费| 亚洲免费视频成人| 91国产免费观看| 洋洋av久久久久久久一区| 色国产综合视频| 亚洲精品水蜜桃| 欧美主播一区二区三区美女| 一区二区三区欧美|