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

📄 ffts.asm

📁 实时FFT源码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		rete
		nop
		nop
INT1	B		SINT1
		rete
		nop
		nop
INT2	rsbx 	intm
		rete
		nop
		nop
TINT:	rete
		nop
		nop
		nop
RINT0:	rete
		nop
		nop
		nop
XINT0:	rete
		nop
		nop
		nop 
SINT6	.space 4*16
SINT7	.space 4*16
INT3:	rete
		nop
		nop
		nop  
HPINT:	rete
		nop
		nop
		nop  
RINT1:	B		RECIV
		nop
		nop
		nop
XINT1:	rete
		nop
		nop
		nop
;*************************
start:  LD 		#0,DP
        STM		#TOS,SP
		STM 	#56DBh,SWWSR
		STM 	#1020h,PMST
		STM     #0,CLKMD
teststa:
		LDM     CLKMD,A
		AND     #01h,A
		BC      teststa,ANEQ
		STM     #01097h,CLKMD
		RPT     #0fffh
		NOP
		STM 	#DATA,AR2				;存放信号的数据存储器块清零
		STM 	#512,AR3
		LD		#0,A
LOOPD:	STL 	A,*AR2+
		BANZ 	LOOPD,*AR3-
		
        LD 		#INPUT,A				;存放信号的程序存储器块清零
		STM 	#0,AR1
		STM 	#256,AR3
LOOPS:	WRITA 	AR1
		ADD 	#1,A,A
		BANZ 	LOOPS,*AR3-
		
		LD		#0AH,A                  ;A/D转换器初始化
        STL		A,TMP
        PORTW 	TMP,7H  				;选通A/D
        CALL	ADCBSP
        
		STM 	#INPUT,AR2 			
		STM 	#128,AR3
		ST		#0,*(flag)
		   
		SSBX    INTM
LOOP:	STM 	#0002H,IMR       		;开INT1
		RSBX 	INTM					;EINT
		
LOOP2:	CMPM	*(flag),#1
		BC		START1,TC				;通过INT1找到信号采样的起始位置
		B		LOOP2
		
START1:	STM	 	#3FFFH,IFR  
		SSBX    INTM
		STM 	#0400H,IMR				;开串口1的接收中断
		RSBX 	INTM
		    				
WAIT:	BANZ 	WAIT,*AR3 				;采样128个点
		
			SSBX 	INTM				;FFT运算,结果存入中DATA块
		    STM		#0,IMR 
		    RSBX	OVM 
		    SSBX	SXM
		    SSBX	FRCT           
			STM 	#2*N,BK 
			STM		#INPUT,AR3
			STM		#DATA,AR7
			MVMM	AR7,AR2
			STM		#N-1,BRC
			RPTBD	plend-1
			STM 	#N,AR0
			LDM 	AR3,A    
			READA   *AR2+ 
			ADD     #1,A
			READA   *AR2+
			MAR		*AR3+0B
plend:
			STM		#0,BK
			LD		#-1,ASM
			MVMM	AR7,AR2
			STM		#DATA+2,AR3
			STM	    #N/2-1,BRC
			LD		*AR2,16,A
			RPTBD	s1end-1
			STM		#3,AR0
			SUB		*AR3,16,A,B
			ADD		*AR3,16,A
			STH		A,ASM,*AR2+
			ST		B,*AR3+
			||LD	*AR2,A
			SUB		*AR3,16,A,B
			ADD		*AR3,16,A
			STH		A,ASM,*AR2+0
			ST		B,*AR3+0%
			||LD	*AR2,A
s1end:
			MVMM	AR7,AR2
			STM		#DATA+4,AR3
			STM		#N/4-1,BRC
			LD		*AR2,16,A
			RPTBD	s2end-1
			STM		#5,AR0
			SUB		*AR3,16,A,B
			ADD		*AR3,16,A
			STH		A,ASM,*AR2+
			ST		B,*AR3+
			||LD	*AR2,A
			SUB		*AR3,16,A,B
			ADD		*AR3,16,A
			STH		A,ASM,*AR2+
			STH		B,ASM,*AR3+
			MAR		*AR3+
			ADD		*AR2,*AR3,A
			SUB		*AR2,*AR3-,B
			STH		A,ASM,*AR2+
			SUB		*AR2,*AR3,A
			ST		B,*AR3
			||LD	*AR3+,B
			ST		A,*AR2
			||ADD	*AR2+0%,A
			ST		A,*AR3+0%
			||LD	*AR2,A
s2end:
			STM		#512,BK
			ST		#128,@sav_sin
			STM		#128,AR0
			STM		#TWI2,AR4
			STM     #TWI1,AR5
			STM		#-3+LOGN,AR7
			ST		#-1+N/8,@sav_grp
			STM		#3,AR6
			ST		#8,@sav_idx
stage:
			STM		#DATA,AR2
			LD		@sav_idx,A
			ADD		*(AR2),A
			STLM	A,AR3
			MVDK	@sav_grp,AR1
group:     
			MVMD	AR6,BRC
			RPTBD	bend-1
			LD		*AR4,T
			MPY		*AR3+,A
			MACR	*AR5+0%,*AR3-,A
			ADD		*AR2,16,A,B
			ST		B,*AR2
			||SUB	*AR2+,B
			ST		B,*AR3
			||MPY	*AR3+,A
			MASR	*AR3,*AR4+0%,A
			ADD		*AR2,16,A,B
			ST		B,*AR3+
			||SUB	*AR2,B
			LD		*AR4,T
			ST		B,*AR2+
			||MPY	*AR3+,A
bend:
			PSHM	AR0
			MVDK	sav_idx,AR0
			MAR		*AR2+0
			MAR		*AR3+0
			BANZD	group,*AR1-
			POPM	AR0
			MAR		*AR3-
			LD		sav_idx,A
			SUB		#1,A,B
			STLM	B,AR6
			STL		A,1,sav_idx
			LD		sav_grp,A
			STL		A,ASM,sav_grp
			LD		sav_sin,A
			STL		A,ASM,sav_sin
			BANZD	stage,*AR7-
			MVDK	sav_sin,AR0
;
			STM		#DATA+2,AR2
			STM		#DATA+2*N-2,AR3
			STM		#DATA+2*N+3,AR7
			STM		#DATA+4*N-1,AR6
			STM		#-2+N/2,BRC
			RPTBD	p3end-1
			STM		#3,AR0
;
			ADD		*AR2,*AR3,A
			SUB     *AR2,*AR3,B			
			STH		A,ASM,*AR2+
			STH		A,ASM,*AR3+
			STH		B,ASM,*AR6-
			NEG		B
			STH		B,ASM,*AR7-
			ADD		*AR2,*AR3,A
			SUB		*AR2,*AR3,B
			STH		A,ASM,*AR2+
			STH		A,ASM,*AR3-0
			STH		B,ASM,*AR6-
			NEG		B
			STH		B,ASM,*AR7+0
p3end:
			ST		#0,*AR6-
			ST		#0,*AR6
p3test:
			STM		#DATA,AR2
			STM		#DATA+1,AR4
			STM		#DATA+2*N+1,AR5
			ADD		*AR2,*AR4,A
			SUB		*AR2,*AR4,B
			STH		A,ASM,*AR2+
			ST		#0,*AR2
			MVDD	*AR2+,*AR5-
			STH		B,ASM,*AR5
			STM		#DATA+4*N-1,AR3
			STM		#TWI2+512/N,AR4
			STM		#TWI1+512/N,AR5
			STM		#N-2,BRC
			RPTBD	p4end-1
			STM		#512/N,AR0
			LD		*AR2+,16,A
			MACR	*AR4,*AR2,A
			MASR	*AR5,*AR3-,A
			LD		*AR3+,16,B
			MASR	*AR5+0%,*AR2-,B
			MASR	*AR4+0%,*AR3,B
			STH		A,ASM,*AR2+
			STH		B,ASM,*AR2+
			NEG		B
			STH		B,ASM,*AR3-
			STH		A,ASM,*AR3-
p4end:		nop
			nop
			 
LOP			B		LOP 
;*************************        
ADCBSP	STM 	#SPCR11,SPSA1 			;串口1的初始化程序
										;A/D转换器的初始化程序 
		STM 	#0000h,McBSP1  			;RESET R
		NOP
		NOP
		
		STM 	#SPCR21,SPSA1  
		STM 	#0000h,McBSP1  			;RESET X	
		NOP
		NOP
				
		STM 	#SPCR11,SPSA1
		STM 	#AK_SPCR11,McBSP1    	;ENBLE R
		NOP
		NOP
		
		LD		#02H,A
        STL		A,TMP
        PORTW 	TMP,7H  
		   
		STM 	#SPCR21,SPSA1
		STM 	#AK_SPCR21,McBSP1    	;ENBLE X
		NOP
		NOP
		  
		STM 	#RCR11,SPSA1
		STM 	#AK_RCR11,McBSP1 
		NOP
		NOP   
		
		STM 	#XCR11,SPSA1
		STM 	#AK_XCR11,McBSP1
		NOP
		NOP
		
		STM 	#PCR1,SPSA1
		STM 	#AK_PCR1,McBSP1
		NOP
		NOP
	    
	    STM		SRGR11,SPSA1
	    STM		#AK_SRGR11,McBSP1
	    NOP
		NOP
		
		STM		SRGR21,SPSA1
	    STM		#AK_SRGR21,McBSP1
	    NOP
		NOP 
		
		STM 	#RCR21,SPSA1
		STM 	#AK_RCR21,McBSP1 
		NOP
		NOP 
		
		STM 	#XCR21,SPSA1
		STM 	#AK_XCR21,McBSP1
		NOP
		NOP  
		RET
;***********************************
RECIV:  	LDM		DRR11,A 		;串口1的中断服务程序
		   	STL 	A,6,DXNEW 
		   	LDM 	AR2,A
	       	WRITA 	DXNEW 
	       	ADD 	#2,A 			;信号分为实部和虚部,虚部为0
	       	STL 	A,AR2
	       	BANZ 	LOOPR,*AR3-
	       	SSBX	INTM    
LOOPR:   	RETE
;*****************************
SINT1:		ST		#1,*(flag)				;外中断1(INT1)的中断服务程序
			RETE 	
;****************************        
        .end 
        

⌨️ 快捷键说明

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