www.pudn.com > fft_iccavr.rar > ff.lis
.module ff.c
.area data(ram, con, rel)
0000 _dataR::
0000 .blkb 4
.area idata
0000 0000A040 .word 0x0,0x40a0
.area data(ram, con, rel)
0004 .blkb 4
.area idata
0004 0000A040 .word 0x0,0x40a0
.area data(ram, con, rel)
0008 .blkb 4
.area idata
0008 0000A040 .word 0x0,0x40a0
.area data(ram, con, rel)
000C .blkb 4
.area idata
000C 0000A040 .word 0x0,0x40a0
.area data(ram, con, rel)
0010 .blkb 4
.area idata
0010 00000000 .word 0x0,0x0
.area data(ram, con, rel)
0014 .blkb 4
.area idata
0014 00000000 .word 0x0,0x0
.area data(ram, con, rel)
0018 .blkb 4
.area idata
0018 00000000 .word 0x0,0x0
.area data(ram, con, rel)
001C .blkb 4
.area idata
001C 00000000 .word 0x0,0x0
.area data(ram, con, rel)
0020 .dbfile D:\HJN\Design\AVR\fft\ff.c
0020 .dbsym e dataR _dataR A[32:8]D
0020 _dataI::
0020 .blkb 4
.area idata
0020 00000000 .word 0x0,0x0
.area data(ram, con, rel)
0024 .dbfile D:\HJN\Design\AVR\fft\ff.c
0024 .blkb 4
.area idata
0024 00000000 .word 0x0,0x0
.area data(ram, con, rel)
0028 .dbfile D:\HJN\Design\AVR\fft\ff.c
0028 .blkb 4
.area idata
0028 00000000 .word 0x0,0x0
.area data(ram, con, rel)
002C .dbfile D:\HJN\Design\AVR\fft\ff.c
002C .blkb 4
.area idata
002C 00000000 .word 0x0,0x0
.area data(ram, con, rel)
0030 .dbfile D:\HJN\Design\AVR\fft\ff.c
0030 .blkb 4
.area idata
0030 00000000 .word 0x0,0x0
.area data(ram, con, rel)
0034 .dbfile D:\HJN\Design\AVR\fft\ff.c
0034 .blkb 4
.area idata
0034 00000000 .word 0x0,0x0
.area data(ram, con, rel)
0038 .dbfile D:\HJN\Design\AVR\fft\ff.c
0038 .blkb 4
.area idata
0038 00000000 .word 0x0,0x0
.area data(ram, con, rel)
003C .dbfile D:\HJN\Design\AVR\fft\ff.c
003C .blkb 4
.area idata
003C 00000000 .word 0x0,0x0
.area data(ram, con, rel)
0040 .dbfile D:\HJN\Design\AVR\fft\ff.c
0040 .dbsym e dataI _dataI A[32:8]D
.area text(rom, con, rel)
0000 .dbfile D:\HJN\Design\AVR\fft\ff.c
0000 .dbfunc e FFT _FFT fV
0000 ; xx -> y+12
0000 ; x2 -> R14,R15
0000 ; x1 -> R10,R11
0000 ; x0 -> R12,R13
0000 ; L -> y+24
0000 ; j -> R10,R11
0000 ; temp -> y+8
0000 ; TI -> y+4
0000 ; TR -> y+0
0000 ; b -> y+22
0000 ; p -> R14,R15
0000 ; k -> R12,R13
0000 ; dataI -> y+38
0000 ; dataR -> y+36
.even
0000 _FFT::
0000 0E940000 xcall push_arg4
0004 0E940000 xcall push_gset5
0008 6A97 sbiw R28,26
000A .dbline -1
000A .dbline 10
000A ; #include
000A ; #include
000A ; #define PI 3.1415926
000A ;
000A ; unsigned char i,w[32];
000A ; float dataR[]={5,5,5,5,0,0,0,0};
000A ; float dataI[]={0,0,0,0,0,0,0,0};
000A ;
000A ; void FFT(float dataR[],float dataI[])
000A ; {
000A .dbline 17
000A ; int x0,x1,x2,xx;
000A ;
000A ; int L,j,k,b,p;
000A ; float TR,TI,temp;
000A ;
000A ; /********** following code invert sequence ************/
000A ; for(i=0;i<8;i++)
000A 2224 clr R2
000C 20922000 sts _i,R2
0010 55C0 xjmp L5
0012 L2:
0012 .dbline 18
0012 .dbline 19
0012 EE24 clr R14
0014 FF24 clr R15
0016 AA24 clr R10
0018 BB24 clr R11
001A CC24 clr R12
001C DD24 clr R13
001E .dbline 20
001E 80912000 lds R24,_i
0022 9927 clr R25
0024 8170 andi R24,1
0026 9070 andi R25,0
0028 6C01 movw R12,R24
002A .dbline 21
002A 22E0 ldi R18,2
002C 30E0 ldi R19,0
002E 00912000 lds R16,_i
0032 1127 clr R17
0034 0E940000 xcall div16s
0038 C801 movw R24,R16
003A 8170 andi R24,1
003C 9070 andi R25,0
003E 5C01 movw R10,R24
0040 .dbline 22
0040 24E0 ldi R18,4
0042 30E0 ldi R19,0
0044 00912000 lds R16,_i
0048 1127 clr R17
004A 0E940000 xcall div16s
004E C801 movw R24,R16
0050 8170 andi R24,1
0052 9070 andi R25,0
0054 7C01 movw R14,R24
0056 .dbline 23
0056 02E0 ldi R16,2
0058 10E0 ldi R17,0
005A 9501 movw R18,R10
005C 0E940000 xcall empy16s
0060 1801 movw R2,R16
0062 04E0 ldi R16,4
0064 10E0 ldi R17,0
0066 9601 movw R18,R12
0068 0E940000 xcall empy16s
006C 2801 movw R4,R16
006E 420C add R4,R2
0070 531C adc R5,R3
0072 4E0C add R4,R14
0074 5F1C adc R5,R15
0076 5D86 std y+13,R5
0078 4C86 std y+12,R4
007A .dbline 24
007A 20902000 lds R2,_i
007E 84E0 ldi R24,4
0080 829D mul R24,R2
0082 F001 movw R30,R0
0084 0CA0 ldd R0,y+36
0086 1DA0 ldd R1,y+37
0088 E00D add R30,R0
008A F11D adc R31,R1
008C 2080 ldd R2,z+0
008E 3180 ldd R3,z+1
0090 4280 ldd R4,z+2
0092 5380 ldd R5,z+3
0094 2C85 ldd R18,y+12
0096 3D85 ldd R19,y+13
0098 04E0 ldi R16,4
009A 10E0 ldi R17,0
009C 0E940000 xcall empy16s
00A0 F801 movw R30,R16
00A2 0EA0 ldd R0,y+38
00A4 1FA0 ldd R1,y+39
00A6 E00D add R30,R0
00A8 F11D adc R31,R1
00AA 2082 std z+0,R2
00AC 3182 std z+1,R3
00AE 4282 std z+2,R4
00B0 5382 std z+3,R5
00B2 .dbline 25
00B2 L3:
00B2 .dbline 17
00B2 80912000 lds R24,_i
00B6 8F5F subi R24,255 ; addi 1
00B8 80932000 sts _i,R24
00BC L5:
00BC .dbline 17
00BC 80912000 lds R24,_i
00C0 8830 cpi R24,8
00C2 08F4 brsh X0
00C4 A6CF xjmp L2
00C6 X0:
00C6 .dbline 26
00C6 ; {
00C6 ; x0=x1=x2=0;
00C6 ; x0=i&0x01;
00C6 ; x1=(i/2)&0x01;
00C6 ; x2=(i/4)&0x01;
00C6 ; xx=x0*4+x1*2+x2;
00C6 ; dataI[xx]=dataR[i]; //实部的数放在虚部数组中
00C6 ; }
00C6 ; for(i=0;i<8;i++)
00C6 2224 clr R2
00C8 20922000 sts _i,R2
00CC 2CC0 xjmp L9
00CE L6:
00CE .dbline 27
00CE .dbline 28
00CE 20902000 lds R2,_i
00D2 84E0 ldi R24,4
00D4 829D mul R24,R2
00D6 1001 movw R2,R0
00D8 F101 movw R30,R2
00DA 0EA0 ldd R0,y+38
00DC 1FA0 ldd R1,y+39
00DE E00D add R30,R0
00E0 F11D adc R31,R1
00E2 4080 ldd R4,z+0
00E4 5180 ldd R5,z+1
00E6 6280 ldd R6,z+2
00E8 7380 ldd R7,z+3
00EA F101 movw R30,R2
00EC 0CA0 ldd R0,y+36
00EE 1DA0 ldd R1,y+37
00F0 E00D add R30,R0
00F2 F11D adc R31,R1
00F4 4082 std z+0,R4
00F6 5182 std z+1,R5
00F8 6282 std z+2,R6
00FA 7382 std z+3,R7
00FC .dbline 29
00FC 20902000 lds R2,_i
0100 829D mul R24,R2
0102 F001 movw R30,R0
0104 0EA0 ldd R0,y+38
0106 1FA0 ldd R1,y+39
0108 E00D add R30,R0
010A F11D adc R31,R1
010C 00E0 ldi R16,L10
0110 0E940000 xcall lpm32
0114 0083 std z+0,R16
0116 1183 std z+1,R17
0118 2283 std z+2,R18
011A 3383 std z+3,R19
011C .dbline 30
011C L7:
011C .dbline 26
011C 80912000 lds R24,_i
0120 8F5F subi R24,255 ; addi 1
0122 80932000 sts _i,R24
0126 L9:
0126 .dbline 26
0126 80912000 lds R24,_i
012A 8830 cpi R24,8
012C 08F4 brsh X1
012E CFCF xjmp L6
0130 X1:
0130 .dbline 32
0130 ; {
0130 ; dataR[i]=dataI[i]; //将虚部保存的数传回实部
0130 ; dataI[i]=0;
0130 ; }
0130 ; /************** following code FFT *******************/
0130 ; for(L = 1 ; L <= 3 ; L ++ ) // for (1) L 代表第几级
0130 81E0 ldi R24,1
0132 90E0 ldi R25,0
0134 998F std y+25,R25
0136 888F std y+24,R24
0138 L11:
0138 .dbline 33
0138 ; {
0138 .dbline 34
0138 ; b = 1 ;
0138 81E0 ldi R24,1
013A 90E0 ldi R25,0
013C 9F8B std y+23,R25
013E 8E8B std y+22,R24
0140 .dbline 35
0140 ; i = L - 1 ;
0140 888D ldd R24,y+24
0142 998D ldd R25,y+25
0144 0197 sbiw R24,1
0146 80932000 sts _i,R24
014A 0DC0 xjmp L16
014C L15:
014C .dbline 37
014C .dbline 38
014C 02E0 ldi R16,2
014E 10E0 ldi R17,0
0150 2E89 ldd R18,y+22
0152 3F89 ldd R19,y+23
0154 0E940000 xcall empy16s
0158 1F8B std y+23,R17
015A 0E8B std y+22,R16
015C .dbline 39
015C 80912000 lds R24,_i
0160 8150 subi R24,1
0162 80932000 sts _i,R24
0166 .dbline 40
0166 L16:
0166 .dbline 36
0166 ; while ( i > 0 ) //计算第L层旋转因子的个数,即输入口间距 b= 2^(L-1)
0166 2224 clr R2
0168 30902000 lds R3,_i
016C 2314 cp R2,R3
016E 70F3 brlo L15
0170 .dbline 42
0170 ; {
0170 ; b=b*2;
0170 ; i--;
0170 ; }
0170 ;
0170 ; for ( j = 0 ; j <= b - 1 ; j ++ ) // for (2) j 用来控制计算第几个旋转因子
0170 AA24 clr R10
0172 BB24 clr R11
0174 23C2 xjmp L21
0176 L18:
0176 .dbline 43
0176 ; {
0176 .dbline 44
0176 ; p = 1 ;
0176 81E0 ldi R24,1
0178 90E0 ldi R25,0
017A 7C01 movw R14,R24
017C .dbline 45
017C ; i = 3 - L ;
017C 83E0 ldi R24,3
017E 088C ldd R0,y+24
0180 198C ldd R1,y+25
0182 8019 sub R24,R0
0184 9109 sbc R25,R1
0186 80932000 sts _i,R24
018A 0BC0 xjmp L23
018C L22:
018C .dbline 48
018C .dbline 49
018C 02E0 ldi R16,2
018E 10E0 ldi R17,0
0190 9701 movw R18,R14
0192 0E940000 xcall empy16s
0196 7801 movw R14,R16
0198 .dbline 50
0198 80912000 lds R24,_i
019C 8150 subi R24,1
019E 80932000 sts _i,R24
01A2 .dbline 51
01A2 L23:
01A2 .dbline 47
01A2 ;
01A2 ; while ( i > 0 ) /* p=pow(2,3-L)*j; */
01A2 2224 clr R2
01A4 30902000 lds R3,_i
01A8 2314 cp R2,R3
01AA 80F3 brlo L22
01AC .dbline 52
01AC ; {
01AC ; p = p * 2 ;
01AC ; i -- ;
01AC ; }
01AC ; p=p*j;
01AC 9501 movw R18,R10
01AE 8701 movw R16,R14
01B0 0E940000 xcall empy16s
01B4 7801 movw R14,R16
01B6 .dbline 54
01B6 ;
01B6 ; for ( k = j ; k < 8 ; k = k + 2 * b ) /* for (3) */
01B6 6501 movw R12,R10
01B8 F8C1 xjmp L28
01BA L25:
01BA .dbline 55
01BA .dbline 55
01BA 00E0 ldi R16,L29
01BE 0E940000 xcall lpm32
01C2 3A93 st -y,R19
01C4 2A93 st -y,R18
01C6 1A93 st -y,R17
01C8 0A93 st -y,R16
01CA 8701 movw R16,R14
01CC 0E940000 xcall int2fp
01D0 3A93 st -y,R19
01D2 2A93 st -y,R18
01D4 1A93 st -y,R17
01D6 0A93 st -y,R16
01D8 0E940000 xcall empy32fs
01DC 00E0 ldi R16,L30
01E0 0E940000 xcall lpm32
01E4 3A93 st -y,R19
01E6 2A93 st -y,R18
01E8 1A93 st -y,R17
01EA 0A93 st -y,R16
01EC 0E940000 xcall div32f
01F0 0E940000 xcall fp2int
01F4 7801 movw R14,R16
01F6 .dbline 56
01F6 04E0 ldi R16,4
01F8 10E0 ldi R17,0
01FA 9601 movw R18,R12
01FC 0E940000 xcall empy16s
0200 F801 movw R30,R16
0202 0CA0 ldd R0,y+36
0204 1DA0 ldd R1,y+37
0206 E00D add R30,R0
0208 F11D adc R31,R1
020A 2080 ldd R2,z+0
020C 3180 ldd R3,z+1
020E 4280 ldd R4,z+2
0210 5380 ldd R5,z+3
0212 FE01 movw R30,R28
0214 2082 std z+0,R2
0216 3182 std z+1,R3
0218 4282 std z+2,R4
021A 5382 std z+3,R5
021C .dbline 57
021C 04E0 ldi R16,4
021E 10E0 ldi R17,0
0220 9601 movw R18,R12
0222 0E940000 xcall empy16s
0226 F801 movw R30,R16
0228 0EA0 ldd R0,y+38
022A 1FA0 ldd R1,y+39
022C E00D add R30,R0
022E F11D adc R31,R1
0230 2080 ldd R2,z+0
0232 3180 ldd R3,z+1
0234 4280 ldd R4,z+2
0236 5380 ldd R5,z+3
0238 FE01 movw R30,R28
023A 2482 std z+4,R2
023C 3582 std z+5,R3
023E 4682 std z+6,R4
0240 5782 std z+7,R5
0242 .dbline 58
0242 9601 movw R18,R12
0244 0E88 ldd R0,y+22
0246 1F88 ldd R1,y+23
0248 200D add R18,R0
024A 311D adc R19,R1
024C 04E0 ldi R16,4
024E 10E0 ldi R17,0
0250 0E940000 xcall empy16s
0254 F801 movw R30,R16
0256 0CA0 ldd R0,y+36
0258 1DA0 ldd R1,y+37
025A E00D add R30,R0
025C F11D adc R31,R1
025E 2080 ldd R2,z+0
0260 3180 ldd R3,z+1
0262 4280 ldd R4,z+2
0264 5380 ldd R5,z+3
0266 FE01 movw R30,R28
0268 2086 std z+8,R2
026A 3186 std z+9,R3
026C 4286 std z+10,R4
026E 5386 std z+11,R5
0270 .dbline 59
0270 8701 movw R16,R14
0272 0E940000 xcall int2fp
0276 0E940000 xcall _cos
027A 1801 movw R2,R16
027C 2901 movw R4,R18
027E 8701 movw R16,R14
0280 0E940000 xcall int2fp
0284 2F92 push R2
0286 3F92 push R3
0288 4F92 push R4
028A 5F92 push R5
028C 0E940000 xcall _sin
0290 5F90 pop R5
0292 4F90 pop R4
0294 3F90 pop R3
0296 2F90 pop R2
0298 3801 movw R6,R16
029A 4901 movw R8,R18
029C 04E0 ldi R16,4
029E 10E0 ldi R17,0
02A0 9601 movw R18,R12
02A2 0E940000 xcall empy16s
02A6 C801 movw R24,R16
02A8 0CA0 ldd R0,y+36
02AA 1DA0 ldd R1,y+37
02AC 800D add R24,R0
02AE 911D adc R25,R1
02B0 FC01 movw R30,R24
02B2 4081 ldd R20,z+0
02B4 5181 ldd R21,z+1
02B6 6281 ldd R22,z+2
02B8 7381 ldd R23,z+3
02BA 7A93 st -y,R23
02BC 6A93 st -y,R22
02BE 5A93 st -y,R21
02C0 4A93 st -y,R20
02C2 9601 movw R18,R12
02C4 ; stack offset 4
02C4 0A8C ldd R0,y+26
02C6 1B8C ldd R1,y+27
02C8 200D add R18,R0
02CA 311D adc R19,R1
02CC 04E0 ldi R16,4
02CE 10E0 ldi R17,0
02D0 0E940000 xcall empy16s
02D4 F801 movw R30,R16
02D6 ; stack offset 4
02D6 08A4 ldd R0,y+40
02D8 19A4 ldd R1,y+41
02DA E00D add R30,R0
02DC F11D adc R31,R1
02DE 4081 ldd R20,z+0
02E0 5181 ldd R21,z+1
02E2 6281 ldd R22,z+2
02E4 7381 ldd R23,z+3
02E6 7A93 st -y,R23
02E8 6A93 st -y,R22
02EA 5A93 st -y,R21
02EC 4A93 st -y,R20
02EE 5A92 st -y,R5
02F0 4A92 st -y,R4
02F2 3A92 st -y,R3
02F4 2A92 st -y,R2
02F6 0E940000 xcall empy32fs
02FA 0E940000 xcall add32fs
02FE 9601 movw R18,R12
0300 ; stack offset 4
0300 0A8C ldd R0,y+26
0302 1B8C ldd R1,y+27
0304 200D add R18,R0
0306 311D adc R19,R1
0308 04E0 ldi R16,4
030A 10E0 ldi R17,0
030C 0E940000 xcall empy16s
0310 F801 movw R30,R16
0312 ; stack offset 4
0312 0AA4 ldd R0,y+42
0314 1BA4 ldd R1,y+43
0316 E00D add R30,R0
0318 F11D adc R31,R1
031A 2080 ldd R2,z+0
031C 3180 ldd R3,z+1
031E 4280 ldd R4,z+2
0320 5380 ldd R5,z+3
0322 5A92 st -y,R5
0324 4A92 st -y,R4
0326 3A92 st -y,R3
0328 2A92 st -y,R2
032A 9A92 st -y,R9
032C 8A92 st -y,R8
032E 7A92 st -y,R7
0330 6A92 st -y,R6
0332 0E940000 xcall empy32fs
0336 0E940000 xcall add32f
033A FC01 movw R30,R24
033C 0083 std z+0,R16
033E 1183 std z+1,R17
0340 2283 std z+2,R18
0342 3383 std z+3,R19
0344 .dbline 60
0344 8701 movw R16,R14
0346 0E940000 xcall int2fp
034A 0E940000 xcall _sin
034E 1801 movw R2,R16
0350 2901 movw R4,R18
0352 8701 movw R16,R14
0354 0E940000 xcall int2fp
0358 2F92 push R2
035A 3F92 push R3
035C 4F92 push R4
035E 5F92 push R5
0360 0E940000 xcall _cos
0364 5F90 pop R5
0366 4F90 pop R4
0368 3F90 pop R3
036A 2F90 pop R2
036C 3801 movw R6,R16
036E 4901 movw R8,R18
0370 04E0 ldi R16,4
0372 10E0 ldi R17,0
0374 9601 movw R18,R12
0376 0E940000 xcall empy16s
037A C801 movw R24,R16
037C 0EA0 ldd R0,y+38
037E 1FA0 ldd R1,y+39
0380 800D add R24,R0
0382 911D adc R25,R1
0384 FC01 movw R30,R24
0386 4081 ldd R20,z+0
0388 5181 ldd R21,z+1
038A 6281 ldd R22,z+2
038C 7381 ldd R23,z+3
038E 7A93 st -y,R23
0390 6A93 st -y,R22
0392 5A93 st -y,R21
0394 4A93 st -y,R20
0396 9601 movw R18,R12
0398 ; stack offset 4
0398 0A8C ldd R0,y+26
039A 1B8C ldd R1,y+27
039C 200D add R18,R0
039E 311D adc R19,R1
03A0 04E0 ldi R16,4
03A2 10E0 ldi R17,0
03A4 0E940000 xcall empy16s
03A8 F801 movw R30,R16
03AA ; stack offset 4
03AA 08A4 ldd R0,y+40
03AC 19A4 ldd R1,y+41
03AE E00D add R30,R0
03B0 F11D adc R31,R1
03B2 4081 ldd R20,z+0
03B4 5181 ldd R21,z+1
03B6 6281 ldd R22,z+2
03B8 7381 ldd R23,z+3
03BA 7A93 st -y,R23
03BC 6A93 st -y,R22
03BE 5A93 st -y,R21
03C0 4A93 st -y,R20
03C2 5A92 st -y,R5
03C4 4A92 st -y,R4
03C6 3A92 st -y,R3
03C8 2A92 st -y,R2
03CA 0E940000 xcall empy32fs
03CE 0E940000 xcall sub32fs
03D2 9601 movw R18,R12
03D4 ; stack offset 4
03D4 0A8C ldd R0,y+26
03D6 1B8C ldd R1,y+27
03D8 200D add R18,R0
03DA 311D adc R19,R1
03DC 04E0 ldi R16,4
03DE 10E0 ldi R17,0
03E0 0E940000 xcall empy16s
03E4 F801 movw R30,R16
03E6 ; stack offset 4
03E6 0AA4 ldd R0,y+42
03E8 1BA4 ldd R1,y+43
03EA E00D add R30,R0
03EC F11D adc R31,R1
03EE 2080 ldd R2,z+0
03F0 3180 ldd R3,z+1
03F2 4280 ldd R4,z+2
03F4 5380 ldd R5,z+3
03F6 5A92 st -y,R5
03F8 4A92 st -y,R4
03FA 3A92 st -y,R3
03FC 2A92 st -y,R2
03FE 9A92 st -y,R9
0400 8A92 st -y,R8
0402 7A92 st -y,R7
0404 6A92 st -y,R6
0406 0E940000 xcall empy32fs
040A 0E940000 xcall add32f
040E FC01 movw R30,R24
0410 0083 std z+0,R16
0412 1183 std z+1,R17
0414 2283 std z+2,R18
0416 3383 std z+3,R19
0418 .dbline 61
0418 8701 movw R16,R14
041A 0E940000 xcall int2fp
041E 0E940000 xcall _cos
0422 1801 movw R2,R16
0424 2901 movw R4,R18
0426 8701 movw R16,R14
0428 0E940000 xcall int2fp
042C 2F92 push R2
042E 3F92 push R3
0430 4F92 push R4
0432 5F92 push R5
0434 0E940000 xcall _sin
0438 5F90 pop R5
043A 4F90 pop R4
043C 3F90 pop R3
043E 2F90 pop R2
0440 3801 movw R6,R16
0442 4901 movw R8,R18
0444 9601 movw R18,R12
0446 0E88 ldd R0,y+22
0448 1F88 ldd R1,y+23
044A 200D add R18,R0
044C 311D adc R19,R1
044E 04E0 ldi R16,4
0450 10E0 ldi R17,0
0452 0E940000 xcall empy16s
0456 C801 movw R24,R16
0458 0CA0 ldd R0,y+36
045A 1DA0 ldd R1,y+37
045C 800D add R24,R0
045E 911D adc R25,R1
0460 FE01 movw R30,R28
0462 4081 ldd R20,z+0
0464 5181 ldd R21,z+1
0466 6281 ldd R22,z+2
0468 7381 ldd R23,z+3
046A 7A93 st -y,R23
046C 6A93 st -y,R22
046E 5A93 st -y,R21
0470 4A93 st -y,R20
0472 FC01 movw R30,R24
0474 4081 ldd R20,z+0
0476 5181 ldd R21,z+1
0478 6281 ldd R22,z+2
047A 7381 ldd R23,z+3
047C 7A93 st -y,R23
047E 6A93 st -y,R22
0480 5A93 st -y,R21
0482 4A93 st -y,R20
0484 5A92 st -y,R5
0486 4A92 st -y,R4
0488 3A92 st -y,R3
048A 2A92 st -y,R2
048C 0E940000 xcall empy32fs
0490 0E940000 xcall sub32fs
0494 9601 movw R18,R12
0496 ; stack offset 4
0496 0A8C ldd R0,y+26
0498 1B8C ldd R1,y+27
049A 200D add R18,R0
049C 311D adc R19,R1
049E 04E0 ldi R16,4
04A0 10E0 ldi R17,0
04A2 0E940000 xcall empy16s
04A6 F801 movw R30,R16
04A8 ; stack offset 4
04A8 0AA4 ldd R0,y+42
04AA 1BA4 ldd R1,y+43
04AC E00D add R30,R0
04AE F11D adc R31,R1
04B0 2080 ldd R2,z+0
04B2 3180 ldd R3,z+1
04B4 4280 ldd R4,z+2
04B6 5380 ldd R5,z+3
04B8 5A92 st -y,R5
04BA 4A92 st -y,R4
04BC 3A92 st -y,R3
04BE 2A92 st -y,R2
04C0 9A92 st -y,R9
04C2 8A92 st -y,R8
04C4 7A92 st -y,R7
04C6 6A92 st -y,R6
04C8 0E940000 xcall empy32fs
04CC 0E940000 xcall sub32f
04D0 FC01 movw R30,R24
04D2 0083 std z+0,R16
04D4 1183 std z+1,R17
04D6 2283 std z+2,R18
04D8 3383 std z+3,R19
04DA .dbline 62
04DA 8701 movw R16,R14
04DC 0E940000 xcall int2fp
04E0 0E940000 xcall _sin
04E4 1801 movw R2,R16
04E6 2901 movw R4,R18
04E8 8701 movw R16,R14
04EA 0E940000 xcall int2fp
04EE 2F92 push R2
04F0 3F92 push R3
04F2 4F92 push R4
04F4 5F92 push R5
04F6 0E940000 xcall _cos
04FA 5F90 pop R5
04FC 4F90 pop R4
04FE 3F90 pop R3
0500 2F90 pop R2
0502 3801 movw R6,R16
0504 4901 movw R8,R18
0506 FE01 movw R30,R28
0508 4481 ldd R20,z+4
050A 5581 ldd R21,z+5
050C 6681 ldd R22,z+6
050E 7781 ldd R23,z+7
0510 7A93 st -y,R23
0512 6A93 st -y,R22
0514 5A93 st -y,R21
0516 4A93 st -y,R20
0518 FE01 movw R30,R28
051A ; stack offset 4
051A 4485 ldd R20,z+12
051C 5585 ldd R21,z+13
051E 6685 ldd R22,z+14
0520 7785 ldd R23,z+15
0522 7A93 st -y,R23
0524 6A93 st -y,R22
0526 5A93 st -y,R21
0528 4A93 st -y,R20
052A 5A92 st -y,R5
052C 4A92 st -y,R4
052E 3A92 st -y,R3
0530 2A92 st -y,R2
0532 0E940000 xcall empy32fs
0536 0E940000 xcall add32fs
053A 9601 movw R18,R12
053C ; stack offset 4
053C 0A8C ldd R0,y+26
053E 1B8C ldd R1,y+27
0540 200D add R18,R0
0542 311D adc R19,R1
0544 04E0 ldi R16,4
0546 10E0 ldi R17,0
0548 0E940000 xcall empy16s
054C F801 movw R30,R16
054E ; stack offset 4
054E 0AA4 ldd R0,y+42
0550 1BA4 ldd R1,y+43
0552 E00D add R30,R0
0554 F11D adc R31,R1
0556 2080 ldd R2,z+0
0558 3180 ldd R3,z+1
055A 4280 ldd R4,z+2
055C 5380 ldd R5,z+3
055E 5A92 st -y,R5
0560 4A92 st -y,R4
0562 3A92 st -y,R3
0564 2A92 st -y,R2
0566 9A92 st -y,R9
0568 8A92 st -y,R8
056A 7A92 st -y,R7
056C 6A92 st -y,R6
056E 0E940000 xcall empy32fs
0572 0E940000 xcall sub32f
0576 9601 movw R18,R12
0578 0E88 ldd R0,y+22
057A 1F88 ldd R1,y+23
057C 200D add R18,R0
057E 311D adc R19,R1
0580 04E0 ldi R16,4
0582 10E0 ldi R17,0
0584 0E940000 xcall empy16s
0588 F801 movw R30,R16
058A 0EA0 ldd R0,y+38
058C 1FA0 ldd R1,y+39
058E E00D add R30,R0
0590 F11D adc R31,R1
0592 0083 std z+0,R16
0594 1183 std z+1,R17
0596 2283 std z+2,R18
0598 3383 std z+3,R19
059A .dbline 69
059A L26:
059A .dbline 54
059A 02E0 ldi R16,2
059C 10E0 ldi R17,0
059E 2E89 ldd R18,y+22
05A0 3F89 ldd R19,y+23
05A2 0E940000 xcall empy16s
05A6 C00E add R12,R16
05A8 D11E adc R13,R17
05AA L28:
05AA .dbline 54
05AA C601 movw R24,R12
05AC 8830 cpi R24,8
05AE E0E0 ldi R30,0
05B0 9E07 cpc R25,R30
05B2 0CF4 brge X2
05B4 02CE xjmp L25
05B6 X2:
05B6 .dbline 71
05B6 L19:
05B6 .dbline 42
05B6 C501 movw R24,R10
05B8 0196 adiw R24,1
05BA 5C01 movw R10,R24
05BC L21:
05BC .dbline 42
05BC 8E89 ldd R24,y+22
05BE 9F89 ldd R25,y+23
05C0 0197 sbiw R24,1
05C2 8A15 cp R24,R10
05C4 9B05 cpc R25,R11
05C6 0CF0 brlt X3
05C8 D6CD xjmp L18
05CA X3:
05CA .dbline 73
05CA L12:
05CA .dbline 32
05CA 888D ldd R24,y+24
05CC 998D ldd R25,y+25
05CE 0196 adiw R24,1
05D0 998F std y+25,R25
05D2 888F std y+24,R24
05D4 .dbline 32
05D4 83E0 ldi R24,3
05D6 90E0 ldi R25,0
05D8 088C ldd R0,y+24
05DA 198C ldd R1,y+25
05DC 8015 cp R24,R0
05DE 9105 cpc R25,R1
05E0 0CF0 brlt X4
05E2 AACD xjmp L11
05E4 X4:
05E4 .dbline 75
05E4 ; { p=2*PI*p/8;
05E4 ; TR = dataR [ k ] ;
05E4 ; TI = dataI [ k ] ;
05E4 ; temp = dataR [ k + b ] ;
05E4 ; dataR[k]=dataR[k]+dataR[k+b]*cos(p)+dataI[k+b]*sin(p);
05E4 ; dataI[k]=dataI[k]-dataR[k+b]*sin(p)+dataI[k+b]*cos(p);
05E4 ; dataR[k+b]=TR-dataR[k+b]*cos(p)-dataI[k+b]*sin(p);
05E4 ; dataI[k+b]=TI+temp*sin(p)-dataI[k+b]*cos(p);
05E4 ;
05E4 ;
05E4 ; /*dataR [ k ] = dataR [ k ] + dataR [ k + b ] * cos_tab [ p ] + dataI [ k + b ] * sin_tab [ p ] ;
05E4 ; dataI [ k ] = dataI [ k ] - dataR [ k + b ] * sin_tab [ p ] + dataI [ k + b ] * cos_tab [ p ] ;
05E4 ; dataR [ k + b ] = TR - dataR [ k + b ] * cos_tab [ p ] - dataI [ k + b ] * sin_tab [ p ] ;
05E4 ; dataI [ k + b ] = TI + temp * sin_tab [ p ] - dataI [ k + b ] * cos_tab [ p ] ;*/
05E4 ; } /* END for (3) */
05E4 ;
05E4 ; } /* END for (2) */
05E4 ;
05E4 ; } /* END for (1) */
05E4 ;
05E4 ; for ( i = 0 ; i < 32 ; i ++ )
05E4 2224 clr R2
05E6 20922000 sts _i,R2
05EA 93C0 xjmp L34
05EC L31:
05EC .dbline 76
05EC ; { /* 只需要32次以下的谐波进行分析 */
05EC .dbline 77
05EC ; w [ i ] = sqrt ( dataR [ i ] * dataR [ i ] + dataI [ i ] * dataI [ i ] ) ;
05EC 20902000 lds R2,_i
05F0 84E0 ldi R24,4
05F2 829D mul R24,R2
05F4 1001 movw R2,R0
05F6 F101 movw R30,R2
05F8 0CA0 ldd R0,y+36
05FA 1DA0 ldd R1,y+37
05FC E00D add R30,R0
05FE F11D adc R31,R1
0600 4080 ldd R4,z+0
0602 5180 ldd R5,z+1
0604 6280 ldd R6,z+2
0606 7380 ldd R7,z+3
0608 FE01 movw R30,R28
060A 4686 std z+14,R4
060C 5786 std z+15,R5
060E 608A std z+16,R6
0610 718A std z+17,R7
0612 F101 movw R30,R2
0614 0EA0 ldd R0,y+38
0616 1FA0 ldd R1,y+39
0618 E00D add R30,R0
061A F11D adc R31,R1
061C 2080 ldd R2,z+0
061E 3180 ldd R3,z+1
0620 4280 ldd R4,z+2
0622 5380 ldd R5,z+3
0624 FE01 movw R30,R28
0626 228A std z+18,R2
0628 338A std z+19,R3
062A 448A std z+20,R4
062C 558A std z+21,R5
062E FE01 movw R30,R28
0630 2684 ldd R2,z+14
0632 3784 ldd R3,z+15
0634 4088 ldd R4,z+16
0636 5188 ldd R5,z+17
0638 5A92 st -y,R5
063A 4A92 st -y,R4
063C 3A92 st -y,R3
063E 2A92 st -y,R2
0640 FE01 movw R30,R28
0642 ; stack offset 4
0642 2288 ldd R2,z+18
0644 3388 ldd R3,z+19
0646 4488 ldd R4,z+20
0648 5588 ldd R5,z+21
064A 5A92 st -y,R5
064C 4A92 st -y,R4
064E 3A92 st -y,R3
0650 2A92 st -y,R2
0652 0E940000 xcall empy32fs
0656 FE01 movw R30,R28
0658 ; stack offset 4
0658 2688 ldd R2,z+22
065A 3788 ldd R3,z+23
065C 408C ldd R4,z+24
065E 518C ldd R5,z+25
0660 5A92 st -y,R5
0662 4A92 st -y,R4
0664 3A92 st -y,R3
0666 2A92 st -y,R2
0668 FE01 movw R30,R28
066A ; stack offset 8
066A 228C ldd R2,z+26
066C 338C ldd R3,z+27
066E 448C ldd R4,z+28
0670 558C ldd R5,z+29
0672 5A92 st -y,R5
0674 4A92 st -y,R4
0676 3A92 st -y,R3
0678 2A92 st -y,R2
067A 0E940000 xcall empy32fs
067E 0E940000 xcall add32f
0682 0E940000 xcall _sqrt
0686 1801 movw R2,R16
0688 2901 movw R4,R18
068A 3A93 st -y,R19
068C 2A93 st -y,R18
068E 1A93 st -y,R17
0690 0A93 st -y,R16
0692 00E0 ldi R16,L37
0696 0E940000 xcall lpm32
069A 3A93 st -y,R19
069C 2A93 st -y,R18
069E 1A93 st -y,R17
06A0 0A93 st -y,R16
06A2 0E940000 xcall cmp32f
06A6 ACF0 brlt L35
06A8 5A92 st -y,R5
06AA 4A92 st -y,R4
06AC 3A92 st -y,R3
06AE 2A92 st -y,R2
06B0 00E0 ldi R16,L37
06B4 0E940000 xcall lpm32
06B8 3A93 st -y,R19
06BA 2A93 st -y,R18
06BC 1A93 st -y,R17
06BE 0A93 st -y,R16
06C0 0E940000 xcall sub32f
06C4 0E940000 xcall fp2int
06C8 C801 movw R24,R16
06CA 8050 subi R24,0 ; offset = 32768
06CC 9048 sbci R25,128
06CE 7C01 movw R14,R24
06D0 05C0 xjmp L36
06D2 L35:
06D2 8101 movw R16,R2
06D4 9201 movw R18,R4
06D6 0E940000 xcall fp2int
06DA 7801 movw R14,R16
06DC L36:
06DC 80E0 ldi R24,<_w
06DE 90E0 ldi R25,>_w
06E0 E0912000 lds R30,_i
06E4 FF27 clr R31
06E6 E80F add R30,R24
06E8 F91F adc R31,R25
06EA E082 std z+0,R14
06EC .dbline 78
06EC ; if ( i )
06EC 60902000 lds R6,_i
06F0 6620 tst R6
06F2 51F0 breq L38
06F4 .dbline 79
06F4 ; {
06F4 .dbline 80
06F4 ; w [ i ] = w [ i ] / 64 ;
06F4 7724 clr R7
06F6 680E add R6,R24
06F8 791E adc R7,R25
06FA 10E4 ldi R17,64
06FC F301 movw R30,R6
06FE 0081 ldd R16,z+0
0700 0E940000 xcall div8u
0704 F301 movw R30,R6
0706 0083 std z+0,R16
0708 .dbline 81
0708 ; }
0708 L38:
0708 .dbline 82
0708 L32:
0708 .dbline 75
0708 80912000 lds R24,_i
070C 8F5F subi R24,255 ; addi 1
070E 80932000 sts _i,R24
0712 L34:
0712 .dbline 75
0712 80912000 lds R24,_i
0716 8032 cpi R24,32
0718 08F4 brsh X5
071A 68CF xjmp L31
071C X5:
071C .dbline 83
071C ; }
071C ; w [ 0 ] = w [ 0 ] / 2 ;
071C 60900000 lds R6,_w
0720 6694 lsr R6
0722 60920000 sts _w,R6
0726 .dbline -2
0726 L1:
0726 6A96 adiw R28,26
0728 0E940000 xcall pop_gset5
072C 2496 adiw R28,4
072E .dbline 0 ; func end
072E 0895 ret
0730 .dbsym l xx 12 I
0730 .dbsym r x2 14 I
0730 .dbsym r x1 10 I
0730 .dbsym r x0 12 I
0730 .dbsym l L 24 I
0730 .dbsym r j 10 I
0730 .dbsym l temp 8 D
0730 .dbsym l TI 4 D
0730 .dbsym l TR 0 D
0730 .dbsym l b 22 I
0730 .dbsym r p 14 I
0730 .dbsym r k 12 I
0730 .dbsym l dataI 38 pD
0730 .dbsym l dataR 36 pD
0730 .dbend
0730 .dbfunc e main _main fV
.even
0730 _main::
0730 .dbline -1
0730 .dbline 88
0730 ;
0730 ; }
0730 ;
0730 ; void main()
0730 ; {
0730 .dbline 89
0730 ; FFT(dataR,dataI);
0730 20E0 ldi R18,<_dataI
0732 30E0 ldi R19,>_dataI
0734 00E0 ldi R16,<_dataR
0736 10E0 ldi R17,>_dataR
0738 63DC xcall _FFT
073A L41:
073A .dbline 90
073A L42:
073A .dbline 90
073A FFCF xjmp L41
073C X6:
073C .dbline -2
073C L40:
073C .dbline 0 ; func end
073C 0895 ret
073E .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\HJN\Design\AVR\fft\ff.c
0000 _w::
0000 .blkb 32
0020 .dbsym e w _w A[32:32]c
0020 _i::
0020 .blkb 1
0021 .dbsym e i _i c
.area lit(rom, con, rel)
0000 L37:
0000 00000047 .word 0x0,0x4700
0004 L30:
0004 00000041 .word 0x0,0x4100
0008 L29:
0008 DA0FC940 .word 0xfda,0x40c9
000C L10:
000C 00000000 .word 0x0,0x0