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

📄 fffff.s

📁 在ICCAVR 环境实现的fft,
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module fffff.c
	.area data(ram, con, rel)
_dataR::
	.blkb 2
	.area idata
	.word 5
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 5
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 5
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 5
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 5
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 5
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 5
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 5
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile D:\HJN\Design\AVR\fft\fffff.c
	.dbsym e dataR _dataR A[32:16]I
	.area text(rom, con, rel)
	.dbfile D:\HJN\Design\AVR\fft\fffff.c
	.dbfunc e FFT _FFT fV
;             x6 -> y+22
;             x5 -> y+20
;             x4 -> y+18
;             xx -> y+16
;             x3 -> y+14
;             x2 -> y+12
;             x1 -> R12,R13
;             x0 -> R10,R11
;              L -> y+27
;              j -> R14,R15
;           temp -> y+8
;             TI -> y+4
;             TR -> y+0
;              i -> y+26
;              p -> R10,R11
;              b -> y+24
;              k -> R12,R13
;          dataI -> y+41
;          dataR -> y+39
	.even
_FFT::
	xcall push_arg4
	xcall push_gset5
	sbiw R28,29
	.dbline -1
	.dbline 11
; #include <iom128v.h>
; #include <math.h>
; #define PI 3.1415926
; #define qq PI/8
; 
; int dataR[]={5,5,5,5,0,0,0,0,5,5,5,5,0,0,0,0};
; int dataI[16],w[32];
; 
; 
; void FFT(int dataR[],int dataI[])
; {int x0,x1,x2,x3,x4,x5,x6,xx;
	.dbline 16
;  unsigned char i;
;  int L,j,k,b,p;
;  float TR,TI,temp;
; /********** following code invert sequence ************/
; for(i=0;i<16;i++)
	clr R0
	std y+26,R0
	xjmp L5
L2:
	.dbline 17
	.dbline 17
	clr R2
	clr R3
	std y+23,R3
	std y+22,R2
	std y+21,R3
	std y+20,R2
	std y+19,R3
	std y+18,R2
	std y+15,R3
	std y+14,R2
	std y+13,R3
	std y+12,R2
	clr R12
	clr R13
	clr R10
	clr R11
	.dbline 18
	ldd R24,y+26
	clr R25
	andi R24,1
	andi R25,0
	movw R10,R24
	.dbline 18
	ldd R24,y+26
	clr R25
	asr R25
	ror R24
	andi R24,1
	andi R25,0
	movw R12,R24
	.dbline 18
	ldd R24,y+26
	clr R25
	asr R25
	ror R24
	asr R25
	ror R24
	andi R24,1
	andi R25,0
	std y+13,R25
	std y+12,R24
	.dbline 18
	ldd R24,y+26
	clr R25
	asr R25
	ror R24
	asr R25
	ror R24
	asr R25
	ror R24
	andi R24,1
	andi R25,0
	std y+15,R25
	std y+14,R24
	.dbline 20
	ldi R16,4
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R2,R16
	ldi R16,8
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R4,R16
	add R4,R2
	adc R5,R3
	ldd R18,y+12
	ldd R19,y+13
	ldi R16,2
	ldi R17,0
	xcall empy16s
	add R4,R16
	adc R5,R17
	ldd R2,y+14
	ldd R3,y+15
	add R4,R2
	adc R5,R3
	std y+17,R5
	std y+16,R4
	.dbline 21
	ldi R24,2
	ldd R0,y+26
	mul R24,R0
	movw R30,R0
	ldd R0,y+39
	ldd R1,y+40
	add R30,R0
	adc R31,R1
	ldd R2,z+0
	ldd R3,z+1
	movw R18,R4
	ldi R16,2
	ldi R17,0
	xcall empy16s
	movw R30,R16
	ldd R0,y+41
	ldd R1,y+42
	add R30,R0
	adc R31,R1
	std z+1,R3
	std z+0,R2
	.dbline 22
L3:
	.dbline 16
	ldd R0,y+26
	inc R0
	std y+26,R0
L5:
	.dbline 16
	ldd R24,y+26
	cpi R24,16
	brsh X0
	xjmp L2
X0:
	.dbline 23
; { x0=x1=x2=x3=x4=x5=x6=0;
; x0=i&0x01; x1=(i>>1)&0x01; x2=(i>>2)&0x01; x3=(i>>3)&0x01;
; //x4=(i>>4)&0x01; x5=(i>>5)&0x01; x6=(i>>6)&0x01;
; xx=x0*8+x1*4+x2*2+x3;
; dataI[xx]=dataR[i];
; }
; for(i=0;i<16;i++)
	clr R0
	std y+26,R0
	xjmp L9
L6:
	.dbline 24
	.dbline 24
	ldi R24,2
	ldd R0,y+26
	mul R24,R0
	movw R2,R0
	movw R30,R2
	ldd R0,y+41
	ldd R1,y+42
	add R30,R0
	adc R31,R1
	ldd R4,z+0
	ldd R5,z+1
	movw R30,R2
	ldd R0,y+39
	ldd R1,y+40
	add R30,R0
	adc R31,R1
	std z+1,R5
	std z+0,R4
	.dbline 24
	ldd R0,y+26
	mul R24,R0
	movw R30,R0
	ldd R0,y+41
	ldd R1,y+42
	add R30,R0
	adc R31,R1
	clr R2
	clr R3
	std z+1,R3
	std z+0,R2
	.dbline 24
L7:
	.dbline 23
	ldd R0,y+26
	inc R0
	std y+26,R0
L9:
	.dbline 23
	ldd R24,y+26
	cpi R24,16
	brlo L6
	.dbline 26
	ldi R24,1
	ldi R25,0
	std y+28,R25
	std y+27,R24
L10:
	.dbline 26
; { dataR[i]=dataI[i]; dataI[i]=0; }
; /************** following code FFT *******************/
; for(L=1;L<=4;L++) { /* for(1) */
	.dbline 27
; b=1; i=L-1;
	ldi R24,1
	ldi R25,0
	std y+25,R25
	std y+24,R24
	.dbline 27
	ldd R24,y+27
	ldd R25,y+28
	sbiw R24,1
	std y+26,R24
	xjmp L15
L14:
	.dbline 29
	.dbline 29
	ldi R16,2
	ldi R17,0
	ldd R18,y+24
	ldd R19,y+25
	xcall empy16s
	std y+25,R17
	std y+24,R16
	.dbline 29
	ldd R0,y+26
	dec R0
	std y+26,R0
	.dbline 29
L15:
	.dbline 28
; while(i>0) 
	clr R2
	ldd R0,y+26
	cp R2,R0
	brlo L14
	.dbline 30
; {b=b*2; i--;} /* b= 2^(L-1) */
; for(j=0;j<=b-1;j++) /* for (2) */
	clr R14
	clr R15
	xjmp L20
L17:
	.dbline 31
; { p=1; i=4-L;
	.dbline 31
	ldi R24,1
	ldi R25,0
	movw R10,R24
	.dbline 31
	ldi R24,4
	ldd R0,y+27
	ldd R1,y+28
	sub R24,R0
	sbc R25,R1
	std y+26,R24
	xjmp L22
L21:
	.dbline 33
	.dbline 33
	ldi R16,2
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R10,R16
	.dbline 33
	ldd R0,y+26
	dec R0
	std y+26,R0
	.dbline 33
L22:
	.dbline 32
; while(i>0) /* p=pow(2,7-L)*j; */
	clr R2
	ldd R0,y+26
	cp R2,R0
	brlo L21
	.dbline 34
; {p=p*2; i--;}
; p=p*j;for(k=j;k<16;k=k+2*b) /* for (3) */
	movw R18,R14
	movw R16,R10
	xcall empy16s
	movw R10,R16
	.dbline 34
	movw R12,R14
	xjmp L27
L24:
	.dbline 35
	.dbline 35
	ldi R16,2
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R30,R16
	ldd R0,y+39
	ldd R1,y+40
	add R30,R0
	adc R31,R1
	ldd R16,z+0
	ldd R17,z+1
	xcall int2fp
	movw R30,R28
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 35
	ldi R16,2
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R30,R16
	ldd R0,y+41
	ldd R1,y+42
	add R30,R0
	adc R31,R1
	ldd R16,z+0
	ldd R17,z+1
	xcall int2fp
	movw R30,R28
	std z+4,R16
	std z+5,R17
	std z+6,R18
	std z+7,R19
	.dbline 35
	movw R18,R12
	ldd R0,y+24
	ldd R1,y+25
	add R18,R0
	adc R19,R1
	ldi R16,2
	ldi R17,0
	xcall empy16s
	movw R30,R16
	ldd R0,y+39
	ldd R1,y+40
	add R30,R0
	adc R31,R1
	ldd R16,z+0
	ldd R17,z+1
	xcall int2fp
	movw R30,R28
	std z+8,R16
	std z+9,R17
	std z+10,R18
	std z+11,R19
	.dbline 36
	ldi R16,<L28
	ldi R17,>L28
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R10
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	xcall empy32f
	xcall _cos
	movw R2,R16
	movw R4,R18
	ldi R16,<L28
	ldi R17,>L28
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R10
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	xcall empy32f
	push R2
	push R3
	push R4
	push R5
	xcall _sin
	pop R5
	pop R4
	pop R3
	pop R2
	movw R6,R16
	movw R8,R18
	ldi R16,2
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R24,R16
	ldd R0,y+39
	ldd R1,y+40
	add R24,R0
	adc R25,R1
	movw R30,R24
	ldd R16,z+0
	ldd R17,z+1
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R18,R12
 ; stack offset 4
	ldd R0,y+28
	ldd R1,y+29
	add R18,R0
	adc R19,R1
	ldi R16,2
	ldi R17,0
	xcall empy16s
	movw R30,R16
 ; stack offset 4
	ldd R0,y+43
	ldd R1,y+44
	add R30,R0
	adc R31,R1
	ldd R16,z+0
	ldd R17,z+1
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall empy32fs
	xcall add32fs
	movw R18,R12
 ; stack offset 4
	ldd R0,y+28
	ldd R1,y+29
	add R18,R0
	adc R19,R1
	ldi R16,2
	ldi R17,0
	xcall empy16s
	movw R30,R16
 ; stack offset 4
	ldd R0,y+45
	ldd R1,y+46
	add R30,R0
	adc R31,R1
	ldd R16,z+0
	ldd R17,z+1
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	st -y,R9
	st -y,R8
	st -y,R7
	st -y,R6
	xcall empy32fs
	xcall add32f
	xcall fp2int
	movw R30,R24
	std z+1,R17
	std z+0,R16
	.dbline 37
	ldi R16,<L28
	ldi R17,>L28
	xcall lpm32

⌨️ 快捷键说明

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