www.pudn.com > fft_iccavr.rar > fftbook.lis
.module fftbook.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\fftbook.c
0020 .dbsym e dataR _dataR A[32:16]I
.area text(rom, con, rel)
0000 .dbfile D:\HJN\Design\AVR\fft\fftbook.c
0000 .dbfunc e CHANGE _CHANGE fV
0000 ; b6 -> R22,R23
0000 ; b5 -> R22,R23
0000 ; b4 -> R22,R23
0000 ; all -> R20,R21
0000 ; b3 -> R22,R23
0000 ; b2 -> R10,R11
0000 ; b1 -> R14,R15
0000 ; b0 -> R12,R13
.even
0000 _CHANGE::
0000 0E940000 xcall push_gset5
0004 .dbline -1
0004 .dbline 15
0004 ; #include
0004 ; #define uint unsigned int
0004 ; #define uchar unsigned char
0004 ; #define PI 3.1415926
0004 ;
0004 ; uint x0,x1,x2,x3,x4,x5,x6;
0004 ; int L,i,j,k,b,p;
0004 ; uchar w[32];
0004 ; uint TR,TI,temp;
0004 ;
0004 ; int dataR[]={5,5,5,5,0,0,0,0,5,5,5,5,0,0,0,0};
0004 ; int dataI[16];
0004 ;
0004 ; void CHANGE()
0004 ; { //i为原始存放位置,最后得invert_pos为倒位序存放位置
0004 .dbline 17
0004 ; int b0 , b1 , b2 , b3 , b4 , b5 , b6 , all;
0004 ; b0 = b1 = b2 = b3 = b4 = b5 = b6 = all = 0;
0004 4427 clr R20
0006 5527 clr R21
0008 6627 clr R22
000A 7727 clr R23
000C AA24 clr R10
000E BB24 clr R11
0010 EE24 clr R14
0012 FF24 clr R15
0014 CC24 clr R12
0016 DD24 clr R13
0018 .dbline 18
0018 ; b0 = i&0x01;
0018 80914E00 lds R24,_i
001C 90914F00 lds R25,_i+1
0020 8170 andi R24,1
0022 9070 andi R25,0
0024 6C01 movw R12,R24
0026 .dbline 19
0026 ; b1 = (i>>1)&0x01;
0026 80914E00 lds R24,_i
002A 90914F00 lds R25,_i+1
002E 9595 asr R25
0030 8795 ror R24
0032 8170 andi R24,1
0034 9070 andi R25,0
0036 7C01 movw R14,R24
0038 .dbline 20
0038 ; b2 = (i>>2)&0x01;
0038 80914E00 lds R24,_i
003C 90914F00 lds R25,_i+1
0040 9595 asr R25
0042 8795 ror R24
0044 9595 asr R25
0046 8795 ror R24
0048 8170 andi R24,1
004A 9070 andi R25,0
004C 5C01 movw R10,R24
004E .dbline 21
004E ; b3 = (i>>3)&0x01;
004E 60914E00 lds R22,_i
0052 70914F00 lds R23,_i+1
0056 7595 asr R23
0058 6795 ror R22
005A 7595 asr R23
005C 6795 ror R22
005E 7595 asr R23
0060 6795 ror R22
0062 6170 andi R22,1
0064 7070 andi R23,0
0066 .dbline 25
0066 ; // b4 = (i>>4)&0x01;
0066 ; //b5 = (i>>5)&0x01;
0066 ; // b6 = (i>>6)&0x01;
0066 ; all = b0*8 + b1*4 + b2*2 + b3; //*8 + b4*4 + b5*2 + b6;
0066 04E0 ldi R16,4
0068 10E0 ldi R17,0
006A 9701 movw R18,R14
006C 0E940000 xcall empy16s
0070 1801 movw R2,R16
0072 08E0 ldi R16,8
0074 10E0 ldi R17,0
0076 9601 movw R18,R12
0078 0E940000 xcall empy16s
007C A801 movw R20,R16
007E 420D add R20,R2
0080 531D adc R21,R3
0082 02E0 ldi R16,2
0084 10E0 ldi R17,0
0086 9501 movw R18,R10
0088 0E940000 xcall empy16s
008C 400F add R20,R16
008E 511F adc R21,R17
0090 460F add R20,R22
0092 571F adc R21,R23
0094 .dbline 26
0094 ; dataI[all] = dataR[i];
0094 20914E00 lds R18,_i
0098 30914F00 lds R19,_i+1
009C 02E0 ldi R16,2
009E 10E0 ldi R17,0
00A0 0E940000 xcall empy16s
00A4 F801 movw R30,R16
00A6 80E0 ldi R24,<_dataR
00A8 90E0 ldi R25,>_dataR
00AA E80F add R30,R24
00AC F91F adc R31,R25
00AE 2080 ldd R2,z+0
00B0 3180 ldd R3,z+1
00B2 02E0 ldi R16,2
00B4 10E0 ldi R17,0
00B6 9A01 movw R18,R20
00B8 0E940000 xcall empy16s
00BC F801 movw R30,R16
00BE 80E0 ldi R24,<_dataI
00C0 90E0 ldi R25,>_dataI
00C2 E80F add R30,R24
00C4 F91F adc R31,R25
00C6 3182 std z+1,R3
00C8 2082 std z+0,R2
00CA .dbline -2
00CA L1:
00CA 0E940000 xcall pop_gset5
00CE .dbline 0 ; func end
00CE 0895 ret
00D0 .dbsym r b6 22 I
00D0 .dbsym r b5 22 I
00D0 .dbsym r b4 22 I
00D0 .dbsym r all 20 I
00D0 .dbsym r b3 22 I
00D0 .dbsym r b2 10 I
00D0 .dbsym r b1 14 I
00D0 .dbsym r b0 12 I
00D0 .dbend
00D0 .dbfunc e FFTT _FFTT fV
.even
00D0 _FFTT::
00D0 .dbline -1
00D0 .dbline 31
00D0 ; }
00D0 ;
00D0 ;
00D0 ; void FFTT()
00D0 ; { TR=dataR[k];
00D0 .dbline 31
00D0 20914A00 lds R18,_k
00D4 30914B00 lds R19,_k+1
00D8 02E0 ldi R16,2
00DA 10E0 ldi R17,0
00DC 0E940000 xcall empy16s
00E0 F801 movw R30,R16
00E2 80E0 ldi R24,<_dataR
00E4 90E0 ldi R25,>_dataR
00E6 E80F add R30,R24
00E8 F91F adc R31,R25
00EA 2080 ldd R2,z+0
00EC 3180 ldd R3,z+1
00EE 30922500 sts _TR+1,R3
00F2 20922400 sts _TR,R2
00F6 .dbline 32
00F6 ; TI=dataI[k];
00F6 20914A00 lds R18,_k
00FA 30914B00 lds R19,_k+1
00FE 02E0 ldi R16,2
0100 10E0 ldi R17,0
0102 0E940000 xcall empy16s
0106 F801 movw R30,R16
0108 80E0 ldi R24,<_dataI
010A 90E0 ldi R25,>_dataI
010C E80F add R30,R24
010E F91F adc R31,R25
0110 2080 ldd R2,z+0
0112 3180 ldd R3,z+1
0114 30922300 sts _TI+1,R3
0118 20922200 sts _TI,R2
011C .dbline 33
011C ; temp=dataR[k+b];
011C 20904800 lds R2,_b
0120 30904900 lds R3,_b+1
0124 20914A00 lds R18,_k
0128 30914B00 lds R19,_k+1
012C 220D add R18,R2
012E 331D adc R19,R3
0130 02E0 ldi R16,2
0132 10E0 ldi R17,0
0134 0E940000 xcall empy16s
0138 F801 movw R30,R16
013A 80E0 ldi R24,<_dataR
013C 90E0 ldi R25,>_dataR
013E E80F add R30,R24
0140 F91F adc R31,R25
0142 2080 ldd R2,z+0
0144 3180 ldd R3,z+1
0146 30922100 sts _temp+1,R3
014A 20922000 sts _temp,R2
014E .dbline 34
014E ; dataR[k]=dataR[k]+dataR[k+b]*cos(2*PI*p/16)+dataI[k+b]*sin(2*PI*p/16);
014E 00E0 ldi R16,L3
0152 0E940000 xcall lpm32
0156 3A93 st -y,R19
0158 2A93 st -y,R18
015A 1A93 st -y,R17
015C 0A93 st -y,R16
015E 00914600 lds R16,_p
0162 10914700 lds R17,_p+1
0166 0E940000 xcall int2fp
016A 3A93 st -y,R19
016C 2A93 st -y,R18
016E 1A93 st -y,R17
0170 0A93 st -y,R16
0172 0E940000 xcall empy32fs
0176 00E0 ldi R16,L4
017A 0E940000 xcall lpm32
017E 3A93 st -y,R19
0180 2A93 st -y,R18
0182 1A93 st -y,R17
0184 0A93 st -y,R16
0186 0E940000 xcall div32f
018A 0E940000 xcall _cos
018E 1801 movw R2,R16
0190 2901 movw R4,R18
0192 00E0 ldi R16,L3
0196 0E940000 xcall lpm32
019A 3A93 st -y,R19
019C 2A93 st -y,R18
019E 1A93 st -y,R17
01A0 0A93 st -y,R16
01A2 00914600 lds R16,_p
01A6 10914700 lds R17,_p+1
01AA 0E940000 xcall int2fp
01AE 3A93 st -y,R19
01B0 2A93 st -y,R18
01B2 1A93 st -y,R17
01B4 0A93 st -y,R16
01B6 0E940000 xcall empy32fs
01BA 00E0 ldi R16,L4
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 0E940000 xcall div32f
01CE 2F92 push R2
01D0 3F92 push R3
01D2 4F92 push R4
01D4 5F92 push R5
01D6 0E940000 xcall _sin
01DA 5F90 pop R5
01DC 4F90 pop R4
01DE 3F90 pop R3
01E0 2F90 pop R2
01E2 3801 movw R6,R16
01E4 4901 movw R8,R18
01E6 20914A00 lds R18,_k
01EA 30914B00 lds R19,_k+1
01EE 02E0 ldi R16,2
01F0 10E0 ldi R17,0
01F2 0E940000 xcall empy16s
01F6 80E0 ldi R24,<_dataR
01F8 90E0 ldi R25,>_dataR
01FA F801 movw R30,R16
01FC E80F add R30,R24
01FE F91F adc R31,R25
0200 CF01 movw R24,R30
0202 0081 ldd R16,z+0
0204 1181 ldd R17,z+1
0206 0E940000 xcall int2fp
020A 3A93 st -y,R19
020C 2A93 st -y,R18
020E 1A93 st -y,R17
0210 0A93 st -y,R16
0212 E0914800 lds R30,_b
0216 F0914900 lds R31,_b+1
021A 20914A00 lds R18,_k
021E 30914B00 lds R19,_k+1
0222 2E0F add R18,R30
0224 3F1F adc R19,R31
0226 02E0 ldi R16,2
0228 10E0 ldi R17,0
022A 0E940000 xcall empy16s
022E F801 movw R30,R16
0230 A0E0 ldi R26,<_dataR
0232 B0E0 ldi R27,>_dataR
0234 EA0F add R30,R26
0236 FB1F adc R31,R27
0238 0081 ldd R16,z+0
023A 1181 ldd R17,z+1
023C 0E940000 xcall int2fp
0240 3A93 st -y,R19
0242 2A93 st -y,R18
0244 1A93 st -y,R17
0246 0A93 st -y,R16
0248 5A92 st -y,R5
024A 4A92 st -y,R4
024C 3A92 st -y,R3
024E 2A92 st -y,R2
0250 0E940000 xcall empy32fs
0254 0E940000 xcall add32fs
0258 20904800 lds R2,_b
025C 30904900 lds R3,_b+1
0260 20914A00 lds R18,_k
0264 30914B00 lds R19,_k+1
0268 220D add R18,R2
026A 331D adc R19,R3
026C 02E0 ldi R16,2
026E 10E0 ldi R17,0
0270 0E940000 xcall empy16s
0274 F801 movw R30,R16
0276 A0E0 ldi R26,<_dataI
0278 B0E0 ldi R27,>_dataI
027A EA0F add R30,R26
027C FB1F adc R31,R27
027E 0081 ldd R16,z+0
0280 1181 ldd R17,z+1
0282 0E940000 xcall int2fp
0286 3A93 st -y,R19
0288 2A93 st -y,R18
028A 1A93 st -y,R17
028C 0A93 st -y,R16
028E 9A92 st -y,R9
0290 8A92 st -y,R8
0292 7A92 st -y,R7
0294 6A92 st -y,R6
0296 0E940000 xcall empy32fs
029A 0E940000 xcall add32f
029E 0E940000 xcall fp2int
02A2 FC01 movw R30,R24
02A4 1183 std z+1,R17
02A6 0083 std z+0,R16
02A8 .dbline 35
02A8 ; dataI[k]=dataI[k]-dataR[k+b]*sin(2*PI*p/16)+dataI[k+b]*cos(2*PI*p/16);
02A8 00E0 ldi R16,L3
02AC 0E940000 xcall lpm32
02B0 3A93 st -y,R19
02B2 2A93 st -y,R18
02B4 1A93 st -y,R17
02B6 0A93 st -y,R16
02B8 00914600 lds R16,_p
02BC 10914700 lds R17,_p+1
02C0 0E940000 xcall int2fp
02C4 3A93 st -y,R19
02C6 2A93 st -y,R18
02C8 1A93 st -y,R17
02CA 0A93 st -y,R16
02CC 0E940000 xcall empy32fs
02D0 00E0 ldi R16,L4
02D4 0E940000 xcall lpm32
02D8 3A93 st -y,R19
02DA 2A93 st -y,R18
02DC 1A93 st -y,R17
02DE 0A93 st -y,R16
02E0 0E940000 xcall div32f
02E4 0E940000 xcall _sin
02E8 1801 movw R2,R16
02EA 2901 movw R4,R18
02EC 00E0 ldi R16,L3
02F0 0E940000 xcall lpm32
02F4 3A93 st -y,R19
02F6 2A93 st -y,R18
02F8 1A93 st -y,R17
02FA 0A93 st -y,R16
02FC 00914600 lds R16,_p
0300 10914700 lds R17,_p+1
0304 0E940000 xcall int2fp
0308 3A93 st -y,R19
030A 2A93 st -y,R18
030C 1A93 st -y,R17
030E 0A93 st -y,R16
0310 0E940000 xcall empy32fs
0314 00E0 ldi R16,L4
0318 0E940000 xcall lpm32
031C 3A93 st -y,R19
031E 2A93 st -y,R18
0320 1A93 st -y,R17
0322 0A93 st -y,R16
0324 0E940000 xcall div32f
0328 2F92 push R2
032A 3F92 push R3
032C 4F92 push R4
032E 5F92 push R5
0330 0E940000 xcall _cos
0334 5F90 pop R5
0336 4F90 pop R4
0338 3F90 pop R3
033A 2F90 pop R2
033C 3801 movw R6,R16
033E 4901 movw R8,R18
0340 20914A00 lds R18,_k
0344 30914B00 lds R19,_k+1
0348 02E0 ldi R16,2
034A 10E0 ldi R17,0
034C 0E940000 xcall empy16s
0350 80E0 ldi R24,<_dataI
0352 90E0 ldi R25,>_dataI
0354 F801 movw R30,R16
0356 E80F add R30,R24
0358 F91F adc R31,R25
035A CF01 movw R24,R30
035C 0081 ldd R16,z+0
035E 1181 ldd R17,z+1
0360 0E940000 xcall int2fp
0364 3A93 st -y,R19
0366 2A93 st -y,R18
0368 1A93 st -y,R17
036A 0A93 st -y,R16
036C E0914800 lds R30,_b
0370 F0914900 lds R31,_b+1
0374 20914A00 lds R18,_k
0378 30914B00 lds R19,_k+1
037C 2E0F add R18,R30
037E 3F1F adc R19,R31
0380 02E0 ldi R16,2
0382 10E0 ldi R17,0
0384 0E940000 xcall empy16s
0388 F801 movw R30,R16
038A A0E0 ldi R26,<_dataR
038C B0E0 ldi R27,>_dataR
038E EA0F add R30,R26
0390 FB1F adc R31,R27
0392 0081 ldd R16,z+0
0394 1181 ldd R17,z+1
0396 0E940000 xcall int2fp
039A 3A93 st -y,R19
039C 2A93 st -y,R18
039E 1A93 st -y,R17
03A0 0A93 st -y,R16
03A2 5A92 st -y,R5
03A4 4A92 st -y,R4
03A6 3A92 st -y,R3
03A8 2A92 st -y,R2
03AA 0E940000 xcall empy32fs
03AE 0E940000 xcall sub32fs
03B2 20904800 lds R2,_b
03B6 30904900 lds R3,_b+1
03BA 20914A00 lds R18,_k
03BE 30914B00 lds R19,_k+1
03C2 220D add R18,R2
03C4 331D adc R19,R3
03C6 02E0 ldi R16,2
03C8 10E0 ldi R17,0
03CA 0E940000 xcall empy16s
03CE F801 movw R30,R16
03D0 A0E0 ldi R26,<_dataI
03D2 B0E0 ldi R27,>_dataI
03D4 EA0F add R30,R26
03D6 FB1F adc R31,R27
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 9A92 st -y,R9
03EA 8A92 st -y,R8
03EC 7A92 st -y,R7
03EE 6A92 st -y,R6
03F0 0E940000 xcall empy32fs
03F4 0E940000 xcall add32f
03F8 0E940000 xcall fp2int
03FC FC01 movw R30,R24
03FE 1183 std z+1,R17
0400 0083 std z+0,R16
0402 .dbline 36
0402 ; dataR[k+b]=TR-dataR[k+b]*cos(2*PI*p/16)-dataI[k+b]*sin(2*PI*p/16);
0402 00E0 ldi R16,L3
0406 0E940000 xcall lpm32
040A 3A93 st -y,R19
040C 2A93 st -y,R18
040E 1A93 st -y,R17
0410 0A93 st -y,R16
0412 00914600 lds R16,_p
0416 10914700 lds R17,_p+1
041A 0E940000 xcall int2fp
041E 3A93 st -y,R19
0420 2A93 st -y,R18
0422 1A93 st -y,R17
0424 0A93 st -y,R16
0426 0E940000 xcall empy32fs
042A 00E0 ldi R16,L4
042E 0E940000 xcall lpm32
0432 3A93 st -y,R19
0434 2A93 st -y,R18
0436 1A93 st -y,R17
0438 0A93 st -y,R16
043A 0E940000 xcall div32f
043E 0E940000 xcall _cos
0442 1801 movw R2,R16
0444 2901 movw R4,R18
0446 00E0 ldi R16,L3
044A 0E940000 xcall lpm32
044E 3A93 st -y,R19
0450 2A93 st -y,R18
0452 1A93 st -y,R17
0454 0A93 st -y,R16
0456 00914600 lds R16,_p
045A 10914700 lds R17,_p+1
045E 0E940000 xcall int2fp
0462 3A93 st -y,R19
0464 2A93 st -y,R18
0466 1A93 st -y,R17
0468 0A93 st -y,R16
046A 0E940000 xcall empy32fs
046E 00E0 ldi R16,L4
0472 0E940000 xcall lpm32
0476 3A93 st -y,R19
0478 2A93 st -y,R18
047A 1A93 st -y,R17
047C 0A93 st -y,R16
047E 0E940000 xcall div32f
0482 2F92 push R2
0484 3F92 push R3
0486 4F92 push R4
0488 5F92 push R5
048A 0E940000 xcall _sin
048E 5F90 pop R5
0490 4F90 pop R4
0492 3F90 pop R3
0494 2F90 pop R2
0496 3801 movw R6,R16
0498 4901 movw R8,R18
049A 80914800 lds R24,_b
049E 90914900 lds R25,_b+1
04A2 20914A00 lds R18,_k
04A6 30914B00 lds R19,_k+1
04AA 280F add R18,R24
04AC 391F adc R19,R25
04AE 02E0 ldi R16,2
04B0 10E0 ldi R17,0
04B2 0E940000 xcall empy16s
04B6 C801 movw R24,R16
04B8 E0E0 ldi R30,<_dataR
04BA F0E0 ldi R31,>_dataR
04BC 8E0F add R24,R30
04BE 9F1F adc R25,R31
04C0 00E0 ldi R16,L5
04C4 0E940000 xcall lpm32
04C8 3A93 st -y,R19
04CA 2A93 st -y,R18
04CC 1A93 st -y,R17
04CE 0A93 st -y,R16
04D0 00912400 lds R16,_TR
04D4 10912500 lds R17,_TR+1
04D8 1695 lsr R17
04DA 0795 ror R16
04DC 0E940000 xcall int2fp
04E0 3A93 st -y,R19
04E2 2A93 st -y,R18
04E4 1A93 st -y,R17
04E6 0A93 st -y,R16
04E8 0E940000 xcall empy32fs
04EC 00912400 lds R16,_TR
04F0 10912500 lds R17,_TR+1
04F4 0170 andi R16,1
04F6 1070 andi R17,0
04F8 0E940000 xcall int2fp
04FC 3A93 st -y,R19
04FE 2A93 st -y,R18
0500 1A93 st -y,R17
0502 0A93 st -y,R16
0504 0E940000 xcall add32fs
0508 FC01 movw R30,R24
050A 0081 ldd R16,z+0
050C 1181 ldd R17,z+1
050E 0E940000 xcall int2fp
0512 3A93 st -y,R19
0514 2A93 st -y,R18
0516 1A93 st -y,R17
0518 0A93 st -y,R16
051A 5A92 st -y,R5
051C 4A92 st -y,R4
051E 3A92 st -y,R3
0520 2A92 st -y,R2
0522 0E940000 xcall empy32fs
0526 0E940000 xcall sub32fs
052A 20904800 lds R2,_b
052E 30904900 lds R3,_b+1
0532 20914A00 lds R18,_k
0536 30914B00 lds R19,_k+1
053A 220D add R18,R2
053C 331D adc R19,R3
053E 02E0 ldi R16,2
0540 10E0 ldi R17,0
0542 0E940000 xcall empy16s
0546 F801 movw R30,R16
0548 A0E0 ldi R26,<_dataI
054A B0E0 ldi R27,>_dataI
054C EA0F add R30,R26
054E FB1F adc R31,R27
0550 0081 ldd R16,z+0
0552 1181 ldd R17,z+1
0554 0E940000 xcall int2fp
0558 3A93 st -y,R19
055A 2A93 st -y,R18
055C 1A93 st -y,R17
055E 0A93 st -y,R16
0560 9A92 st -y,R9
0562 8A92 st -y,R8
0564 7A92 st -y,R7
0566 6A92 st -y,R6
0568 0E940000 xcall empy32fs
056C 0E940000 xcall sub32f
0570 0E940000 xcall fp2int
0574 FC01 movw R30,R24
0576 1183 std z+1,R17
0578 0083 std z+0,R16
057A .dbline 37
057A ; dataI[k+b]=TI+temp*sin(2*PI*p/16)-dataI[k+b]*cos(2*PI*p/16);
057A 00E0 ldi R16,L3
057E 0E940000 xcall lpm32
0582 3A93 st -y,R19
0584 2A93 st -y,R18
0586 1A93 st -y,R17
0588 0A93 st -y,R16
058A 00914600 lds R16,_p
058E 10914700 lds R17,_p+1
0592 0E940000 xcall int2fp
0596 3A93 st -y,R19
0598 2A93 st -y,R18
059A 1A93 st -y,R17
059C 0A93 st -y,R16
059E 0E940000 xcall empy32fs
05A2 00E0 ldi R16,L4
05A6 0E940000 xcall lpm32
05AA 3A93 st -y,R19
05AC 2A93 st -y,R18
05AE 1A93 st -y,R17
05B0 0A93 st -y,R16
05B2 0E940000 xcall div32f
05B6 0E940000 xcall _sin
05BA 1801 movw R2,R16
05BC 2901 movw R4,R18
05BE 00E0 ldi R16,L3
05C2 0E940000 xcall lpm32
05C6 3A93 st -y,R19
05C8 2A93 st -y,R18
05CA 1A93 st -y,R17
05CC 0A93 st -y,R16
05CE 00914600 lds R16,_p
05D2 10914700 lds R17,_p+1
05D6 0E940000 xcall int2fp
05DA 3A93 st -y,R19
05DC 2A93 st -y,R18
05DE 1A93 st -y,R17
05E0 0A93 st -y,R16
05E2 0E940000 xcall empy32fs
05E6 00E0 ldi R16,L4
05EA 0E940000 xcall lpm32
05EE 3A93 st -y,R19
05F0 2A93 st -y,R18
05F2 1A93 st -y,R17
05F4 0A93 st -y,R16
05F6 0E940000 xcall div32f
05FA 2F92 push R2
05FC 3F92 push R3
05FE 4F92 push R4
0600 5F92 push R5
0602 0E940000 xcall _cos
0606 5F90 pop R5
0608 4F90 pop R4
060A 3F90 pop R3
060C 2F90 pop R2
060E 3801 movw R6,R16
0610 4901 movw R8,R18
0612 00E0 ldi R16,L5
0616 0E940000 xcall lpm32
061A 3A93 st -y,R19
061C 2A93 st -y,R18
061E 1A93 st -y,R17
0620 0A93 st -y,R16
0622 00912200 lds R16,_TI
0626 10912300 lds R17,_TI+1
062A 1695 lsr R17
062C 0795 ror R16
062E 0E940000 xcall int2fp
0632 3A93 st -y,R19
0634 2A93 st -y,R18
0636 1A93 st -y,R17
0638 0A93 st -y,R16
063A 0E940000 xcall empy32fs
063E 00912200 lds R16,_TI
0642 10912300 lds R17,_TI+1
0646 0170 andi R16,1
0648 1070 andi R17,0
064A 0E940000 xcall int2fp
064E 3A93 st -y,R19
0650 2A93 st -y,R18
0652 1A93 st -y,R17
0654 0A93 st -y,R16
0656 0E940000 xcall add32fs
065A 00E0 ldi R16,L5
065E 0E940000 xcall lpm32
0662 3A93 st -y,R19
0664 2A93 st -y,R18
0666 1A93 st -y,R17
0668 0A93 st -y,R16
066A 00912000 lds R16,_temp
066E 10912100 lds R17,_temp+1
0672 1695 lsr R17
0674 0795 ror R16
0676 0E940000 xcall int2fp
067A 3A93 st -y,R19
067C 2A93 st -y,R18
067E 1A93 st -y,R17
0680 0A93 st -y,R16
0682 0E940000 xcall empy32fs
0686 00912000 lds R16,_temp
068A 10912100 lds R17,_temp+1
068E 0170 andi R16,1
0690 1070 andi R17,0
0692 0E940000 xcall int2fp
0696 3A93 st -y,R19
0698 2A93 st -y,R18
069A 1A93 st -y,R17
069C 0A93 st -y,R16
069E 0E940000 xcall add32fs
06A2 5A92 st -y,R5
06A4 4A92 st -y,R4
06A6 3A92 st -y,R3
06A8 2A92 st -y,R2
06AA 0E940000 xcall empy32fs
06AE 0E940000 xcall add32fs
06B2 20904800 lds R2,_b
06B6 30904900 lds R3,_b+1
06BA 20914A00 lds R18,_k
06BE 30914B00 lds R19,_k+1
06C2 220D add R18,R2
06C4 331D adc R19,R3
06C6 02E0 ldi R16,2
06C8 10E0 ldi R17,0
06CA 0E940000 xcall empy16s
06CE F801 movw R30,R16
06D0 80E0 ldi R24,<_dataI
06D2 90E0 ldi R25,>_dataI
06D4 E80F add R30,R24
06D6 F91F adc R31,R25
06D8 0081 ldd R16,z+0
06DA 1181 ldd R17,z+1
06DC 0E940000 xcall int2fp
06E0 3A93 st -y,R19
06E2 2A93 st -y,R18
06E4 1A93 st -y,R17
06E6 0A93 st -y,R16
06E8 9A92 st -y,R9
06EA 8A92 st -y,R8
06EC 7A92 st -y,R7
06EE 6A92 st -y,R6
06F0 0E940000 xcall empy32fs
06F4 0E940000 xcall sub32f
06F8 0E940000 xcall fp2int
06FC 1801 movw R2,R16
06FE 40904800 lds R4,_b
0702 50904900 lds R5,_b+1
0706 20914A00 lds R18,_k
070A 30914B00 lds R19,_k+1
070E 240D add R18,R4
0710 351D adc R19,R5
0712 02E0 ldi R16,2
0714 10E0 ldi R17,0
0716 0E940000 xcall empy16s
071A F801 movw R30,R16
071C 80E0 ldi R24,<_dataI
071E 90E0 ldi R25,>_dataI
0720 E80F add R30,R24
0722 F91F adc R31,R25
0724 3182 std z+1,R3
0726 2082 std z+0,R2
0728 .dbline -2
0728 L2:
0728 .dbline 0 ; func end
0728 0895 ret
072A .dbend
072A .dbfunc e FFT _FFT fV
072A ; dataI -> R20,R21
072A ; dataR -> R22,R23
.even
072A _FFT::
072A 0E940000 xcall push_gset3
072E A901 movw R20,R18
0730 B801 movw R22,R16
0732 .dbline -1
0732 .dbline 46
0732 ;
0732 ; /*dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p];
0732 ; dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p];
0732 ; dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p];
0732 ; dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p];*/
0732 ;
0732 ; }
0732 ; void FFT(int dataR[],int dataI[])
0732 ; {
0732 .dbline 48
0732 ; // 以下是数据掉头功能
0732 ; for(i = 0 ; i < 16 ; i++)
0732 2224 clr R2
0734 3324 clr R3
0736 30924F00 sts _i+1,R3
073A 20924E00 sts _i,R2
073E L7:
073E .dbline 49
073E .dbline 50
073E 60DC xcall _CHANGE
0740 .dbline 51
0740 L8:
0740 .dbline 48
0740 80914E00 lds R24,_i
0744 90914F00 lds R25,_i+1
0748 0196 adiw R24,1
074A 90934F00 sts _i+1,R25
074E 80934E00 sts _i,R24
0752 .dbline 48
0752 8031 cpi R24,16
0754 E0E0 ldi R30,0
0756 9E07 cpc R25,R30
0758 94F3 brlt L7
075A .dbline 52
075A ; {
075A ; CHANGE ( ) ;
075A ; }
075A ; for(i=0;i<16;i++)
075A 2224 clr R2
075C 3324 clr R3
075E 30924F00 sts _i+1,R3
0762 20924E00 sts _i,R2
0766 L11:
0766 .dbline 53
0766 .dbline 54
0766 20914E00 lds R18,_i
076A 30914F00 lds R19,_i+1
076E 02E0 ldi R16,2
0770 10E0 ldi R17,0
0772 0E940000 xcall empy16s
0776 F801 movw R30,R16
0778 E40F add R30,R20
077A F51F adc R31,R21
077C 2080 ldd R2,z+0
077E 3180 ldd R3,z+1
0780 F801 movw R30,R16
0782 E60F add R30,R22
0784 F71F adc R31,R23
0786 3182 std z+1,R3
0788 2082 std z+0,R2
078A .dbline 54
078A 20914E00 lds R18,_i
078E 30914F00 lds R19,_i+1
0792 02E0 ldi R16,2
0794 10E0 ldi R17,0
0796 0E940000 xcall empy16s
079A F801 movw R30,R16
079C E40F add R30,R20
079E F51F adc R31,R21
07A0 2224 clr R2
07A2 3324 clr R3
07A4 3182 std z+1,R3
07A6 2082 std z+0,R2
07A8 .dbline 55
07A8 L12:
07A8 .dbline 52
07A8 80914E00 lds R24,_i
07AC 90914F00 lds R25,_i+1
07B0 0196 adiw R24,1
07B2 90934F00 sts _i+1,R25
07B6 80934E00 sts _i,R24
07BA .dbline 52
07BA 8031 cpi R24,16
07BC E0E0 ldi R30,0
07BE 9E07 cpc R25,R30
07C0 94F2 brlt L11
07C2 .dbline 57
07C2 ; {
07C2 ; dataR[i]=dataI[i]; dataI[i]=0;
07C2 ; }
07C2 ; // FFT算法
07C2 ; for(L=1;L<=4;L++) // 第一层循环
07C2 81E0 ldi R24,1
07C4 90E0 ldi R25,0
07C6 90935100 sts _L+1,R25
07CA 80935000 sts _L,R24
07CE L15:
07CE .dbline 58
07CE ; {
07CE .dbline 59
07CE ; b=1; i=L-1;
07CE 81E0 ldi R24,1
07D0 90E0 ldi R25,0
07D2 90934900 sts _b+1,R25
07D6 80934800 sts _b,R24
07DA .dbline 59
07DA 80915000 lds R24,_L
07DE 90915100 lds R25,_L+1
07E2 0197 sbiw R24,1
07E4 90934F00 sts _i+1,R25
07E8 80934E00 sts _i,R24
07EC 15C0 xjmp L20
07EE L19:
07EE .dbline 61
07EE .dbline 62
07EE 20914800 lds R18,_b
07F2 30914900 lds R19,_b+1
07F6 02E0 ldi R16,2
07F8 10E0 ldi R17,0
07FA 0E940000 xcall empy16s
07FE 10934900 sts _b+1,R17
0802 00934800 sts _b,R16
0806 .dbline 62
0806 80914E00 lds R24,_i
080A 90914F00 lds R25,_i+1
080E 0197 sbiw R24,1
0810 90934F00 sts _i+1,R25
0814 80934E00 sts _i,R24
0818 .dbline 63
0818 L20:
0818 .dbline 60
0818 ; while(i>0)
0818 2224 clr R2
081A 3324 clr R3
081C 40904E00 lds R4,_i
0820 50904F00 lds R5,_i+1
0824 2414 cp R2,R4
0826 3504 cpc R3,R5
0828 14F3 brlt L19
082A .dbline 64
082A ; {
082A ; b=b*2; i--;
082A ; }
082A ; for(j=0;j<=b-1;j++) // 第二层循环
082A 30924D00 sts _j+1,R3
082E 20924C00 sts _j,R2
0832 6BC0 xjmp L25
0834 L22:
0834 .dbline 65
0834 ; {
0834 .dbline 66
0834 ; p=1; i=4-L;
0834 81E0 ldi R24,1
0836 90E0 ldi R25,0
0838 90934700 sts _p+1,R25
083C 80934600 sts _p,R24
0840 .dbline 66
0840 20905000 lds R2,_L
0844 30905100 lds R3,_L+1
0848 84E0 ldi R24,4
084A 8219 sub R24,R2
084C 9309 sbc R25,R3
084E 90934F00 sts _i+1,R25
0852 80934E00 sts _i,R24
0856 15C0 xjmp L27
0858 L26:
0858 .dbline 68
0858 .dbline 69
0858 20914600 lds R18,_p
085C 30914700 lds R19,_p+1
0860 02E0 ldi R16,2
0862 10E0 ldi R17,0
0864 0E940000 xcall empy16s
0868 10934700 sts _p+1,R17
086C 00934600 sts _p,R16
0870 .dbline 69
0870 80914E00 lds R24,_i
0874 90914F00 lds R25,_i+1
0878 0197 sbiw R24,1
087A 90934F00 sts _i+1,R25
087E 80934E00 sts _i,R24
0882 .dbline 70
0882 L27:
0882 .dbline 67
0882 ; while(i>0)
0882 2224 clr R2
0884 3324 clr R3
0886 40904E00 lds R4,_i
088A 50904F00 lds R5,_i+1
088E 2414 cp R2,R4
0890 3504 cpc R3,R5
0892 14F3 brlt L26
0894 .dbline 71
0894 ; {
0894 ; p=p*2; i--;
0894 ; }
0894 ; p=p*j;
0894 20914C00 lds R18,_j
0898 30914D00 lds R19,_j+1
089C 00914600 lds R16,_p
08A0 10914700 lds R17,_p+1
08A4 0E940000 xcall empy16s
08A8 10934700 sts _p+1,R17
08AC 00934600 sts _p,R16
08B0 .dbline 72
08B0 ; for(k=j;k<16;k=k+2*b) // 第三层循环
08B0 20904C00 lds R2,_j
08B4 30904D00 lds R3,_j+1
08B8 30924B00 sts _k+1,R3
08BC 20924A00 sts _k,R2
08C0 13C0 xjmp L32
08C2 L29:
08C2 .dbline 73
08C2 .dbline 74
08C2 06DC xcall _FFTT
08C4 .dbline 75
08C4 L30:
08C4 .dbline 72
08C4 20914800 lds R18,_b
08C8 30914900 lds R19,_b+1
08CC 02E0 ldi R16,2
08CE 10E0 ldi R17,0
08D0 0E940000 xcall empy16s
08D4 20904A00 lds R2,_k
08D8 30904B00 lds R3,_k+1
08DC 200E add R2,R16
08DE 311E adc R3,R17
08E0 30924B00 sts _k+1,R3
08E4 20924A00 sts _k,R2
08E8 L32:
08E8 .dbline 72
08E8 80914A00 lds R24,_k
08EC 90914B00 lds R25,_k+1
08F0 8031 cpi R24,16
08F2 E0E0 ldi R30,0
08F4 9E07 cpc R25,R30
08F6 2CF3 brlt L29
08F8 .dbline 76
08F8 L23:
08F8 .dbline 64
08F8 80914C00 lds R24,_j
08FC 90914D00 lds R25,_j+1
0900 0196 adiw R24,1
0902 90934D00 sts _j+1,R25
0906 80934C00 sts _j,R24
090A L25:
090A .dbline 64
090A 80914800 lds R24,_b
090E 90914900 lds R25,_b+1
0912 0197 sbiw R24,1
0914 20904C00 lds R2,_j
0918 30904D00 lds R3,_j+1
091C 8215 cp R24,R2
091E 9305 cpc R25,R3
0920 0CF0 brlt X0
0922 88CF xjmp L22
0924 X0:
0924 .dbline 77
0924 L16:
0924 .dbline 57
0924 80915000 lds R24,_L
0928 90915100 lds R25,_L+1
092C 0196 adiw R24,1
092E 90935100 sts _L+1,R25
0932 80935000 sts _L,R24
0936 .dbline 57
0936 84E0 ldi R24,4
0938 90E0 ldi R25,0
093A 20905000 lds R2,_L
093E 30905100 lds R3,_L+1
0942 8215 cp R24,R2
0944 9305 cpc R25,R3
0946 0CF0 brlt X1
0948 42CF xjmp L15
094A X1:
094A .dbline 78
094A ; {
094A ; FFTT();
094A ; }
094A ; }
094A ; }
094A ; for(i=0;i<32;i++) // 32次以下的谐波分析
094A 2224 clr R2
094C 3324 clr R3
094E 30924F00 sts _i+1,R3
0952 20924E00 sts _i,R2
0956 L33:
0956 .dbline 79
0956 ; {
0956 .dbline 80
0956 ; w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);
0956 20914E00 lds R18,_i
095A 30914F00 lds R19,_i+1
095E 02E0 ldi R16,2
0960 10E0 ldi R17,0
0962 0E940000 xcall empy16s
0966 F801 movw R30,R16
0968 E60F add R30,R22
096A F71F adc R31,R23
096C 2080 ldd R2,z+0
096E 3180 ldd R3,z+1
0970 F801 movw R30,R16
0972 E40F add R30,R20
0974 F51F adc R31,R21
0976 4080 ldd R4,z+0
0978 5180 ldd R5,z+1
097A 9201 movw R18,R4
097C 8201 movw R16,R4
097E 0E940000 xcall empy16s
0982 2801 movw R4,R16
0984 9101 movw R18,R2
0986 8101 movw R16,R2
0988 0E940000 xcall empy16s
098C 040D add R16,R4
098E 151D adc R17,R5
0990 0E940000 xcall int2fp
0994 0E940000 xcall _sqrt
0998 1801 movw R2,R16
099A 2901 movw R4,R18
099C 3A93 st -y,R19
099E 2A93 st -y,R18
09A0 1A93 st -y,R17
09A2 0A93 st -y,R16
09A4 00E0 ldi R16,L39
09A8 0E940000 xcall lpm32
09AC 3A93 st -y,R19
09AE 2A93 st -y,R18
09B0 1A93 st -y,R17
09B2 0A93 st -y,R16
09B4 0E940000 xcall cmp32f
09B8 ACF0 brlt L37
09BA 5A92 st -y,R5
09BC 4A92 st -y,R4
09BE 3A92 st -y,R3
09C0 2A92 st -y,R2
09C2 00E0 ldi R16,L39
09C6 0E940000 xcall lpm32
09CA 3A93 st -y,R19
09CC 2A93 st -y,R18
09CE 1A93 st -y,R17
09D0 0A93 st -y,R16
09D2 0E940000 xcall sub32f
09D6 0E940000 xcall fp2int
09DA C801 movw R24,R16
09DC 8050 subi R24,0 ; offset = 32768
09DE 9048 sbci R25,128
09E0 5C01 movw R10,R24
09E2 05C0 xjmp L38
09E4 L37:
09E4 8101 movw R16,R2
09E6 9201 movw R18,R4
09E8 0E940000 xcall fp2int
09EC 5801 movw R10,R16
09EE L38:
09EE 80E0 ldi R24,<_w
09F0 90E0 ldi R25,>_w
09F2 E0914E00 lds R30,_i
09F6 F0914F00 lds R31,_i+1
09FA E80F add R30,R24
09FC F91F adc R31,R25
09FE A082 std z+0,R10
0A00 .dbline 81
0A00 60904E00 lds R6,_i
0A04 70904F00 lds R7,_i+1
0A08 680E add R6,R24
0A0A 791E adc R7,R25
0A0C 10E4 ldi R17,64
0A0E F301 movw R30,R6
0A10 0081 ldd R16,z+0
0A12 0E940000 xcall div8u
0A16 F301 movw R30,R6
0A18 0083 std z+0,R16
0A1A .dbline 82
0A1A L34:
0A1A .dbline 78
0A1A 80914E00 lds R24,_i
0A1E 90914F00 lds R25,_i+1
0A22 0196 adiw R24,1
0A24 90934F00 sts _i+1,R25
0A28 80934E00 sts _i,R24
0A2C .dbline 78
0A2C 8032 cpi R24,32
0A2E E0E0 ldi R30,0
0A30 9E07 cpc R25,R30
0A32 0CF4 brge X2
0A34 90CF xjmp L33
0A36 X2:
0A36 .dbline 83
0A36 ; w[i]=w[i]/64;
0A36 ; }
0A36 ; w[0]=w[0]/2;
0A36 60902600 lds R6,_w
0A3A 6694 lsr R6
0A3C 60922600 sts _w,R6
0A40 .dbline -2
0A40 L6:
0A40 0E940000 xcall pop_gset3
0A44 .dbline 0 ; func end
0A44 0895 ret
0A46 .dbsym r dataI 20 pI
0A46 .dbsym r dataR 22 pI
0A46 .dbend
0A46 .dbfunc e main _main fV
.even
0A46 _main::
0A46 .dbline -1
0A46 .dbline 87
0A46 ; }
0A46 ;
0A46 ; void main ()
0A46 ; {
0A46 .dbline 88
0A46 ; FFT(dataR,dataI);
0A46 20E0 ldi R18,<_dataI
0A48 30E0 ldi R19,>_dataI
0A4A 00E0 ldi R16,<_dataR
0A4C 10E0 ldi R17,>_dataR
0A4E 6DDE xcall _FFT
0A50 L41:
0A50 .dbline 89
0A50 L42:
0A50 .dbline 89
0A50 FFCF xjmp L41
0A52 X3:
0A52 .dbline -2
0A52 L40:
0A52 .dbline 0 ; func end
0A52 0895 ret
0A54 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\HJN\Design\AVR\fft\fftbook.c
0000 _dataI::
0000 .blkb 32
0020 .dbsym e dataI _dataI A[32:16]I
0020 _temp::
0020 .blkb 2
0022 .dbsym e temp _temp i
0022 _TI::
0022 .blkb 2
0024 .dbsym e TI _TI i
0024 _TR::
0024 .blkb 2
0026 .dbsym e TR _TR i
0026 _w::
0026 .blkb 32
0046 .dbsym e w _w A[32:32]c
0046 _p::
0046 .blkb 2
0048 .dbsym e p _p I
0048 _b::
0048 .blkb 2
004A .dbsym e b _b I
004A _k::
004A .blkb 2
004C .dbsym e k _k I
004C _j::
004C .blkb 2
004E .dbsym e j _j I
004E _i::
004E .blkb 2
0050 .dbsym e i _i I
0050 _L::
0050 .blkb 2
0052 .dbsym e L _L I
0052 _x6::
0052 .blkb 2
0054 .dbsym e x6 _x6 i
0054 _x5::
0054 .blkb 2
0056 .dbsym e x5 _x5 i
0056 _x4::
0056 .blkb 2
0058 .dbsym e x4 _x4 i
0058 _x3::
0058 .blkb 2
005A .dbsym e x3 _x3 i
005A _x2::
005A .blkb 2
005C .dbsym e x2 _x2 i
005C _x1::
005C .blkb 2
005E .dbsym e x1 _x1 i
005E _x0::
005E .blkb 2
0060 .dbsym e x0 _x0 i
.area lit(rom, con, rel)
0000 L39:
0000 00000047 .word 0x0,0x4700
0004 L5:
0004 00000040 .word 0x0,0x4000
0008 L4:
0008 00008041 .word 0x0,0x4180
000C L3:
000C DA0FC940 .word 0xfda,0x40c9