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

📄 fft.asm

📁 这里面有很多dsp应用程序源码
💻 ASM
字号:
	.title	"fft.asm"
	.mmregs
	.copy	"coeff.inc"
	.def	start
sine:	.usect	"sine",512
cosine:	.usect	"cosine",512
fft_data:	.usect	"fft_data",1024
d_input:	.usect	"d_input",1024
fft_out:	.usect	"fft_out",512
STACK		.usect	"STACK",10
K_DATA_IDX_1	.set	2
K_DATA_IDX_2	.set	4
K_DATA_IDX_3	.set	8
K_TWID_TBL_SIZE	.set	512
K_TWID_IDX_3	.set	128
K_FLY_COUNT_3	.set	4
K_FFT_SIZE	.set	32
K_LOGN		.set	5
PA0		.set	0
PA1		.set	1
	.bss	d_twid_idx,1
	.bss	d_data_idx,1
	.bss	d_grps_cnt,1
	.sect	"fft_prg"
****************位倒码程序****************************
	.asg	AR2,REORDERED
	.asg	AR3,ORIGINAL_INPUT
	.asg	AR7,DATA_PROC_BUF
start:	SSBX	FRCT
	STM	#STACK+10,SP

	STM	#d_input,AR1
	RPT	#2*K_FFT_SIZE-1
	PORTR	PA1,*AR1+
	
	STM	#sine,AR1
	RPT	#511
	MVPD	sine1,*AR1+
	
	STM	#cosine,AR1
	RPT	#511
	MVPD	cosine1,*AR1+
	
	STM	#d_input,ORIGINAL_INPUT
	STM	#fft_data,DATA_PROC_BUF
	MVMM	DATA_PROC_BUF,REORDERED
	STM	#K_FFT_SIZE-1,BRC
	RPTBD	bit_rev_end-1
	STM	#K_FFT_SIZE,AR0
	MVDD	*ORIGINAL_INPUT+,*REORDERED+
	MVDD	*ORIGINAL_INPUT-,*REORDERED+
	MAR	*ORIGINAL_INPUT+0B
bit_rev_end:
********************FFT CODE***************************
	.asg	AR1,GROUP_COUNTER
	.asg	AR2,PX
	.asg	AR3,QX
	.asg	AR4,WR
	.asg	AR5,WI
	.asg	AR6,BUTTERFLY_COUNTER
	.asg	AR7,STAGE_COUNTER
********************第一级蝶形运算stage1*********************
	STM	#0,BK
	LD	#-1,ASM
	STM	#fft_data,PX
	LD	*PX,16,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:
*********************第二级蝶形运算stage2*******************
	STM	#fft_data,PX
	STM	#fft_data+K_DATA_IDX_2,QX
	STM	#K_FFT_SIZE/4-1,BRC
	LD	*PX,16,A
	RPTBD	stage2end-1
	STM	#K_DATA_IDX_2+1,AR0
;1st butterfly
	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+
;2nd butterfly
	MAR	*QX+
	SUB	*PX,*QX,A
	ADD	*PX,*QX-,B
	STH	A,ASM,*PX+
	SUB	*PX,*QX,A
	ST	B,*QX
	||LD	*QX+,B
	ST	A,*QX+0%
	||ADD	*PX,A
	ST	A,*PX+0%
	||LD	*PX,A
stage2end:
*****************第三级至log2N级蝶形运算stage3 through Stage log2N************
	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,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:
;Updata pointers for next group
	PSHM	AR0
	MVDK	d_data_idx,AR0
	MAR	*PX+0
	MAR	*QX+0
	BANZD	group,*GROUP_COUNTER-
	POPM	AR0
	MAR	*QX-
;Updata	counters and indices for next stage
	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:
**********计算功率谱Compute the power spectrum*****************
	STM	#fft_data,AR2
	STM	#fft_data,AR3
	STM	#fft_out,AR4
	STM	#K_FFT_SIZE*2-1,BRC
	RPTB	power_end-1
	SQUR	*AR2+,A
	SQURA	*AR2+,A
	STH	A,*AR4+
power_end:
	STM	#fft_out,AR4
	RPT	#K_FFT_SIZE-1
	PORTW	*AR4+,PA0
here:	B	here
	.end

⌨️ 快捷键说明

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