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

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

?? ba1924.c

?? lc72130.收音機軟件 #include "saa6588.c" #include "ba1924.c"
?? C
字號:
#ifdef SUPPORT_BA1924
#include "global.h"
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
#include "carcav.h"
#include "ba1924.h"
#include "rds.h"

/*26x10 matrix*/
UINT16  rds_decoding_matrix[26] ={					//H  圖F3
	0x0200,0x0100,0x0080,0x0040,
	0x0020,0x0010,0x0008,0x0004,
	0x0002,0x0001,0x02dc,0x016e,
	0x00b7,0x0287,0x039f,0x0313, 
	0x0355,0x0376,0x01bb,0x0201,
	0x03dc,0x01ee,0x00f7,0x02a7,
	0x038f,0x031b,
};
 
#ifdef RDS_ENCODER
/*16*26*/ 
UINT32  rds_encoding_matrix[16] = {					//G,圖F1
	0x02000077,0x010002e7,0x008003af,0x0040030b,	
	0x00200359,0x00100370,0x000801b8,0x000400dc,
	0x0002006e,0x00010037,0x000082c7,0x000043bf,
	0x00002303,0x0000135d,0x00000b72,0x000005b9,
};

/*A B C C' D*/
UINT16  rds_offset_word[5] ={0x00fc,0x0198,0x0168,0x0350,0x01b4};//表F1,偏置碼
#endif


/*10bits A B C C' D*/
UINT16  rds_syndrome[5]={0x03d8,0x03d4,0x025c,0x03cc,0x0258};//表F1,同步碼



typedef  struct  {
	UINT32  rds_buffer;		//32bit 的數據,實際為26bit
	BYTE rds_bit_cnt;		//結構?
	BYTE rds_sync_state;	//同步狀態
	BYTE rds_block_id;		//快地址
	BYTE rds_crc_ok;	//校驗成功
	UINT16 rds_block_data[4]; //塊數據
}rds_var;
rds_var rds_var1;
//volatile BYTE rdsDataReady=0;
extern void rds_process_group(UINT16 a, UINT16 b, UINT16 c, UINT16 d);
unsigned char new_bit_received=0;

#ifdef RDS_ENCODER
void rds_encode(UINT16  data,BYTE block_id)
{
	BYTE i;
	UINT16 check_word = 0;
	UINT32 sent_word = 0;
	
	for(i=0;i<16;i++)
	{
		if(data & (0x01<<i))
		{
			check_word ^= (rds_encoding_matrix[15-i]&0x03ff);
		}
	}
	sent_word = ((data<<10)|(check_word^rds_offset_word[block_id]));
	rds_var1.rds_buffer = sent_word;
	//printf("che %x sent %x\n",check_word,sent_word);
}
#endif

void rds_calculate_crc(void)
{//crc	校驗,校驗結果通過rds_var1.rds_crc_ok返回
	//同時完成對rds_var1.rds_block_id的判定
	BYTE i=0;
	BYTE j=0;
	UINT16 rds_check_word=0;
	//UINT16 rds_data_word;
	//UINT16 rds_compare = 0;
	UINT32 k=1;
	rds_var1.rds_crc_ok = 0;
	for(i=0;i<26;i++)
	{
		if(rds_var1.rds_buffer & (k<<i))
		{
			rds_check_word^=(rds_decoding_matrix[25-i]);
		}
	}
	for(j=0;j<5;j++)
	{
		if(rds_check_word==rds_syndrome[j])
		{
			rds_var1.rds_crc_ok = 1;
			rds_var1.rds_block_id = j;
			break;
		}
	}
}
/*
  state shift:

  state0-(1)->state1-(2)->state2-(3)->state3-(4)->state4
                |           |        |     
                |------<<(5)|    	
                |-----<<---(6)-------|    


                                          
1--in state 0,init rd_-bit_cnt to 0,and state shift to 1;
2--in state 1,wait the shift buffer to be full;once the buffer is full(>26 bit),
     calculate the syndrome and check it up from the syndrome table.if 
     we get the rds_sync_ok flag,shift state to 2,and store the block data to
     the buffer.
3--in state 1,if we didn't get rds_sync_ok flag(it often happen),we just break,
     and wait for the next bit come in.Then do the same as title 2.
4--in state 2,it is quite similar with state1,we wait for the shift buffer to be full
     and check it up fot rds_sync_ok;if we get the rds_sync_ok flag,store data
     and shift to the next state.if we don't get the rds_sync_ok flag,just wait for
     the next bit until sync ok.
5--in state 3,also similar with the previous state.The different is      
*/
 
void rds_get_data(void)
{
	//ASSERT((rds_var1.rds_sync_state<=4), "rds_get_data");
	switch(rds_var1.rds_sync_state)
		{
		case 0: //reset cnt
			rds_var1.rds_bit_cnt = 0;
			rds_var1.rds_sync_state = 1;
			break;
		case 1: //cnt ==26
			if(rds_var1.rds_bit_cnt>=26)
			{
				rds_calculate_crc();
				if(rds_var1.rds_crc_ok)
				{ 
					if(rds_var1.rds_block_id == 0)
					{
						rds_var1.rds_sync_state = 2;
						rds_var1.rds_bit_cnt = 0;
						rds_var1.rds_block_data[0] = (UINT16)(rds_var1.rds_buffer>>10)&0xffff; 
						//printf("sync 0\n");	
					}		
				} 	

			}	
			break;
		case 2: //next block
			if(rds_var1.rds_bit_cnt >= 26)
			{
				rds_calculate_crc();
				if(rds_var1.rds_crc_ok)
				{
					if(rds_var1.rds_block_id == 1)
					{
						rds_var1.rds_bit_cnt = 0;
						rds_var1.rds_sync_state = 3;
						rds_var1.rds_block_data[1] = (UINT16)(rds_var1.rds_buffer>>10)&0xffff;
					}
				}
			}
			break;
		case 3:
			if(rds_var1.rds_bit_cnt == 26)
			{
				rds_var1.rds_bit_cnt = 0;
				rds_calculate_crc();
				if(rds_var1.rds_crc_ok)
				{
					if((rds_var1.rds_block_id ==2)||(rds_var1.rds_block_id ==3)) //block C or C'
					{
						rds_var1.rds_sync_state = 4;
						rds_var1.rds_block_data[2] = (UINT16)(rds_var1.rds_buffer>>10)&0xffff;
					}
					else
					{
						rds_var1.rds_sync_state = 2;
					}
				}
				else
				{
					rds_var1.rds_sync_state = 2;
				} 
			}
			
			break;
		case 4:
			if(rds_var1.rds_bit_cnt == 26)
			{
				rds_var1.rds_bit_cnt = 0;
				rds_calculate_crc();
				if(rds_var1.rds_crc_ok)
				{
					if(rds_var1.rds_block_id ==4) //block D
					{
						//printf("sync 3 id %d\n",rds_var1.rds_block_id);
						rds_var1.rds_block_data[3] = (UINT16)(rds_var1.rds_buffer>>10)&0xffff;
						rds_process_group(rds_var1.rds_block_data[0],rds_var1.rds_block_data[1],rds_var1.rds_block_data[2],rds_var1.rds_block_data[3]);
					}
					else
					{
						rds_var1.rds_sync_state = 2;
					}
				}
				else
				{
					rds_var1.rds_sync_state = 2;
				}
			}
			break;
		default:
			rds_var1.rds_sync_state = 0;
			break;
	}
}

/*
MSB first
return 0:no new bit is get
          1:new bit in
*/
/*
BYTE rds_collect_one_bit(void)
{

	static BYTE prev_state= 0;
	BYTE ret = 0;

	if(PIN_RDS_CLK)
	{
		prev_state = 1;
		
	}
	else
	{
		if(prev_state == 1)
		{

			if(RDS_DATA_SET)	
			{	
				//TUNER_CLK_SET(1);
				rds_var1.rds_buffer<<=1;
				rds_var1.rds_buffer |= 0x00000001;
			}
			else
			{
				//TUNER_CLK_SET(0);
				rds_var1.rds_buffer<<=1;
				rds_var1.rds_buffer &= 0xfffffffe;
			}
			rds_var1.rds_bit_cnt ++; 
			ret = 1;
		}
		prev_state = 0;
	}

	return ret;
} 
*/
/*
void rds_collect_data(void)
{ 
	_delay_us(10);
	if(rds_collect_one_bit())		//調用一次rds_collect_one_bit,判斷是否有新的數據收到
	{				//如果收到新的數據,則執行rds_get_data
		rds_get_data();
	}
}
*/

//INTERRUPT(SIG_INTERRUPT1)
SIGNAL(SIG_INTERRUPT1)
{
#ifdef	_DIFFER_ENCODE_
	static BYTE prev_state= 0;
	//sei();
	if(prev_state == 1){
		if (RDS_DATA_SET) {	//差分編碼,之前為高現在為高則收到0
			rds_var1.rds_buffer<<=1;
			rds_var1.rds_buffer &= 0xfffffffe;
		}else{					//差分編碼,之前為高現在為低則收到1
			rds_var1.rds_buffer<<=1;
			rds_var1.rds_buffer |= 0x00000001;	
			prev_state = 0; 
		}
	}else{
		if (RDS_DATA_SET) {	//差分編碼,之前為低現在為高則收到1
			rds_var1.rds_buffer<<=1;
			rds_var1.rds_buffer |= 0x00000001;	
		}else{					//差分編碼,之前為低現在為低則收到0
			rds_var1.rds_buffer<<=1;
			rds_var1.rds_buffer &= 0xfffffffe;
			prev_state = 0;
		}
	}
#else
	//sei();
	if (RDS_DATA_SET) {
		rds_var1.rds_buffer<<=1;
		rds_var1.rds_buffer |= 0x00000001;
	}else{
		rds_var1.rds_buffer<<=1;
		rds_var1.rds_buffer &= 0xfffffffe;
	}
#endif
	rds_var1.rds_bit_cnt++;
	rds_get_data(); //CRC
}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区思思人| 精品国产精品一区二区夜夜嗨 | 青青草成人在线观看| 国内精品嫩模私拍在线| 99麻豆久久久国产精品免费优播| 在线欧美小视频| 久久久精品国产免费观看同学| 一区二区三区中文免费| 国产综合色视频| 欧美伊人久久久久久久久影院| 久久在线观看免费| 亚洲成人自拍偷拍| 成人高清免费在线播放| 欧美在线视频全部完| 国产精品福利av| 国内精品写真在线观看| 欧美精品国产精品| 亚洲乱码日产精品bd| 国产98色在线|日韩| 欧美一区二区不卡视频| 亚洲激情校园春色| 99视频热这里只有精品免费| 久久免费视频一区| 久久精品国产**网站演员| 欧美综合亚洲图片综合区| 日韩理论在线观看| 成人黄色片在线观看| 久久久久久久久久久黄色| 久久99精品网久久| 日韩精品中文字幕一区二区三区| 午夜影视日本亚洲欧洲精品| 色网站国产精品| 亚洲精品成人天堂一二三| 99久久99久久精品免费观看| 国产精品久久久久婷婷二区次 | 亚洲综合男人的天堂| 国产福利一区二区三区视频| 欧美成人video| 精品夜夜嗨av一区二区三区| 久久久久久久一区| 成人爱爱电影网址| 亚洲欧美日韩国产成人精品影院| 一本色道久久综合亚洲aⅴ蜜桃| ●精品国产综合乱码久久久久| 91在线免费视频观看| 亚洲精品免费一二三区| 欧美日韩免费观看一区二区三区| 丝袜亚洲另类丝袜在线| 欧美一级欧美一级在线播放| 久久福利资源站| 国产亚洲欧美中文| 91麻豆6部合集magnet| 亚洲一区二区三区影院| 宅男在线国产精品| 国产精品综合一区二区三区| 国产情人综合久久777777| 丁香天五香天堂综合| 国产欧美一区二区三区在线老狼| 激情小说欧美图片| 精品视频123区在线观看| 日韩欧美的一区二区| 成人免费毛片片v| 欧美tickling挠脚心丨vk| 一区二区三区成人| 在线观看亚洲成人| 亚洲国产视频a| 色八戒一区二区三区| 有坂深雪av一区二区精品| 成人国产精品免费观看视频| 国产精品久久午夜夜伦鲁鲁| 成人午夜视频福利| 国产精品久久久久久户外露出 | 91污在线观看| 最新欧美精品一区二区三区| 成人av高清在线| 精品国产乱码久久久久久久久| 成人一区在线看| 国产精品青草久久| 97se亚洲国产综合自在线不卡| 中文字幕亚洲视频| 一区二区三区中文在线| 99国产精品99久久久久久| 亚洲九九爱视频| 精品视频一区三区九区| 同产精品九九九| 日韩欧美中文一区| 国产成人av在线影院| 免费人成黄页网站在线一区二区| 久久精品欧美日韩精品| 99久久精品免费精品国产| 亚洲国产精品影院| 欧美一卡二卡在线| 欧美视频一区二| 精品无人区卡一卡二卡三乱码免费卡| www日韩大片| 99精品久久只有精品| 亚洲v精品v日韩v欧美v专区| av午夜一区麻豆| 国产成人午夜精品影院观看视频| 亚洲欧洲无码一区二区三区| 欧美日韩大陆一区二区| 国产一区二区三区美女| 中文字幕日韩一区| 国产精品12区| 国产一区二区导航在线播放| 亚洲欧洲综合另类| 日韩久久久精品| 一本到不卡精品视频在线观看| 午夜一区二区三区在线观看| 亚洲一区二区四区蜜桃| 久久久精品tv| 国产成人精品三级麻豆| 亚洲国产成人一区二区三区| 91精品国模一区二区三区| 粉嫩av一区二区三区在线播放 | 国产精品一区二区免费不卡| 樱桃视频在线观看一区| 久久色在线观看| 91麻豆自制传媒国产之光| av电影在线观看一区| 日韩高清一级片| 一个色综合网站| 国产精品乱码人人做人人爱| 日韩欧美国产综合一区| 国产成人在线色| 欧美aaaaaa午夜精品| 一区二区三区四区视频精品免费| 亚洲精品一线二线三线无人区| 欧美亚洲国产怡红院影院| 日韩有码一区二区三区| 久久精品国产成人一区二区三区 | 91精品国产综合久久精品app| 成人av资源在线观看| 亚洲一区在线观看免费观看电影高清| 亚洲欧美日韩电影| 国产精品美日韩| 久久精品在这里| www激情久久| 老司机一区二区| 成人蜜臀av电影| 福利一区在线观看| 看电视剧不卡顿的网站| 日本欧美加勒比视频| 亚洲日本一区二区三区| 天天操天天色综合| 亚洲午夜精品在线| 亚洲国产一区视频| 亚洲一区二区三区四区的| 欧美国产精品一区二区| 亚洲高清不卡在线| 亚洲aⅴ怡春院| 亚洲成人资源在线| 日韩高清在线不卡| 亚洲在线观看免费视频| 激情av综合网| 国产剧情一区二区三区| 国产精品一区免费在线观看| 国产麻豆精品视频| 香蕉加勒比综合久久| 国产精品综合二区| 成人久久视频在线观看| av成人免费在线观看| 91小视频免费观看| 成人免费福利片| 色综合色狠狠天天综合色| 99国产精品视频免费观看| 色婷婷av一区二区三区之一色屋| 久久久久国产精品人| 久久久午夜精品理论片中文字幕| 精品欧美一区二区三区精品久久 | 日日夜夜精品视频天天综合网| 亚洲四区在线观看| 亚洲免费av高清| 国产91精品露脸国语对白| thepron国产精品| 91免费小视频| 91精品国产品国语在线不卡| 国产99久久久国产精品潘金| 欧美一区永久视频免费观看| 精品国产制服丝袜高跟| 白白色 亚洲乱淫| 欧洲亚洲国产日韩| 亚洲日本护士毛茸茸| 午夜精品一区在线观看| 久88久久88久久久| 97久久超碰国产精品电影| 国精产品一区一区三区mba视频| 亚洲五月六月丁香激情| 久久99久久99小草精品免视看| 成人黄色电影在线 | 色婷婷综合五月| 91精品国产免费久久综合| 日韩欧美久久一区| 亚洲靠逼com| 亚洲精品中文在线| 色综合久久久网| 久久精品欧美一区二区三区麻豆| 亚洲高清免费视频| 亚洲精品欧美专区| 99这里都是精品|