⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c5_2_2.dsp

📁 dsp入门与实践一书的源代码
💻 DSP
📖 第 1 页 / 共 2 页
字号:
.MODULE  		SP;             		
.CONST    		N=H#040;																{64个数据}
.VAR/DM/RAM 	W_INPUT [N], RR_INPUT [N];
.VAR/DM/RAM 	R_INPUT [N], Y_INPUT [N+2];

.INIT           	W_INPUT: <W0.C>			
.INIT           	RR_INPUT: <RR0.C>		
.INIT           	R_INPUT: <R0.C>			
.INIT           	Y_INPUT: <Y.C> 			

.VAR/DM/RAM  	et_int, et_fra, eit2_int, eit2_fra;
.VAR/DM/RAM  	eit_int, eit_fra, eit1_int, eit1_fra;
.VAR/DM/RAM  	at_int, at_fra, at1_int, at1_fra;
.VAR/DM/RAM  	nt_int, nt_fra, a_low, 	a_high;
.VAR/DM/RAM  	eft2_int, eft2_fra,eft1_int, eft1_fra;
.VAR/DM/RAM  	eft_int, eft_fra, yft2_int, yft2_fra;
.VAR/DM/RAM  	yft1_int, yft1_fra,yft_int,yft_fra;
.VAR/DM/RAM  	pt_int, pt_fra, pt1_int, pt1_fra;
.VAR/DM/RAM  	yt1_int, yt1_fra, yt2_int, yt2_fra;
.VAR/DM/RAM  	yt_int, yt_fra, temp_int, temp_fra;
.VAR/DM/RAM  	mt_int, mt_fra, rrt,	wt;
.VAR/DM/RAM  	res_int, res_fra, rt, 	xx;
.VAR/DM/RAM  	temp1_int, temp1_fra;

.PORT          	a_out																					{输出文件}

				JUMP START; NOP; NOP; NOP;																																{中断处理}
                        	RTI; NOP; NOP; NOP;																	{屏蔽未使用的中断}
						RTI; NOP; NOP; NOP;
						RTI; NOP; NOP; NOP;
						RTI; NOP; NOP; NOP;
						RTI; NOP; NOP; NOP;
						RTI; NOP; NOP; NOP;

START:
				ar =0; 	dm(at1_int)=ar;  dm(at1_fra)=ar;
				ar =0; 	dm(eit1_int)=ar; dm(eit1_fra)=ar;
				ar =0; 	dm(eit2_int)=ar; dm(eit2_fra)=ar;
				ar =0; 	dm(eft2_int)=ar; dm(eft2_fra)=ar;
				ar =0; 	dm(eft1_int)=ar; dm(eft1_fra)=ar;
				ar =0; 	dm(yft2_int)=ar; dm(yft2_fra)=ar;
				ar =0; 	dm(yft1_int)=ar; dm(yft1_fra)=ar;

				I4=^Y_INPUT;				
				L4=0;
				M4=1;
				CNTR=N+2;				
				AX0=0;	AX1=0;	AY1=0;
				
				DO LOOP1 UNTIL CE;           		
				MX0=DM (I4, M4);																{I4指向数据y的首地址}
				MY0=MX0;
				MR=MX0*MY0 (SS);																			{ y为有符号数据}
				AY0=MR1;
				AR=AX0+AY0;																				{做平方和的累加}
				AX0=AR;		
				DM (A_LOW)=AR;																				{累加值的低16位}
				AR=AX1+AY1+C;																				{进位加到高16位}
				DM (A_HIGH) =AR;
				AX1=AR;																					{ AX1保存累加值的高16位}
				
LOOP:
				NOP;
				si =dm(a_low);
				sr=lshift si by –6(lo);          																	{除以64}
				si =dm(a_high);
				sr=sr or ashift si by –6(hi);     																	{求出平均值}
				ay1=h#064;                 																		{被除数和除数均为1.15格式 }
				ax0=sr0;                    																		{100/sr0,使用双精度除法 }
				si =ax0;
				sr=lshift si by 1(lo);     		
				ay0=sr0;
				si =ay1;
				sr=lshift si by 1(lo);  		
				se =-15;
				sr1=0;
				mr0=0;
				mr1=0;
				ay1=0;
			 
			
			
			
			
				AF=PASS SR1;
				SI=SR0, AR=SR1 XOR AY1;			
				AX1=AR;					
				SR=LSHIFT MR0 BY 1(LO);			
				SR=SR OR LSHIFT MR1 BY 1(HI);
				SR=SR OR LSHIFT AR (LO);		
				AR=PASS AF;                      	
				MR0=SR0;
				MR1=SR1, SR=LSHIFT MR1 (LO);
				SR=SR OR LSHIFT SI BY 1(LO);
				SR=SR OR LSHIFT AR BY 1(HI);
				CNTR=31;
				AX0=AY1;
				DO ddivu1 UNTIL CE;
				AR=ABS AX1;				
				IF POS JUMP aqz1;			
				AR=SR0+AY0;				
				SI=AR, AF=SR1+AY1+C;			
				JUMP ddivi1;
aqz1:           		AR=SR0-AY0;
				SI=AR, AF=SR1-AY1+C-1;
ddivi1:				SR=LSHIFT MR0 BY 1(LO); 		
				SR=SR OR LSHIFT MR1 BY 1(HI);
				AR=AX0 XOR AF;				
				AX1=AR;					
				AR=NOT AX1;
				SR= SR OR LSHIFT AR (LO);		
				MR0=SR0, AR=PASS AF;
				MR1=SR1, SR= LSHIFT MR1 (LO);
				SR= SR OR LSHIFT SI BY 1 (LO);
ddivu1:				SR= SR OR LSHIFT AR BY 1 (HI);
				
				dm(pt1_fra)=mr0; 	                
				dm(pt1_int)=mr1;			
				
				IO=^R_INPUT; 		 L0=0;		
				I1=^Y_INPUT;  	 L1=0; 			
				I2=^W_INPUT;  	 L2=0; 			
				I3=^RR_INPUT;  	 L3=0; 			
				M0=0;			 M1=-1;
				CNTR=N;
				do loop2 until ce;
				
				ax0=dm(i0,m0);       			
				si =ax0;				
				sr =lshift si by 1(lo);
				dm (rt)=sr0;
				ax0=dm (i2,m0); 			
				si =ax0;
				sr =lshift si by 1(lo);
				dm (wt)=sr0;
				ax0=dm (i3, m0); 			
				si =ax0;
				sr =lshift si by 1(lo);
				dm (rrt)=sr0;
				
				ay0=h#08000;				
				ay1=h#0ffff;
				ax1=0;
				ax0=dm (i1,m0);
				ar =ax0+ay0;
				if not ac jump csp1;
				dm (yt2_int)=ay1;
				si =ax0;
				sr =lshift si by 1(lo);
				dm (yt2_fra)=sr0;
				jump sp1;
	csp1:			dm(yt2_int)=ax1;    		        
				si =ax0;
				sr =lshift si by 1(lo);
				dm (yt2_fra)=sr0;
	sp1:			ax0=dm(i1,m0);     	     	        
				ar =ax0+ay0;
				if not ac jump csp2;
				dm(yt1_int)=ay1;
				si=ax0;
				sr=lshift si by 1(lo);
				dm (yt1_fra)=sr0;
				jump sp2;
	csp2:			dm (yt1_int)=ax1;
				si =ax0;
				sr =lshift si by 1(lo);
				dm (yt1_fra)=sr0;
	sp2:			ax0=dm(i1,m1);                    	
				ar =ax0+ay0;
				if not ac jump csp3;
				dm (yt_int)=ay1;
				si =ax0;
				sr =lshift si by 1(lo);
				dm (yt_fra)=sr0;
				jump sp3;
	csp3:			dm (yt_int)=ax1;
				si =ax0;
				sr =lshift si by 1(lo);
				dm (yt_fra)=sr0;			
	sp3:			mx0=dm (rt);  mx1=0;
				my0=dm (eit1_fra); my1=dm(eit1_int);
				 
				call dpm; 
				ay0=dm (yt1_fra);
				ay1=dm (yt1_int);
				ax0=dm (res_fra);
				ax1=dm (res_int);
				ar =ax0-ay0;
                  		dm (mt_fra)=ar;
				ar =ax1-ay1+c-1;
				dm (mt_int)=ar;				
				
				mx0=dm (rrt); mx1=0;
				my0=dm (eit2_fra); my1=dm(eit2_int);
				 
				call dpm;
				ay0=dm (res_fra);
				ay1=dm (res_int);
				ax0=dm (yt2_fra);
				ax1=dm (yt2_int);
				ar =ax0-ay0;
				dm (temp_fra)=ar;
				ar =ax1-ay1+c-1;
				dm (temp_int)=ar;

				ax0=dm (yt_fra);
				ax1=dm (yt_int);
				ay0=dm (temp_fra);
				ay1=dm (temp_int);
				ar=ax0+ay0;
				dm(temp_fra)=ar;
				ar=ax1+ay1+c;
				dm(temp_int)=ar;
				
				mx0=dm(mt_fra); mx1= dm(mt_int);
				my0=dm(at1_fra); my1=dm(at1_int);
				 
				call dpm;				
				ax0=dm(temp_fra);
				ax1=dm(temp_int);
				ay0=dm(res_fra);
				ay1=dm(res_int);
				ar=ax0-ay0;
				dm(et_fra)=ar;
				ar=ax1-ay1+c-1;
				dm(et_int)=ar;				
				
				mx0=dm(rt_fra); mx1= 0;
				my0=dm(eft1_fra); my1=dm(eft1_int);
				 
				call dpm;
				ay0=dm(yft1_fra);
				ay1=dm(yft1_int);
				ax0=dm(res_fra);
				ax1=dm(res_int);
				ar=ax0-ay0;
				dm(nt_fra)=ar;
				ar=ax1-ay1+c-1;
				dm(nt_int)=ar;				
				
				mx0=dm(nt_fra); mx1= dm(nt_int);
				my0=dm(nt_fra); my1=dm(nt_int);
				 
				call dpm;
				mx0=dm(res_fra); mx1= dm(res_int);
				my0=dm(pt1_fra); my1=dm(pt1_int);
				 
				call dpm;
				ay0=dm(wt);
				ay1=0;
				ax0=dm(res_fra);
				ax1=dm(res_int);
				ar=ax0+ay0;
				dm(temp_fra)=ar;
				ar=ax1+ay1+c;
				dm(temp_int)=ar;
				
				si=dm(pt1_int);
				sr=lshift si by 1(lo);

				se=-15;
				sr1=0;
				mr0=0;
				mr1= dm(pt1_fra);
				ay1= dm(temp_int);
				ay0= dm(temp_fra);
					
ddivs:				AF=PASS SR1;                     
				SI=SR0, AR=SR1 XOR AY1;
				AX1=AR;
				SR=LSHIFT MR0 BY 1(LO);
				SR=SR OR LSHIFT MR1 BY 1(HI);
				SR=SR OR LSHIFT AR (LO);
				AR=PASS AF;                      
				MR0=SR0;
				MR1=SR1, SR=LSHIFT MR1 (LO);
				SR=SR OR LSHIFT SI BY 1(LO);
				SR=SR OR LSHIFT AR BY 1(LO);
				CNTR=31;
				AX0=AY1;
				DO ddivu UNTIL CE;
				AR=ABS AX1;
				IF POS JUMP aqz;
				AR=SR0+AY0;
				SI=AR, AF=SR1+AY1+C;
				JUMP ddivi;
aqz:           			AR=SR0-AY0;
				SI=AR, AF=SR1-AY1+C-1;
ddivi:				SR=LSHIFT MR0 BY 1(LO);
				SR=SR OR LSHIFT MR1 BY 1(HI);
				AR=AX0 XOR AF;
				AX1=AR;
				AR=NOT AX1;
				SR= SR OR LSHIFT AR (LO);
				MR0=SR0, AR=PASS AF;
				MR1=SR1, SR= LSHIFT MR1 (LO);
				SR= SR OR LSHIFT SI BY 1 (LO);
ddivu:				SR= SR OR LSHIFT AR BY 1 (HI);
				
                  		dm(pt_fra)=mr0; dm(pt_int)=mr1;
				ax0=h#0ffff;
				ay0=dm(pt1_int);
				ar=ax0+ay0;
				if ac jump qqq;
				si=mr0;
				sr=lshift si by 1()lo;
				dm(pt_fra)=sr0;
qqq:				mx0=dm(pt_fra); mx1= dm(pt_int);
				my0=dm(nt_fra); my1=dm(nt_int);
				 
				call dpm;
				mx0=dm(res_fra); mx1= dm(res_int);
				my0=dm(et_fra); my1=dm(et_int);
				 
				call dpm;
				ay0=dm(at1_fra);
				ay1=dm(at1_int);
				ax0=dm(res_fra);
				ax1=dm(res_int);
				ar=ax0+ay0;
				dm(at_fra)=ar;
				ar=ax1+ay1+c-1;
				dm(at_int)=ar;				
				
				mx0=dm(eit2_fra); mx1= dm(eit2_int);
				my0=dm(rrt); my1=0;
				 
				call dpm;
				ax0=dm(res_fra);
				ax1=dm(res_int);
				dm(temp_fra)=ax0;
				dm(temp_int)=ax1;

				mx0=dm(mt_fra); mx1= dm(mt_int);
				my0=dm(at_fra); my1=dm(at_int);
				 
				call dpm;
				ax0=dm(temp1_fra);
				ax1=dm(temp1_int);
				ay0=dm(res_fra);
				ay1=dm(res_int);
				ar=ax0+ay0;
				dm(temp_fra)=ar;
				ar=ax1+ay1+c;
				dm(temp_int)=ar;
				ax0=dm(yt_fra);
				ax1=dm(yt_int);
				ay0=dm(temp_fra);
				ay1=dm(temp_int);
				ar=ax0-ay0;
				dm(eiy_fra)=ar;
				ar=ax1-ay1+c-1;
				dm(eit_int)=ar;
				ax0=dm(eit_fra);
				ax1=dm(eit_int);
				ay0=dm(yt2_fra);
				ay1=dm(yt2_int);
				ar=ax0+ay0;
				dm(eit_fra)=ar;
				ar=ax1+ay1+c;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -