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

📄 c4_6_3.asm

📁 dsp入门与实践一书的源代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	.WORD   00C9A4H,   0079D4H,   00C23CH,   0035DBH,   0086AFH,   003D3FH
	.WORD   00CAABH,   0078CAH,   00C34AH,   0034CAH,   0087C3H,   003C28H
	.WORD   00CBC6H,   0077ABH,   00C46BH,   0033A5H,   0088EBH,   003AFDH
	.WORD   00CCF4H,   00767AH,   00C5A0H,   00326DH,   008A26H,   0039BEH
	.WORD   00CE36H,   007535H,   00C6E8H,   003122H,   008B75H,   00386DH
	.WORD   00CF8BH,   0073DDH,   00C843H,   002FC4H,   008CD6H,   003708H
	.WORD   00D0F2H,   007273H,   00C9B1H,   002E54H,   008E49H,   003592H
	.WORD   00D26BH,   0070F6H,   00CB30H,   002CD1H,   008FCFH,   00340AH
	.WORD   00D3F7H,   006F68H,   00CCC1H,   002B3DH,   009166H,   003270H
	.WORD   00D593H,   006DC8H,   00CE64H,   002998H,   00930EH,   0030C5H
	.WORD   00D741H,   006C18H,   00D017H,   0027E2H,   0094C7H,   002F09H
	.WORD   00D900H,   006A57H,   00D1DBH,   00261BH,   009690H,   002D3DH
	.WORD   00DACEH,   006885H,   00D3AFH,   002444H,   009869H,   002B61H
	.WORD   00DCADH,   0066A4H,   00D593H,   00225EH,   009A52H,   002976H
	.WORD   00DE9BH,   0064B4H,   00D785H,   002069H,   009C4AH,   00277CH
	.WORD   00E097H,   0062B5H,   00D987H,   001E65H,   009E50H,   002573H
	.WORD   00E2A2H,   0060A8H,   00DB96H,   001C54H,   00A064H,   00235DH
	.WORD   00E4BAH,   005E8DH,   00DDB3H,   001A34H,   00A285H,   002139H
	.WORD   00E6E0H,   005C65H,   00DFDDH,   001808H,   00A4B4H,   001F09H
	.WORD   00E913H,   005A31H,   00E214H,   0015CFH,   00A6EEH,   001CCCH
	.WORD   00EB51H,   0057F0H,   00E456H,   00138BH,   00A935H,   001A84H
	.WORD   00ED9CH,   0055A4H,   00E6A4H,   00113BH,   00AB86H,   001831H
	.WORD   00EFF1H,   00534DH,   00E8FDH,   000EE1H,   00ADE2H,   0015D3H
	.WORD   00F250H,   0050ECH,   00EB60H,   000C7CH,   00B049H,   00136BH
	.WORD   00F4BAH,   004E81H,   00EDCCH,   000A0EH,   00B2B8H,   0010FAH
	.WORD   00F72CH,   004C0DH,   00F042H,   000797H,   00B531H,   000E80H
	.WORD   00F9A7H,   004990H,   00F2C0H,   000518H,   00B7B1H,   000BFEH
	.WORD   00FC2BH,   00470CH,   00F545H,   000291H,   00BA39H,   000975H
	.WORD   00FEB5H,      004480H,      00F7D2H,      000003H

data_output .usect "data_out",1024

	.text                               			
	.asg AR1,FFT_TWID_P        
MAIN:	
	LD	#FFT_DP,DP
	STM #SYSTEM_STACK,SP
rfft_task:
	STM  #FFT_ORIGIN,AR3 					
	STM  #data_input,AR4 
	RPT	 #K_FFT_SIZE*2-1
	MVDD *AR4+,*AR3+
	CALL  bit_rev
	CALL  fft
	CALL  unpack
	CALLD power   
	STM   #K_ST1,ST1 					
	NOP  
	STM   19FAH,AR6   
	NOP
    XOR    A,A 
    NOP
    ;RPT   #10
    STL   A,*AR6+
    STL   A,*AR6+
    STL   A,*AR6+
    STL   A,*AR6+
    STL   A,*AR6+
    STL   A,*AR6+
    STL   A,*AR6+
    STL   A,*AR6+
    STL   A,*AR6+
    STL   A,*AR6+  
    STL   A,*AR6+       
	;CALL  find
loop:
    B    loop	 					
											
	NOP
	NOP
	NOP
	RET 					
        

	.asg AR2,REORDERED_DATA
	.asg AR3,ORIGINAL_INPUT
	.asg AR7,DATA_PROC_BUF
	.def  bit_rev

bit_rev:
	SSBX FRCT 

	STM #FFT_ORIGIN,ORIGINAL_INPUT 		
	STM #fft_data,DATA_PROC_BUF 		
	MVMM DATA_PROC_BUF,REORDERED_DATA 	
	STM #K_FFT_SIZE-1,BRC
	RPTBD bit_rev_end-1
	STM #K_FFT_SIZE,AR0 					
	MVDD *ORIGINAL_INPUT+,*REORDERED_DATA+
	MVDD *ORIGINAL_INPUT-,*REORDERED_DATA+
	MAR *ORIGINAL_INPUT+0B
bit_rev_end:
	RET 							
	
								
 	.asg AR1,GROUP_COUNTER
	.asg AR2,PX
	.asg AR3,QX
	.asg AR4,WR
	.asg AR5,WI
	.asg AR6,BUTTERFLY_COUNTER
	.asg AR7,DATA_PROC_BUF				
	.asg AR7,STAGE_COUNTER
	.def  fft
fft:
							
	STM #K_ZERO_BK,BK 				
	LD #-1,ASM 					
	MVMM DATA_PROC_BUF,PX 				
	LD *PX,A
	STM #fft_data+K_DATA_IDX_1,QX 			
	STM #K_FFT_SIZE/2-1,BRC
	RPTBD stage1end-1
	STM #K_DATA_IDX_1+1,AR0
	SUB *QX,16,A,B 					
	ADD *QX,16,A 					
	STH A,ASM,*PX+ 					
	ST B,*QX+ 					
	||LD *PX,A 					
	SUB *QX,16,A,B 					
	ADD *QX,16,A 					
	STH A,ASM,*PX+0 				
	ST B,*QX+0% 					
	||LD *PX,A 					 
stage1end:
							
	MVMM DATA_PROC_BUF,PX 				
	STM #fft_data+K_DATA_IDX_2,QX 			
	STM #K_FFT_SIZE/4-1,BRC
	LD *PX,A 					
	RPTBD stage2end-1
	STM #K_DATA_IDX_2+1,AR0          
	SUB *QX,16,A,B 				  	
	ADD *QX,16,A 					
	STH A,ASM,*PX+ 					
	ST B,*QX+ 					
	||LD *PX,A 					
	SUB *QX,16,A,B 					
	ADD *QX,16,A 					
	STH A,ASM,*PX+ 					
	STH B,ASM,*QX+ 					

	MAR *QX+
	ADD *PX,*QX,A 					
	SUB *PX,*QX-,B 				
	STH A,ASM,*PX+ 				
	SUB *PX,*QX,A 				
	ST B,*QX 				
	||LD *QX+,B 				
	ST A, *PX 				
	||ADD *PX+0%,A 				
	ST A,*QX+0% 				
	||LD *PX,A 				
stage2end:
						
	STM #K_TWID_TBL_SIZE,BK 		
	ST #K_TWID_IDX_3,d_twid_idx 		
	STM #K_TWID_IDX_3,AR0 			
	STM #cosine,WR 				
	STM #sine,WI 				
	STM #K_LOGN-2-1,STAGE_COUNTER 		
	ST #K_FFT_SIZE/8-1,d_grps_cnt 		
	STM #K_FLY_COUNT_3-1,BUTTERFLY_COUNTER 	
	ST #K_DATA_IDX_3,d_data_idx 	   	
stage:
	STM #fft_data,PX 			
	LD d_data_idx, A
	ADD *(PX),A
	STLM A,QX 				
	MVDK d_grps_cnt,GROUP_COUNTER		

group:
	MVMD BUTTERFLY_COUNTER,BRC	
	RPTBD butterflyend-1
	LD *WR,T 				
	MPY *QX+,A 				
	MACR *WI+0%,*QX-,A 			
	ADD *PX,16,A,B 				
	ST B,*PX 				
	||SUB *PX+,B 				
	ST B,*QX 				
	||MPY *QX+,A				
	MASR *QX,*WR+0%,A 			
	ADD *PX,16,A,B 				
	ST B,*QX+ 				
	||SUB *PX,B 				
	LD *WR,T 				
	ST B,*PX+ 				
	||MPY *QX+,A 				
butterflyend:
						
	PSHM AR0 				
	MVDK d_data_idx,AR0
	MAR *PX+0 				
	MAR *QX+0 				
	BANZD group,*GROUP_COUNTER-
	POPM AR0 				
	MAR *QX-

	LD d_data_idx,A
	SUB #1,A,B 					
	STLM B,BUTTERFLY_COUNTER 			
	STL A,1,d_data_idx
	LD d_grps_cnt,A
	STL A,ASM,d_grps_cnt 				
	LD d_twid_idx,A
	STL A,ASM,d_twid_idx 				
	BANZD stage,*STAGE_COUNTER-
	MVDK d_twid_idx,AR0 				
fft_end:
	RET 						

							
	.def  unpack

unpack:
							
	.asg AR2,XP_k
	.asg AR3,XP_Nminusk
	.asg AR6,XM_k
	.asg AR7,XM_Nminusk 

	STM #fft_data+2,XP_k 				
	STM #fft_data+2*K_FFT_SIZE-2,XP_Nminusk 	
	STM #fft_data+2*K_FFT_SIZE+3,XM_Nminusk 	
	STM #fft_data+4*K_FFT_SIZE-1,XM_k 		
	STM #-2+K_FFT_SIZE/2,BRC
	RPTBD phase3end-1
	STM #3,AR0
	ADD *XP_k,*XP_Nminusk,A 			
	SUB *XP_k,*XP_Nminusk,B 			
	STH A,ASM,*XP_k+ 				
	STH A,ASM,*XP_Nminusk+ 				
	STH B,ASM,*XM_k- 				
	NEG B 						
	STH B,ASM,*XM_Nminusk- 				
	ADD *XP_k,*XP_Nminusk,A 			
	SUB *XP_k,*XP_Nminusk,B 			
	STH A,ASM,*XP_k+ 				
	STH A,ASM,*XP_Nminusk-0 			
	STH B,ASM,*XM_k- 				
	NEG B 						
	STH B,ASM,*XM_Nminusk+0 			
phase3end:
	ST #0,*XM_k- 					
	ST #0,*XM_k 					
; 计算AR[0],AI[0], AR[N], AI[N]
	.asg AR2,AX_k
	.asg AR4,IP_0
	.asg AR5,AX_N
	STM #fft_data,AX_k 				
	STM #fft_data+1,IP_0 				
	STM #fft_data+2*K_FFT_SIZE+1,AX_N 		
	ADD *AX_k,*IP_0,A 				
	SUB *AX_k,*IP_0,B 				
	STH A,ASM,*AX_k+ 				
	ST #0,*AX_k 					
	MVDD *AX_k+,*AX_N- 				
	STH B,ASM,*AX_N 				
							
	.asg AR3,AX_2Nminusk
	.asg AR4,COS
	.asg AR5,SIN                
	STM #fft_data+4*K_FFT_SIZE-1,AX_2Nminusk	
	STM #cosine+K_TWID_TBL_SIZE/K_FFT_SIZE,COS 	
	STM #sine+K_TWID_TBL_SIZE/K_FFT_SIZE,SIN 	
	STM #K_FFT_SIZE-2,BRC
	RPTBD phase4end-1
	STM #K_TWID_TBL_SIZE/K_FFT_SIZE,AR0 		
	LD *AX_k+,16,A 					
	MACR *COS,*AX_k,A 				
	MASR *SIN,*AX_2Nminusk-,A 		   	
	LD *AX_2Nminusk+,16,B 				
	MASR *SIN+0%,*AX_k-,B 				
	MASR *COS+0%,*AX_2Nminusk,B 			
	STH A,ASM,*AX_k+ 				
	STH B,ASM,*AX_k+ 				
	NEG B 						
	STH B,ASM,*AX_2Nminusk- 			
	STH A,ASM,*AX_2Nminusk- 			
phase4end:
	RET 						
	
	 
	.asg AR2,AX
	.asg AR3,OUTPUT_BUF
	.def  power

power:
	STM #data_output,OUTPUT_BUF 				
	STM #K_FFT_SIZE*2-1,BRC
	RPTBD power_end-1
	STM #fft_data,AX 					
	SQUR *AX+,A 						
	SQURA *AX+,A 						
	STH A,*OUTPUT_BUF+
power_end:
	RET 							
		
	.def find
	.asg AR2,POWER
	.asg AR3,STORE
	.asg AR4,INDEX
find:
	STM #data_output,POWER
	STM #data_find,STORE 
	STM #data_index,INDEX
	LD	#0,A
	LD	#0,B
	STL A,*STORE
	STM #K_FFT_SIZE*2-1,BRC	
	RPTB find_end-1
	SUB *POWER,*STORE,A
	BC	next,ALEQ
	MVDD *POWER,*STORE
	STL  B,*INDEX	
next:
	MAR *POWER+
	ADD #1,B
	
find_end:
	RET
	.end	

⌨️ 快捷键说明

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