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

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

?? ec.asm.bak

?? blackfin中實現的AEC算法
?? BAK
字號:
/*********************************************************************************
Module Name     : .asm
Label Name      : 


   Version     Date          Author        Comments
    
   1.0         01/02/2007     HuBo      	Original 

Description     : 	This function performs FIR filter operation on given input.

Prototype       :	void	_ec(ec_handle svptr, short *pfar_end_sig, short *pnear_end_sig)

return 			:  	None                  
          
Performance		:       
*******************************************************************************/
/*Define the global data*/

.extern _updatefilt;
.section L1_code;
.global _ec;
.align 8;


_ec:
	LINK 0x30;
	[--SP] = (R7:4);        		// Save registers R4-R7 
	
	P0 = R0;						/*Address of context*/
	I0 = P0;						/*Address of s_register[0]*/
	P4 = R0;						/*Address of context*/
	M0 = 512;						/*the modification offset*/
	I0 += M0;						/*Address of s_register[256]*/
	P4 = I0;						/*Address of s_register[256]*/
	I2 = R1;						/*Address of far-end signal*/
	I3 = R2;						/*Address of near-end signal*/
	P1 = 80;						/*the frame length = 80samples*/
	P2 = 256;						/*the number of the taps*/
	R4 = 1000;						/*the threshlod of power*/
	R5 = 1600;						/*update filter coefficient per 200ms*/
	R7 = 0x7fff;
	M1 = 672;						/*the modification offset*/
	M2 = 160;
	M3 = 2;
	M0 = 4;
	
	/*update the filter coefficient*/
	LSETUP(tap_beg,tap_end) LC0 = P1>>1;
tap_beg: R0 = [I2++]; 

tap_end: [I0++] = R0;
	
	I2 -= M2;
	
	LSETUP(aec_beg,aec_end) LC1 = P1;
aec_beg:	
		R1.L = W[I2++];
		R2.L = W[I3];					/*increase I3 after this loop*/
	
		R0 = [P0+1184];					/*value of power_e*/ 
		R3 = R0 >>> 8;
		R0 = R0 - R3; 					/*Store R0*63/64 into R0*/
		R3 = R2.L*R2.L(IS);
		R3 >>>= 8;						/*Arithmetic right shift*/
		R0 = R0 + R3;
		//R0 = (A0 += R2.L*R2.L)(IS);	/*Store the power_e into R0*/
		[P0+1184] = R0;					/*Update the power_e*/
	
		R0 = [P0+1188];					/*value of power_s*/
		R3 = R0 >>> 8;
		R0 = R0 - R3;					/*Store R0*63/64 into R0*/
		R3 = R1.L*R1.L(IS);
		R3 >>>= 8;						/*Arithmetic right shift*/
		R0 = R0 + R3;
		//R0 = (A0 += R1.L*R1.L)(IS);	/*Store the power_s into R0*/
		[P0+1188] = R0;					/*Update the power_s*/
		
		CC = R0 <= R4;					/*power_s*/
		if CC JUMP modify_idx;			/*if the power of far-end signal is too low,jump to modify_idx*/
		R0 = [P0+1184];					/*load power_e*/
		CC = R0 <= R4;					
		if CC JUMP modify_idx;			/*if the power of near-end signal is too low,jump to modify_idx*/
		
		/*filter*/
		A0 = 0;
		A1 = 0;	
		I0 = P0;		
		I0 += M1;						/*Address of h[0]*/
								
		I1 = P4;						/*Address of s_register[256+i]*/	
			
		R1 = I1;						/*store address of s_register[256+i]*/
		R3 = 0x00000003;
		R3 = R1 & R3;
		CC = R3 == 0;
		if !CC JUMP	filter_1;

filter_0:			/*the address of s_register[256+i] is aligned by 4-byte */
		MNOP || R0 = [I0++] || R1.L = W[I1--];
		I1 -= M3;
		LSETUP(filter_beg_0,filter_end_0) LC0 = P2>>1;
					/*a0+=h[i++]*s[n--] */
filter_beg_0:	
		A0 += R0.L * R1.L (IS) || R1 = [I1--] || NOP;
filter_end_0:	
		A1 += R0.H * R1.H (IS) || R0 = [I0++] || NOP;		
		JUMP filter_end;
		
filter_1:		/*the address of s_register[256+i] isn't aligned by 4-byte */
		MNOP || R0 = [I0++] || I1 -= M3;
		//MNOP || R0 = [I0++] || R1.H = [I1--];
		R1 = [I1--];
		LSETUP(filter_beg_1,filter_beg_1) LC0 = P2>>1;
					/*a0+=h[i++]*s[n--];*/	
filter_beg_1: A0 += R0.L * R1.H , A1 += R0.H * R1.L(IS) || R0 = [I0++] || R1 = [I1--];

filter_end:

		A0 = A0 >>> 15;				//h(k) is Q15;
		A1 = A1 >>> 15;
		R0 = A0, R1 = A1;
		R3 = R0 + R1;				/*The output of filter*/
		//R2.L = W[I3];				/*Load signal value into R2*/
		R2 = R2.L(X);				/*sign extended*/
		R2 = R2 - R3;				/*Subtract the echo signal*/
		//R2 = R2.L(X);				/*R2 is the signal which has been taken out the echo*/
		W[I3] = R2.L;				/*store the R2*/
		
		R2 = [P0+1184];				/*the power of echo*/
		R0 = R2 >>> 2;				/*R0 is one fourth of R2*/ 
		R3 = [P0+1188];				/*The power of signal*/
		CC = R3 <= R0;				/*Double talk*/
		if CC JUMP double_talk;
									/*single talk*/
		R3 = W[P0+1194];			/*talk_status*/
		CC = R3 == 0; 
		if CC JUMP talk_status;		/*if talk_status == 1 ,set talk_status=0,st_count=1*/
		R3 = 0;
		W[P0+1194] = R3;
		R3 = 1;
		W[P0+1192] = R3;
		
talk_status:		
		R3 = W[P0+1192];			/*st_count*/
		CC = R5 <= R3;				/*if R3 == 1600; update filter coefficient*/
		if CC JUMP update_filter;	
		R3 += 1;
		W[P0+1192] = R3;			/*increase the st_count*/
		JUMP modify_idx;			/*end this loop*/

double_talk:
		R3 = 1;
		W[P0+1194] = R3;	
		JUMP modify_idx;			/*End this loop*/
			
update_filter:	
		R1.L = 0;
		R1.H = 0x8;					/*R1 is the positive threshold*/
		R0.L = 0x0;
		R0.H = 0xFFF8;				/*R0 is the negative threshold*/
		R3 = [P0+1188];				/*load power_s*/ 
		CC = R1 <= R3;
		IF CC JUMP shift_1; 
		CC = R3 <= R0;
		IF CC JUMP shift_1;
		R3 = R3 >>> 5;				/*Arithmetic right shift*/
		R2.L = W[I3];				/*Load R2*/
		R2 = R2.L(X);
		R2 = R2 << 15(S);			/*Arithmetic left shift*/
		P3 = 16;                	/*Loop counter for division */
		DIVS(R2, R3);            	/*To reset the AQ flag */

    	LSETUP(DIV_ST0,DIV_ST0) LC0 = P3;
DIV_ST0: 
		DIVQ(R2,R3);        		/*Do divq 16 times */
		R2 = R2.L(X);				/*sign extended*/	
		JUMP div_end;
shift_1:
		R1.L = 0;
		R1.H = 0x80;				/*R1 is the positive threshold*/
		R0.L = 0;
		R0.H = 0xFF80;				/*R0 is the negative threshold*/
		R3 = [P0+1188];				/*Load power_s*/
		
		CC = R1 <= R3;
		IF CC JUMP shift_2; 
		CC = R3 <= R0;
		IF CC JUMP shift_2;
		
		R3 = R3 >>> 9;				/*Arithmetic right shift*/
		R2.L = W[I3];				/*Load R2*/
		R2 = R2.L(X);
		R2 = R2 << 11(S);			/*Arithmetic left shift*/
		P3 = 16;                	/*Loop counter for division */
		
		DIVS(R2, R3);            	/*To reset the AQ flag */
    	LSETUP(DIV_ST1,DIV_ST1) LC0 = P3;
DIV_ST1: 
		DIVQ(R2,R3);        		/*Do divq 16 times */
		R2 = R2.L(X);				/*sign extended*/	
		JUMP div_end;

shift_2:
		R3 = [P0+1188];				/*load power_s*/
		R3 = R3 >>> 13;				/*Arithmetic right shift*/
		R2.L = W[I3];				/*Load R2*/
		R2 = R2.L(X);
		R2 = R2 << 7(S);			/*Arithmetic left shift*/
		P3 = 16;                	/*Loop counter for division */
		
		DIVS(R2, R3);            	/*To reset the AQ flag */
    	LSETUP(DIV_ST2,DIV_ST2) LC0 = P3;
DIV_ST2: 
		DIVQ(R2,R3);        		/*Do divq 16 times */
		R2 = R2.L(X);				/*sign extended*/	
		
div_end:
		R6 = I2;					//store I2
		I0 = P0;		
		I0 += M1;					/*Address of h[0]*/
		I2 = I0;
		R0 = [I0++];
		R1 = P4;					/*Load R1, address of s_register[256+i]*/
		I1 = R1;
		R3 = 0x00000003;
		R3 = R1 & R3;
		CC = R3 == 0;
		if !CC JUMP	update_1;

update_0:	

	/*initiate a0, a1 and R3, a0 and a1 left ashift 15*/
	R1.L = W[I1--]; 
	LSETUP(update_coef_beg_0, update_coef_end_0) LC0 = P2>>1;	
update_coef_beg_0:	A0 = R0.L * R7.L, A1 = R0.H * R7.L || R1.H = W[I1--] ;	/*a0 and a1 left shift 16 bit*/

/*the high half of the result is extracted and stored in the 16-bit destination registers */
					R0.L = (A0 += R2.L * R1.L) , R0.H = (A1 += R2.L * R1.H) || R1.L = W[I1--];
update_coef_end_0:	MNOP ||[I2++M0] = R0 || R0 = [I0++M0];//store R0 and increase I0;
	jump modify_idx;

update_1:

/*the address of s_register[256+i] isn't aligned by 4-byte */	
	I1 -= M3;
	LSETUP(update_coef_beg_1, update_coef_end_1) LC0 = P2>>1;
update_coef_beg_1:	A0 = R0.L * R7.L, A1 = R0.H * R7.L || R1 = [I1--] ;/*a0 and a1 left shift 16 bit*/

/*the high half of the result is extracted and stored in the 16-bit destination registers */
					
					R0.L = (A0 += R2.L * R1.H), R0.H = (A1 += R2.L * R1.L);// || R1.L = W[I1--];
update_coef_end_1:	MNOP || [I4++M0]=R0 || R0 = [I0++M0];//store R0 and increase I0;

modify_idx:	
		I3 += M3;
		I2 = R6;	//load I2;
aec_end: P4 +=2 ;//|| I3 += M3 ;					/*increase P4 each loop*/

	/*reserve the s_register for next time*/
	I0 = P0;
	I1 = P0;
	I1 += M2;
	
	LSETUP(tap_update_beg,tap_update_end) LC0 = P2>>1;
tap_update_beg: R0 = [I1++]; 

tap_update_end: [I0++] = R0;

	(R7:4) = [SP++];        		// Load registers R4-R7 

	UNLINK;
	RTS;

_ec.end:
                             
	
	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产精品99久久久久久| 一区二区三区不卡在线观看 | 91在线国内视频| 精品久久免费看| 美女www一区二区| 91浏览器入口在线观看| 性欧美大战久久久久久久久| 在线视频国内自拍亚洲视频| 一区二区三区精品久久久| 91麻豆精品一区二区三区| 亚洲女性喷水在线观看一区| 91网站最新地址| 国产亚洲欧美日韩在线一区| 国产一区二区三区最好精华液| 精品国产网站在线观看| 久久福利视频一区二区| 精品福利一二区| 免费精品视频最新在线| 精品国产青草久久久久福利| 激情综合网av| 久久精品视频一区二区三区| 风流少妇一区二区| 中文字幕一区二区三中文字幕| 99精品视频一区二区| 亚洲综合一区二区三区| 欧美久久久久久蜜桃| 乱一区二区av| 国产精品麻豆视频| 国产高清不卡一区二区| 国产精品理论片在线观看| 91小视频免费观看| 亚洲gay无套男同| 精品处破学生在线二十三| 日本人妖一区二区| 国产亚洲欧美在线| 在线视频中文字幕一区二区| 日韩精品成人一区二区在线| 久久久美女艺术照精彩视频福利播放| 五月婷婷激情综合| 久久亚洲影视婷婷| 91看片淫黄大片一级在线观看| 亚洲成人第一页| 久久久久久久久一| 波多野结衣91| 青青草国产成人99久久| 国产欧美日韩三级| 欧美美女喷水视频| 国产精品91xxx| 亚洲一区二区三区小说| 久久午夜免费电影| 在线这里只有精品| 国产精品自拍三区| 亚洲高清免费视频| 久久免费美女视频| 欧美日韩在线播放三区四区| 国产成人综合精品三级| 一级女性全黄久久生活片免费| 精品国产99国产精品| 91国在线观看| 粉嫩蜜臀av国产精品网站| 日日骚欧美日韩| 日韩精品一区国产麻豆| 在线观看国产91| 成人亚洲精品久久久久软件| 免费成人美女在线观看| 亚洲裸体xxx| 欧美成人女星排行榜| 在线观看日韩电影| eeuss鲁片一区二区三区在线观看| 石原莉奈在线亚洲三区| 久久精品亚洲精品国产欧美kt∨| 69堂精品视频| 在线观看日产精品| 99久久婷婷国产综合精品| 免费日韩伦理电影| 亚洲成av人片一区二区梦乃 | 欧美一区二区三区性视频| 99精品在线观看视频| 国内精品伊人久久久久av影院 | 国产91精品欧美| 日韩综合在线视频| 亚洲欧美偷拍卡通变态| 国产日本欧洲亚洲| 精品成人一区二区三区| 日本韩国欧美一区二区三区| 成人爱爱电影网址| 国产成人在线视频网址| 国产电影一区在线| 精品一区二区免费| 全部av―极品视觉盛宴亚洲| 亚洲一区二区三区四区在线 | 91精品国产综合久久精品app | 欧亚洲嫩模精品一区三区| 欧美这里有精品| 欧美剧情片在线观看| 欧美大片顶级少妇| 久久久午夜精品| 亚洲天堂成人在线观看| 亚洲女爱视频在线| 亚洲不卡av一区二区三区| 日韩高清在线观看| 久久99国产精品免费| 国产精品亚洲а∨天堂免在线| 丁香另类激情小说| 91精品办公室少妇高潮对白| 91超碰这里只有精品国产| 精品美女在线播放| 中文字幕中文字幕在线一区| 亚洲午夜视频在线观看| 丝袜美腿一区二区三区| 国产成人自拍高清视频在线免费播放| 不卡的av电影| 欧美精品久久久久久久久老牛影院| 91精品国产品国语在线不卡| 欧美精品一区男女天堂| 国产精品成人午夜| 午夜精品久久久久久不卡8050| 免费成人在线影院| 99在线精品免费| 51精品视频一区二区三区| 久久久国际精品| 自拍偷在线精品自拍偷无码专区| 天天影视涩香欲综合网| 国产成人免费网站| 在线观看日韩av先锋影音电影院| 日韩精品中文字幕在线一区| 亚洲免费在线看| 毛片一区二区三区| 99这里只有久久精品视频| 51精品视频一区二区三区| 一区免费观看视频| 精品午夜久久福利影院| 一本色道**综合亚洲精品蜜桃冫| 日韩精品专区在线| 亚洲国产视频一区| 成人丝袜18视频在线观看| 欧美一区二区视频在线观看2022| 国产精品成人在线观看| 韩国成人在线视频| 欧美日韩激情在线| 亚洲视频一区二区在线| 国内精品伊人久久久久影院对白| 欧美日韩国产精选| 亚洲男同性恋视频| 成人激情文学综合网| 久久先锋影音av鲁色资源| 日韩国产高清影视| 欧美三级中文字| 亚洲九九爱视频| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产精品另类一区| 九九九久久久精品| 日韩欧美在线123| 日韩激情视频网站| 欧美色网一区二区| 亚洲欧洲av一区二区三区久久| 久久久久国产精品麻豆| 在线观看欧美黄色| 亚洲青青青在线视频| 懂色av中文一区二区三区| 精品国产乱码久久久久久久久| 亚洲国产日日夜夜| 欧美图片一区二区三区| 亚洲午夜久久久| 91精品1区2区| 亚洲第一激情av| 在线播放日韩导航| 日韩精品免费视频人成| 欧美精品久久久久久久多人混战 | 伊人婷婷欧美激情| 在线观看欧美黄色| 亚州成人在线电影| 337p亚洲精品色噜噜狠狠| 午夜精品久久久久影视| 在线不卡的av| 久久99精品国产91久久来源| 久久亚洲春色中文字幕久久久| 国产白丝网站精品污在线入口| 国产精品色一区二区三区| 国产一区二区不卡| 欧美极品美女视频| 91啪亚洲精品| 亚洲成人资源网| 欧美一区二区日韩| 美洲天堂一区二卡三卡四卡视频| 欧美高清激情brazzers| 日韩精品久久久久久| 精品国产欧美一区二区| 韩国精品主播一区二区在线观看| 欧美xxx久久| 99久久久精品| 亚洲精品欧美激情| 色素色在线综合| 蜜臀精品一区二区三区在线观看| 777久久久精品| 寂寞少妇一区二区三区| 18成人在线视频| 欧美少妇性性性| 免费看黄色91| 亚洲天堂久久久久久久|