www.pudn.com > fft_iccavr.rar > fffff.lis
.module fffff.c
.area data(ram, con, rel)
0000 _dataR::
0000 .blkb 2
.area idata
0000 0500 .word 5
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 0500 .word 5
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 0500 .word 5
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 0500 .word 5
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 0000 .word 0
.area data(ram, con, rel)
000A .blkb 2
.area idata
000A 0000 .word 0
.area data(ram, con, rel)
000C .blkb 2
.area idata
000C 0000 .word 0
.area data(ram, con, rel)
000E .blkb 2
.area idata
000E 0000 .word 0
.area data(ram, con, rel)
0010 .blkb 2
.area idata
0010 0500 .word 5
.area data(ram, con, rel)
0012 .blkb 2
.area idata
0012 0500 .word 5
.area data(ram, con, rel)
0014 .blkb 2
.area idata
0014 0500 .word 5
.area data(ram, con, rel)
0016 .blkb 2
.area idata
0016 0500 .word 5
.area data(ram, con, rel)
0018 .blkb 2
.area idata
0018 0000 .word 0
.area data(ram, con, rel)
001A .blkb 2
.area idata
001A 0000 .word 0
.area data(ram, con, rel)
001C .blkb 2
.area idata
001C 0000 .word 0
.area data(ram, con, rel)
001E .blkb 2
.area idata
001E 0000 .word 0
.area data(ram, con, rel)
0020 .dbfile D:\HJN\Design\AVR\fft\fffff.c
0020 .dbsym e dataR _dataR A[32:16]I
.area text(rom, con, rel)
0000 .dbfile D:\HJN\Design\AVR\fft\fffff.c
0000 .dbfunc e FFT _FFT fV
0000 ; x6 -> y+22
0000 ; x5 -> y+20
0000 ; x4 -> y+18
0000 ; xx -> y+16
0000 ; x3 -> y+14
0000 ; x2 -> y+12
0000 ; x1 -> R12,R13
0000 ; x0 -> R10,R11
0000 ; L -> y+27
0000 ; j -> R14,R15
0000 ; temp -> y+8
0000 ; TI -> y+4
0000 ; TR -> y+0
0000 ; i -> y+26
0000 ; p -> R10,R11
0000 ; b -> y+24
0000 ; k -> R12,R13
0000 ; dataI -> y+41
0000 ; dataR -> y+39
.even
0000 _FFT::
0000 0E940000 xcall push_arg4
0004 0E940000 xcall push_gset5
0008 6D97 sbiw R28,29
000A .dbline -1
000A .dbline 11
000A ; #include
000A ; #include
000A ; #define PI 3.1415926
000A ; #define qq PI/8
000A ;
000A ; int dataR[]={5,5,5,5,0,0,0,0,5,5,5,5,0,0,0,0};
000A ; int dataI[16],w[32];
000A ;
000A ;
000A ; void FFT(int dataR[],int dataI[])
000A ; {int x0,x1,x2,x3,x4,x5,x6,xx;
000A .dbline 16
000A ; unsigned char i;
000A ; int L,j,k,b,p;
000A ; float TR,TI,temp;
000A ; /********** following code invert sequence ************/
000A ; for(i=0;i<16;i++)
000A 0024 clr R0
000C 0A8E std y+26,R0
000E 67C0 xjmp L5
0010 L2:
0010 .dbline 17
0010 .dbline 17
0010 2224 clr R2
0012 3324 clr R3
0014 3F8A std y+23,R3
0016 2E8A std y+22,R2
0018 3D8A std y+21,R3
001A 2C8A std y+20,R2
001C 3B8A std y+19,R3
001E 2A8A std y+18,R2
0020 3F86 std y+15,R3
0022 2E86 std y+14,R2
0024 3D86 std y+13,R3
0026 2C86 std y+12,R2
0028 CC24 clr R12
002A DD24 clr R13
002C AA24 clr R10
002E BB24 clr R11
0030 .dbline 18
0030 8A8D ldd R24,y+26
0032 9927 clr R25
0034 8170 andi R24,1
0036 9070 andi R25,0
0038 5C01 movw R10,R24
003A .dbline 18
003A 8A8D ldd R24,y+26
003C 9927 clr R25
003E 9595 asr R25
0040 8795 ror R24
0042 8170 andi R24,1
0044 9070 andi R25,0
0046 6C01 movw R12,R24
0048 .dbline 18
0048 8A8D ldd R24,y+26
004A 9927 clr R25
004C 9595 asr R25
004E 8795 ror R24
0050 9595 asr R25
0052 8795 ror R24
0054 8170 andi R24,1
0056 9070 andi R25,0
0058 9D87 std y+13,R25
005A 8C87 std y+12,R24
005C .dbline 18
005C 8A8D ldd R24,y+26
005E 9927 clr R25
0060 9595 asr R25
0062 8795 ror R24
0064 9595 asr R25
0066 8795 ror R24
0068 9595 asr R25
006A 8795 ror R24
006C 8170 andi R24,1
006E 9070 andi R25,0
0070 9F87 std y+15,R25
0072 8E87 std y+14,R24
0074 .dbline 20
0074 04E0 ldi R16,4
0076 10E0 ldi R17,0
0078 9601 movw R18,R12
007A 0E940000 xcall empy16s
007E 1801 movw R2,R16
0080 08E0 ldi R16,8
0082 10E0 ldi R17,0
0084 9501 movw R18,R10
0086 0E940000 xcall empy16s
008A 2801 movw R4,R16
008C 420C add R4,R2
008E 531C adc R5,R3
0090 2C85 ldd R18,y+12
0092 3D85 ldd R19,y+13
0094 02E0 ldi R16,2
0096 10E0 ldi R17,0
0098 0E940000 xcall empy16s
009C 400E add R4,R16
009E 511E adc R5,R17
00A0 2E84 ldd R2,y+14
00A2 3F84 ldd R3,y+15
00A4 420C add R4,R2
00A6 531C adc R5,R3
00A8 598A std y+17,R5
00AA 488A std y+16,R4
00AC .dbline 21
00AC 82E0 ldi R24,2
00AE 0A8C ldd R0,y+26
00B0 809D mul R24,R0
00B2 F001 movw R30,R0
00B4 0FA0 ldd R0,y+39
00B6 18A4 ldd R1,y+40
00B8 E00D add R30,R0
00BA F11D adc R31,R1
00BC 2080 ldd R2,z+0
00BE 3180 ldd R3,z+1
00C0 9201 movw R18,R4
00C2 02E0 ldi R16,2
00C4 10E0 ldi R17,0
00C6 0E940000 xcall empy16s
00CA F801 movw R30,R16
00CC 09A4 ldd R0,y+41
00CE 1AA4 ldd R1,y+42
00D0 E00D add R30,R0
00D2 F11D adc R31,R1
00D4 3182 std z+1,R3
00D6 2082 std z+0,R2
00D8 .dbline 22
00D8 L3:
00D8 .dbline 16
00D8 0A8C ldd R0,y+26
00DA 0394 inc R0
00DC 0A8E std y+26,R0
00DE L5:
00DE .dbline 16
00DE 8A8D ldd R24,y+26
00E0 8031 cpi R24,16
00E2 08F4 brsh X0
00E4 95CF xjmp L2
00E6 X0:
00E6 .dbline 23
00E6 ; { x0=x1=x2=x3=x4=x5=x6=0;
00E6 ; x0=i&0x01; x1=(i>>1)&0x01; x2=(i>>2)&0x01; x3=(i>>3)&0x01;
00E6 ; //x4=(i>>4)&0x01; x5=(i>>5)&0x01; x6=(i>>6)&0x01;
00E6 ; xx=x0*8+x1*4+x2*2+x3;
00E6 ; dataI[xx]=dataR[i];
00E6 ; }
00E6 ; for(i=0;i<16;i++)
00E6 0024 clr R0
00E8 0A8E std y+26,R0
00EA 20C0 xjmp L9
00EC L6:
00EC .dbline 24
00EC .dbline 24
00EC 82E0 ldi R24,2
00EE 0A8C ldd R0,y+26
00F0 809D mul R24,R0
00F2 1001 movw R2,R0
00F4 F101 movw R30,R2
00F6 09A4 ldd R0,y+41
00F8 1AA4 ldd R1,y+42
00FA E00D add R30,R0
00FC F11D adc R31,R1
00FE 4080 ldd R4,z+0
0100 5180 ldd R5,z+1
0102 F101 movw R30,R2
0104 0FA0 ldd R0,y+39
0106 18A4 ldd R1,y+40
0108 E00D add R30,R0
010A F11D adc R31,R1
010C 5182 std z+1,R5
010E 4082 std z+0,R4
0110 .dbline 24
0110 0A8C ldd R0,y+26
0112 809D mul R24,R0
0114 F001 movw R30,R0
0116 09A4 ldd R0,y+41
0118 1AA4 ldd R1,y+42
011A E00D add R30,R0
011C F11D adc R31,R1
011E 2224 clr R2
0120 3324 clr R3
0122 3182 std z+1,R3
0124 2082 std z+0,R2
0126 .dbline 24
0126 L7:
0126 .dbline 23
0126 0A8C ldd R0,y+26
0128 0394 inc R0
012A 0A8E std y+26,R0
012C L9:
012C .dbline 23
012C 8A8D ldd R24,y+26
012E 8031 cpi R24,16
0130 E8F2 brlo L6
0132 .dbline 26
0132 81E0 ldi R24,1
0134 90E0 ldi R25,0
0136 9C8F std y+28,R25
0138 8B8F std y+27,R24
013A L10:
013A .dbline 26
013A ; { dataR[i]=dataI[i]; dataI[i]=0; }
013A ; /************** following code FFT *******************/
013A ; for(L=1;L<=4;L++) { /* for(1) */
013A .dbline 27
013A ; b=1; i=L-1;
013A 81E0 ldi R24,1
013C 90E0 ldi R25,0
013E 998F std y+25,R25
0140 888F std y+24,R24
0142 .dbline 27
0142 8B8D ldd R24,y+27
0144 9C8D ldd R25,y+28
0146 0197 sbiw R24,1
0148 8A8F std y+26,R24
014A 0BC0 xjmp L15
014C L14:
014C .dbline 29
014C .dbline 29
014C 02E0 ldi R16,2
014E 10E0 ldi R17,0
0150 288D ldd R18,y+24
0152 398D ldd R19,y+25
0154 0E940000 xcall empy16s
0158 198F std y+25,R17
015A 088F std y+24,R16
015C .dbline 29
015C 0A8C ldd R0,y+26
015E 0A94 dec R0
0160 0A8E std y+26,R0
0162 .dbline 29
0162 L15:
0162 .dbline 28
0162 ; while(i>0)
0162 2224 clr R2
0164 0A8C ldd R0,y+26
0166 2014 cp R2,R0
0168 88F3 brlo L14
016A .dbline 30
016A ; {b=b*2; i--;} /* b= 2^(L-1) */
016A ; for(j=0;j<=b-1;j++) /* for (2) */
016A EE24 clr R14
016C FF24 clr R15
016E 72C2 xjmp L20
0170 L17:
0170 .dbline 31
0170 ; { p=1; i=4-L;
0170 .dbline 31
0170 81E0 ldi R24,1
0172 90E0 ldi R25,0
0174 5C01 movw R10,R24
0176 .dbline 31
0176 84E0 ldi R24,4
0178 0B8C ldd R0,y+27
017A 1C8C ldd R1,y+28
017C 8019 sub R24,R0
017E 9109 sbc R25,R1
0180 8A8F std y+26,R24
0182 09C0 xjmp L22
0184 L21:
0184 .dbline 33
0184 .dbline 33
0184 02E0 ldi R16,2
0186 10E0 ldi R17,0
0188 9501 movw R18,R10
018A 0E940000 xcall empy16s
018E 5801 movw R10,R16
0190 .dbline 33
0190 0A8C ldd R0,y+26
0192 0A94 dec R0
0194 0A8E std y+26,R0
0196 .dbline 33
0196 L22:
0196 .dbline 32
0196 ; while(i>0) /* p=pow(2,7-L)*j; */
0196 2224 clr R2
0198 0A8C ldd R0,y+26
019A 2014 cp R2,R0
019C 98F3 brlo L21
019E .dbline 34
019E ; {p=p*2; i--;}
019E ; p=p*j;for(k=j;k<16;k=k+2*b) /* for (3) */
019E 9701 movw R18,R14
01A0 8501 movw R16,R10
01A2 0E940000 xcall empy16s
01A6 5801 movw R10,R16
01A8 .dbline 34
01A8 6701 movw R12,R14
01AA 4BC2 xjmp L27
01AC L24:
01AC .dbline 35
01AC .dbline 35
01AC 02E0 ldi R16,2
01AE 10E0 ldi R17,0
01B0 9601 movw R18,R12
01B2 0E940000 xcall empy16s
01B6 F801 movw R30,R16
01B8 0FA0 ldd R0,y+39
01BA 18A4 ldd R1,y+40
01BC E00D add R30,R0
01BE F11D adc R31,R1
01C0 0081 ldd R16,z+0
01C2 1181 ldd R17,z+1
01C4 0E940000 xcall int2fp
01C8 FE01 movw R30,R28
01CA 0083 std z+0,R16
01CC 1183 std z+1,R17
01CE 2283 std z+2,R18
01D0 3383 std z+3,R19
01D2 .dbline 35
01D2 02E0 ldi R16,2
01D4 10E0 ldi R17,0
01D6 9601 movw R18,R12
01D8 0E940000 xcall empy16s
01DC F801 movw R30,R16
01DE 09A4 ldd R0,y+41
01E0 1AA4 ldd R1,y+42
01E2 E00D add R30,R0
01E4 F11D adc R31,R1
01E6 0081 ldd R16,z+0
01E8 1181 ldd R17,z+1
01EA 0E940000 xcall int2fp
01EE FE01 movw R30,R28
01F0 0483 std z+4,R16
01F2 1583 std z+5,R17
01F4 2683 std z+6,R18
01F6 3783 std z+7,R19
01F8 .dbline 35
01F8 9601 movw R18,R12
01FA 088C ldd R0,y+24
01FC 198C ldd R1,y+25
01FE 200D add R18,R0
0200 311D adc R19,R1
0202 02E0 ldi R16,2
0204 10E0 ldi R17,0
0206 0E940000 xcall empy16s
020A F801 movw R30,R16
020C 0FA0 ldd R0,y+39
020E 18A4 ldd R1,y+40
0210 E00D add R30,R0
0212 F11D adc R31,R1
0214 0081 ldd R16,z+0
0216 1181 ldd R17,z+1
0218 0E940000 xcall int2fp
021C FE01 movw R30,R28
021E 0087 std z+8,R16
0220 1187 std z+9,R17
0222 2287 std z+10,R18
0224 3387 std z+11,R19
0226 .dbline 36
0226 00E0 ldi R16,L28
022A 0E940000 xcall lpm32
022E 3A93 st -y,R19
0230 2A93 st -y,R18
0232 1A93 st -y,R17
0234 0A93 st -y,R16
0236 8501 movw R16,R10
0238 0E940000 xcall int2fp
023C 3A93 st -y,R19
023E 2A93 st -y,R18
0240 1A93 st -y,R17
0242 0A93 st -y,R16
0244 0E940000 xcall empy32f
0248 0E940000 xcall _cos
024C 1801 movw R2,R16
024E 2901 movw R4,R18
0250 00E0 ldi R16,L28
0254 0E940000 xcall lpm32
0258 3A93 st -y,R19
025A 2A93 st -y,R18
025C 1A93 st -y,R17
025E 0A93 st -y,R16
0260 8501 movw R16,R10
0262 0E940000 xcall int2fp
0266 3A93 st -y,R19
0268 2A93 st -y,R18
026A 1A93 st -y,R17
026C 0A93 st -y,R16
026E 0E940000 xcall empy32f
0272 2F92 push R2
0274 3F92 push R3
0276 4F92 push R4
0278 5F92 push R5
027A 0E940000 xcall _sin
027E 5F90 pop R5
0280 4F90 pop R4
0282 3F90 pop R3
0284 2F90 pop R2
0286 3801 movw R6,R16
0288 4901 movw R8,R18
028A 02E0 ldi R16,2
028C 10E0 ldi R17,0
028E 9601 movw R18,R12
0290 0E940000 xcall empy16s
0294 C801 movw R24,R16
0296 0FA0 ldd R0,y+39
0298 18A4 ldd R1,y+40
029A 800D add R24,R0
029C 911D adc R25,R1
029E FC01 movw R30,R24
02A0 0081 ldd R16,z+0
02A2 1181 ldd R17,z+1
02A4 0E940000 xcall int2fp
02A8 3A93 st -y,R19
02AA 2A93 st -y,R18
02AC 1A93 st -y,R17
02AE 0A93 st -y,R16
02B0 9601 movw R18,R12
02B2 ; stack offset 4
02B2 0C8C ldd R0,y+28
02B4 1D8C ldd R1,y+29
02B6 200D add R18,R0
02B8 311D adc R19,R1
02BA 02E0 ldi R16,2
02BC 10E0 ldi R17,0
02BE 0E940000 xcall empy16s
02C2 F801 movw R30,R16
02C4 ; stack offset 4
02C4 0BA4 ldd R0,y+43
02C6 1CA4 ldd R1,y+44
02C8 E00D add R30,R0
02CA F11D adc R31,R1
02CC 0081 ldd R16,z+0
02CE 1181 ldd R17,z+1
02D0 0E940000 xcall int2fp
02D4 3A93 st -y,R19
02D6 2A93 st -y,R18
02D8 1A93 st -y,R17
02DA 0A93 st -y,R16
02DC 5A92 st -y,R5
02DE 4A92 st -y,R4
02E0 3A92 st -y,R3
02E2 2A92 st -y,R2
02E4 0E940000 xcall empy32fs
02E8 0E940000 xcall add32fs
02EC 9601 movw R18,R12
02EE ; stack offset 4
02EE 0C8C ldd R0,y+28
02F0 1D8C ldd R1,y+29
02F2 200D add R18,R0
02F4 311D adc R19,R1
02F6 02E0 ldi R16,2
02F8 10E0 ldi R17,0
02FA 0E940000 xcall empy16s
02FE F801 movw R30,R16
0300 ; stack offset 4
0300 0DA4 ldd R0,y+45
0302 1EA4 ldd R1,y+46
0304 E00D add R30,R0
0306 F11D adc R31,R1
0308 0081 ldd R16,z+0
030A 1181 ldd R17,z+1
030C 0E940000 xcall int2fp
0310 3A93 st -y,R19
0312 2A93 st -y,R18
0314 1A93 st -y,R17
0316 0A93 st -y,R16
0318 9A92 st -y,R9
031A 8A92 st -y,R8
031C 7A92 st -y,R7
031E 6A92 st -y,R6
0320 0E940000 xcall empy32fs
0324 0E940000 xcall add32f
0328 0E940000 xcall fp2int
032C FC01 movw R30,R24
032E 1183 std z+1,R17
0330 0083 std z+0,R16
0332 .dbline 37
0332 00E0 ldi R16,L28
0336 0E940000 xcall lpm32
033A 3A93 st -y,R19
033C 2A93 st -y,R18
033E 1A93 st -y,R17
0340 0A93 st -y,R16
0342 8501 movw R16,R10
0344 0E940000 xcall int2fp
0348 3A93 st -y,R19
034A 2A93 st -y,R18
034C 1A93 st -y,R17
034E 0A93 st -y,R16
0350 0E940000 xcall empy32f
0354 0E940000 xcall _sin
0358 1801 movw R2,R16
035A 2901 movw R4,R18
035C 00E0 ldi R16,L28
0360 0E940000 xcall lpm32
0364 3A93 st -y,R19
0366 2A93 st -y,R18
0368 1A93 st -y,R17
036A 0A93 st -y,R16
036C 8501 movw R16,R10
036E 0E940000 xcall int2fp
0372 3A93 st -y,R19
0374 2A93 st -y,R18
0376 1A93 st -y,R17
0378 0A93 st -y,R16
037A 0E940000 xcall empy32f
037E 2F92 push R2
0380 3F92 push R3
0382 4F92 push R4
0384 5F92 push R5
0386 0E940000 xcall _cos
038A 5F90 pop R5
038C 4F90 pop R4
038E 3F90 pop R3
0390 2F90 pop R2
0392 3801 movw R6,R16
0394 4901 movw R8,R18
0396 02E0 ldi R16,2
0398 10E0 ldi R17,0
039A 9601 movw R18,R12
039C 0E940000 xcall empy16s
03A0 C801 movw R24,R16
03A2 09A4 ldd R0,y+41
03A4 1AA4 ldd R1,y+42
03A6 800D add R24,R0
03A8 911D adc R25,R1
03AA FC01 movw R30,R24
03AC 0081 ldd R16,z+0
03AE 1181 ldd R17,z+1
03B0 0E940000 xcall int2fp
03B4 3A93 st -y,R19
03B6 2A93 st -y,R18
03B8 1A93 st -y,R17
03BA 0A93 st -y,R16
03BC 9601 movw R18,R12
03BE ; stack offset 4
03BE 0C8C ldd R0,y+28
03C0 1D8C ldd R1,y+29
03C2 200D add R18,R0
03C4 311D adc R19,R1
03C6 02E0 ldi R16,2
03C8 10E0 ldi R17,0
03CA 0E940000 xcall empy16s
03CE F801 movw R30,R16
03D0 ; stack offset 4
03D0 0BA4 ldd R0,y+43
03D2 1CA4 ldd R1,y+44
03D4 E00D add R30,R0
03D6 F11D adc R31,R1
03D8 0081 ldd R16,z+0
03DA 1181 ldd R17,z+1
03DC 0E940000 xcall int2fp
03E0 3A93 st -y,R19
03E2 2A93 st -y,R18
03E4 1A93 st -y,R17
03E6 0A93 st -y,R16
03E8 5A92 st -y,R5
03EA 4A92 st -y,R4
03EC 3A92 st -y,R3
03EE 2A92 st -y,R2
03F0 0E940000 xcall empy32fs
03F4 0E940000 xcall sub32fs
03F8 9601 movw R18,R12
03FA ; stack offset 4
03FA 0C8C ldd R0,y+28
03FC 1D8C ldd R1,y+29
03FE 200D add R18,R0
0400 311D adc R19,R1
0402 02E0 ldi R16,2
0404 10E0 ldi R17,0
0406 0E940000 xcall empy16s
040A F801 movw R30,R16
040C ; stack offset 4
040C 0DA4 ldd R0,y+45
040E 1EA4 ldd R1,y+46
0410 E00D add R30,R0
0412 F11D adc R31,R1
0414 0081 ldd R16,z+0
0416 1181 ldd R17,z+1
0418 0E940000 xcall int2fp
041C 3A93 st -y,R19
041E 2A93 st -y,R18
0420 1A93 st -y,R17
0422 0A93 st -y,R16
0424 9A92 st -y,R9
0426 8A92 st -y,R8
0428 7A92 st -y,R7
042A 6A92 st -y,R6
042C 0E940000 xcall empy32fs
0430 0E940000 xcall add32f
0434 0E940000 xcall fp2int
0438 FC01 movw R30,R24
043A 1183 std z+1,R17
043C 0083 std z+0,R16
043E .dbline 38
043E 00E0 ldi R16,L28
0442 0E940000 xcall lpm32
0446 3A93 st -y,R19
0448 2A93 st -y,R18
044A 1A93 st -y,R17
044C 0A93 st -y,R16
044E 8501 movw R16,R10
0450 0E940000 xcall int2fp
0454 3A93 st -y,R19
0456 2A93 st -y,R18
0458 1A93 st -y,R17
045A 0A93 st -y,R16
045C 0E940000 xcall empy32f
0460 0E940000 xcall _cos
0464 1801 movw R2,R16
0466 2901 movw R4,R18
0468 00E0 ldi R16,L28
046C 0E940000 xcall lpm32
0470 3A93 st -y,R19
0472 2A93 st -y,R18
0474 1A93 st -y,R17
0476 0A93 st -y,R16
0478 8501 movw R16,R10
047A 0E940000 xcall int2fp
047E 3A93 st -y,R19
0480 2A93 st -y,R18
0482 1A93 st -y,R17
0484 0A93 st -y,R16
0486 0E940000 xcall empy32f
048A 2F92 push R2
048C 3F92 push R3
048E 4F92 push R4
0490 5F92 push R5
0492 0E940000 xcall _sin
0496 5F90 pop R5
0498 4F90 pop R4
049A 3F90 pop R3
049C 2F90 pop R2
049E 3801 movw R6,R16
04A0 4901 movw R8,R18
04A2 9601 movw R18,R12
04A4 088C ldd R0,y+24
04A6 198C ldd R1,y+25
04A8 200D add R18,R0
04AA 311D adc R19,R1
04AC 02E0 ldi R16,2
04AE 10E0 ldi R17,0
04B0 0E940000 xcall empy16s
04B4 C801 movw R24,R16
04B6 0FA0 ldd R0,y+39
04B8 18A4 ldd R1,y+40
04BA 800D add R24,R0
04BC 911D adc R25,R1
04BE FE01 movw R30,R28
04C0 4081 ldd R20,z+0
04C2 5181 ldd R21,z+1
04C4 6281 ldd R22,z+2
04C6 7381 ldd R23,z+3
04C8 7A93 st -y,R23
04CA 6A93 st -y,R22
04CC 5A93 st -y,R21
04CE 4A93 st -y,R20
04D0 FC01 movw R30,R24
04D2 0081 ldd R16,z+0
04D4 1181 ldd R17,z+1
04D6 0E940000 xcall int2fp
04DA 3A93 st -y,R19
04DC 2A93 st -y,R18
04DE 1A93 st -y,R17
04E0 0A93 st -y,R16
04E2 5A92 st -y,R5
04E4 4A92 st -y,R4
04E6 3A92 st -y,R3
04E8 2A92 st -y,R2
04EA 0E940000 xcall empy32fs
04EE 0E940000 xcall sub32fs
04F2 9601 movw R18,R12
04F4 ; stack offset 4
04F4 0C8C ldd R0,y+28
04F6 1D8C ldd R1,y+29
04F8 200D add R18,R0
04FA 311D adc R19,R1
04FC 02E0 ldi R16,2
04FE 10E0 ldi R17,0
0500 0E940000 xcall empy16s
0504 F801 movw R30,R16
0506 ; stack offset 4
0506 0DA4 ldd R0,y+45
0508 1EA4 ldd R1,y+46
050A E00D add R30,R0
050C F11D adc R31,R1
050E 0081 ldd R16,z+0
0510 1181 ldd R17,z+1
0512 0E940000 xcall int2fp
0516 3A93 st -y,R19
0518 2A93 st -y,R18
051A 1A93 st -y,R17
051C 0A93 st -y,R16
051E 9A92 st -y,R9
0520 8A92 st -y,R8
0522 7A92 st -y,R7
0524 6A92 st -y,R6
0526 0E940000 xcall empy32fs
052A 0E940000 xcall sub32f
052E 0E940000 xcall fp2int
0532 FC01 movw R30,R24
0534 1183 std z+1,R17
0536 0083 std z+0,R16
0538 .dbline 39
0538 00E0 ldi R16,L28
053C 0E940000 xcall lpm32
0540 3A93 st -y,R19
0542 2A93 st -y,R18
0544 1A93 st -y,R17
0546 0A93 st -y,R16
0548 8501 movw R16,R10
054A 0E940000 xcall int2fp
054E 3A93 st -y,R19
0550 2A93 st -y,R18
0552 1A93 st -y,R17
0554 0A93 st -y,R16
0556 0E940000 xcall empy32f
055A 0E940000 xcall _sin
055E 1801 movw R2,R16
0560 2901 movw R4,R18
0562 00E0 ldi R16,L28
0566 0E940000 xcall lpm32
056A 3A93 st -y,R19
056C 2A93 st -y,R18
056E 1A93 st -y,R17
0570 0A93 st -y,R16
0572 8501 movw R16,R10
0574 0E940000 xcall int2fp
0578 3A93 st -y,R19
057A 2A93 st -y,R18
057C 1A93 st -y,R17
057E 0A93 st -y,R16
0580 0E940000 xcall empy32f
0584 2F92 push R2
0586 3F92 push R3
0588 4F92 push R4
058A 5F92 push R5
058C 0E940000 xcall _cos
0590 5F90 pop R5
0592 4F90 pop R4
0594 3F90 pop R3
0596 2F90 pop R2
0598 3801 movw R6,R16
059A 4901 movw R8,R18
059C FE01 movw R30,R28
059E 4481 ldd R20,z+4
05A0 5581 ldd R21,z+5
05A2 6681 ldd R22,z+6
05A4 7781 ldd R23,z+7
05A6 7A93 st -y,R23
05A8 6A93 st -y,R22
05AA 5A93 st -y,R21
05AC 4A93 st -y,R20
05AE FE01 movw R30,R28
05B0 ; stack offset 4
05B0 4485 ldd R20,z+12
05B2 5585 ldd R21,z+13
05B4 6685 ldd R22,z+14
05B6 7785 ldd R23,z+15
05B8 7A93 st -y,R23
05BA 6A93 st -y,R22
05BC 5A93 st -y,R21
05BE 4A93 st -y,R20
05C0 5A92 st -y,R5
05C2 4A92 st -y,R4
05C4 3A92 st -y,R3
05C6 2A92 st -y,R2
05C8 0E940000 xcall empy32fs
05CC 0E940000 xcall add32fs
05D0 9601 movw R18,R12
05D2 ; stack offset 4
05D2 0C8C ldd R0,y+28
05D4 1D8C ldd R1,y+29
05D6 200D add R18,R0
05D8 311D adc R19,R1
05DA 02E0 ldi R16,2
05DC 10E0 ldi R17,0
05DE 0E940000 xcall empy16s
05E2 F801 movw R30,R16
05E4 ; stack offset 4
05E4 0DA4 ldd R0,y+45
05E6 1EA4 ldd R1,y+46
05E8 E00D add R30,R0
05EA F11D adc R31,R1
05EC 0081 ldd R16,z+0
05EE 1181 ldd R17,z+1
05F0 0E940000 xcall int2fp
05F4 3A93 st -y,R19
05F6 2A93 st -y,R18
05F8 1A93 st -y,R17
05FA 0A93 st -y,R16
05FC 9A92 st -y,R9
05FE 8A92 st -y,R8
0600 7A92 st -y,R7
0602 6A92 st -y,R6
0604 0E940000 xcall empy32fs
0608 0E940000 xcall sub32f
060C 0E940000 xcall fp2int
0610 1801 movw R2,R16
0612 9601 movw R18,R12
0614 088C ldd R0,y+24
0616 198C ldd R1,y+25
0618 200D add R18,R0
061A 311D adc R19,R1
061C 02E0 ldi R16,2
061E 10E0 ldi R17,0
0620 0E940000 xcall empy16s
0624 F801 movw R30,R16
0626 09A4 ldd R0,y+41
0628 1AA4 ldd R1,y+42
062A E00D add R30,R0
062C F11D adc R31,R1
062E 3182 std z+1,R3
0630 2082 std z+0,R2
0632 .dbline 40
0632 L25:
0632 .dbline 34
0632 02E0 ldi R16,2
0634 10E0 ldi R17,0
0636 288D ldd R18,y+24
0638 398D ldd R19,y+25
063A 0E940000 xcall empy16s
063E C00E add R12,R16
0640 D11E adc R13,R17
0642 L27:
0642 .dbline 34
0642 C601 movw R24,R12
0644 8031 cpi R24,16
0646 E0E0 ldi R30,0
0648 9E07 cpc R25,R30
064A 0CF4 brge X1
064C AFCD xjmp L24
064E X1:
064E .dbline 41
064E L18:
064E .dbline 30
064E C701 movw R24,R14
0650 0196 adiw R24,1
0652 7C01 movw R14,R24
0654 L20:
0654 .dbline 30
0654 888D ldd R24,y+24
0656 998D ldd R25,y+25
0658 0197 sbiw R24,1
065A 8E15 cp R24,R14
065C 9F05 cpc R25,R15
065E 0CF0 brlt X2
0660 87CD xjmp L17
0662 X2:
0662 .dbline 42
0662 L11:
0662 .dbline 26
0662 8B8D ldd R24,y+27
0664 9C8D ldd R25,y+28
0666 0196 adiw R24,1
0668 9C8F std y+28,R25
066A 8B8F std y+27,R24
066C .dbline 26
066C 84E0 ldi R24,4
066E 90E0 ldi R25,0
0670 0B8C ldd R0,y+27
0672 1C8C ldd R1,y+28
0674 8015 cp R24,R0
0676 9105 cpc R25,R1
0678 0CF0 brlt X3
067A 5FCD xjmp L10
067C X3:
067C .dbline 43
067C ; { TR=dataR[k]; TI=dataI[k]; temp=dataR[k+b];
067C ; dataR[k]=dataR[k]+dataR[k+b]*cos(qq*p)+dataI[k+b]*sin(qq*p);
067C ; dataI[k]=dataI[k]-dataR[k+b]*sin(qq*p)+dataI[k+b]*cos(qq*p);
067C ; dataR[k+b]=TR-dataR[k+b]*cos(qq*p)-dataI[k+b]*sin(qq*p);
067C ; dataI[k+b]=TI+temp*sin(qq*p)-dataI[k+b]*cos(qq*p);
067C ; } /* END for (3) */
067C ; } /* END for (2) */
067C ; } /* END for (1) */
067C ; for(i=0;i<32;i++)
067C 0024 clr R0
067E 0A8E std y+26,R0
0680 45C0 xjmp L32
0682 L29:
0682 .dbline 44
0682 ; { /* 只需要32次以下的谐波进行分析 */
0682 .dbline 45
0682 ; w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);
0682 82E0 ldi R24,2
0684 0A8C ldd R0,y+26
0686 809D mul R24,R0
0688 1001 movw R2,R0
068A F101 movw R30,R2
068C 0FA0 ldd R0,y+39
068E 18A4 ldd R1,y+40
0690 E00D add R30,R0
0692 F11D adc R31,R1
0694 4080 ldd R4,z+0
0696 5180 ldd R5,z+1
0698 F101 movw R30,R2
069A 09A4 ldd R0,y+41
069C 1AA4 ldd R1,y+42
069E E00D add R30,R0
06A0 F11D adc R31,R1
06A2 6080 ldd R6,z+0
06A4 7180 ldd R7,z+1
06A6 9301 movw R18,R6
06A8 8301 movw R16,R6
06AA 0E940000 xcall empy16s
06AE 3801 movw R6,R16
06B0 9201 movw R18,R4
06B2 8201 movw R16,R4
06B4 0E940000 xcall empy16s
06B8 060D add R16,R6
06BA 171D adc R17,R7
06BC 0E940000 xcall int2fp
06C0 2F92 push R2
06C2 3F92 push R3
06C4 0E940000 xcall _sqrt
06C8 3F90 pop R3
06CA 2F90 pop R2
06CC 80E0 ldi R24,<_w
06CE 90E0 ldi R25,>_w
06D0 F101 movw R30,R2
06D2 E80F add R30,R24
06D4 F91F adc R31,R25
06D6 0E940000 xcall fp2int
06DA 1183 std z+1,R17
06DC 0083 std z+0,R16
06DE .dbline 46
06DE ; if(!i)
06DE 0A8C ldd R0,y+26
06E0 0020 tst R0
06E2 89F4 brne L33
06E4 .dbline 47
06E4 ; {
06E4 .dbline 48
06E4 ; w[i]=w[i]/64;
06E4 82E0 ldi R24,2
06E6 809D mul R24,R0
06E8 1001 movw R2,R0
06EA 80E0 ldi R24,<_w
06EC 90E0 ldi R25,>_w
06EE 280E add R2,R24
06F0 391E adc R3,R25
06F2 20E4 ldi R18,64
06F4 30E0 ldi R19,0
06F6 F101 movw R30,R2
06F8 0081 ldd R16,z+0
06FA 1181 ldd R17,z+1
06FC 0E940000 xcall div16s
0700 F101 movw R30,R2
0702 1183 std z+1,R17
0704 0083 std z+0,R16
0706 .dbline 49
0706 ; }
0706 L33:
0706 .dbline 50
0706 L30:
0706 .dbline 43
0706 0A8C ldd R0,y+26
0708 0394 inc R0
070A 0A8E std y+26,R0
070C L32:
070C .dbline 43
070C 8A8D ldd R24,y+26
070E 8032 cpi R24,32
0710 08F4 brsh X4
0712 B7CF xjmp L29
0714 X4:
0714 .dbline 51
0714 ; }
0714 ; w[0]=w[0]/2;
0714 22E0 ldi R18,2
0716 30E0 ldi R19,0
0718 00910000 lds R16,_w
071C 10910100 lds R17,_w+1
0720 0E940000 xcall div16s
0724 10930100 sts _w+1,R17
0728 00930000 sts _w,R16
072C .dbline -2
072C L1:
072C 6D96 adiw R28,29
072E 0E940000 xcall pop_gset5
0732 2496 adiw R28,4
0734 .dbline 0 ; func end
0734 0895 ret
0736 .dbsym l x6 22 I
0736 .dbsym l x5 20 I
0736 .dbsym l x4 18 I
0736 .dbsym l xx 16 I
0736 .dbsym l x3 14 I
0736 .dbsym l x2 12 I
0736 .dbsym r x1 12 I
0736 .dbsym r x0 10 I
0736 .dbsym l L 27 I
0736 .dbsym r j 14 I
0736 .dbsym l temp 8 D
0736 .dbsym l TI 4 D
0736 .dbsym l TR 0 D
0736 .dbsym l i 26 c
0736 .dbsym r p 10 I
0736 .dbsym l b 24 I
0736 .dbsym r k 12 I
0736 .dbsym l dataI 41 pI
0736 .dbsym l dataR 39 pI
0736 .dbend
0736 .dbfunc e main _main fV
.even
0736 _main::
0736 .dbline -1
0736 .dbline 55
0736 ; } /* END FFT */
0736 ;
0736 ; void main ()
0736 ; {
0736 .dbline 56
0736 ; FFT(dataR,dataI);
0736 20E0 ldi R18,<_dataI
0738 30E0 ldi R19,>_dataI
073A 00E0 ldi R16,<_dataR
073C 10E0 ldi R17,>_dataR
073E 60DC xcall _FFT
0740 L36:
0740 .dbline 57
0740 L37:
0740 .dbline 57
0740 FFCF xjmp L36
0742 X5:
0742 .dbline -2
0742 L35:
0742 .dbline 0 ; func end
0742 0895 ret
0744 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\HJN\Design\AVR\fft\fffff.c
0000 _w::
0000 .blkb 64
0040 .dbsym e w _w A[64:32]I
0040 _dataI::
0040 .blkb 32
0060 .dbsym e dataI _dataI A[32:16]I
.area lit(rom, con, rel)
0000 L28:
0000 DA0FC93E .word 0xfda,0x3ec9