📄 fft1.lst
字号:
__text_start:
__start:
007D E5CF LDI R28,0x5F
007E E0D4 LDI R29,4
007F BFCD OUT 0x3D,R28
0080 BFDE OUT 0x3E,R29
0081 51C0 SUBI R28,0x10
0082 40D0 SBCI R29,0
0083 EA0A LDI R16,0xAA
0084 8308 STD Y+0,R16
0085 2400 CLR R0
0086 E6E0 LDI R30,0x60
0087 E0F0 LDI R31,0
0088 E010 LDI R17,0
0089 36E2 CPI R30,0x62
008A 07F1 CPC R31,R17
008B F011 BEQ 0x008E
008C 9201 ST R0,Z+
008D CFFB RJMP 0x0089
008E 8300 STD Z+0,R16
008F EFEA LDI R30,0xFA
0090 E0F0 LDI R31,0
0091 E6A0 LDI R26,0x60
0092 E0B0 LDI R27,0
0093 E010 LDI R17,0
0094 3FEA CPI R30,0xFA
0095 07F1 CPC R31,R17
0096 F021 BEQ 0x009B
0097 95C8 LPM
0098 9631 ADIW R30,1
0099 920D ST R0,X+
009A CFF9 RJMP 0x0094
009B 940E0723 CALL _main
_exit:
009D CFFF RJMP _exit
_FFT:
l0 --> Y+36
vi --> Y+32
vr --> Y+28
is --> Y+26
i --> Y+24
poddi --> Y+20
poddr --> Y+16
q --> Y+12
p --> Y+8
s --> Y+4
m --> Y+2
nv --> Y+0
it --> R20
j --> R10
il --> Y+70
l --> Y+68
fi --> R12
fr --> R14
k --> Y+62
n --> Y+60
pi --> Y+58
pr --> Y+56
009E 940E0725 CALL push_arg4
00A0 940E077D CALL push_gset5
00A2 97AE SBIW R28,0x2E
00A3 01FE MOVW R30,R28
00A4 5CE0 SUBI R30,0xC0
00A5 4FFF SBCI R31,0xFF
00A6 80E0 LDD R14,Z+0
00A7 80F1 LDD R15,Z+1
00A8 01FE MOVW R30,R28
00A9 5BEE SUBI R30,0xBE
00AA 4FFF SBCI R31,0xFF
00AB 80C0 LDD R12,Z+0
00AC 80D1 LDD R13,Z+1
FILE: D:\HJN\Design\AVR\fft\fft2.c
(0001) #include<math.h>
(0002)
(0003) /*pr:输入实部
(0004) pi:输入虚部
(0005) n为2^k,n不小于数据个数
(0006) l:为0表示正变换,1表示反变换
(0007) il:1表示fr为取模结果。0表示fr输出实部fi输出虚部
(0008) */
(0009) void FFT(double* pr, double* pi, int n, int k, double* fr, double* fi, int l, int il)
(0010) {
(0011) int it,m,is,i,j,nv,l0;
(0012) double p,q,s,vr,vi,poddr,poddi;
(0013) for(it = 0;it <= n - 1;it ++)
00AD 2744 CLR R20
00AE 2755 CLR R21
00AF C06B RJMP 0x011B
(0014) {
(0015) m = it;
00B0 835B STD Y+3,R21
00B1 834A STD Y+2,R20
(0016) is = 0;
00B2 2422 CLR R2
00B3 2433 CLR R3
00B4 8E3B STD Y+27,R3
00B5 8E2A STD Y+26,R2
(0017) for(i = 0;i <= k - 1;i ++)
00B6 8E39 STD Y+25,R3
00B7 8E28 STD Y+24,R2
00B8 C022 RJMP 0x00DB
(0018) {
(0019) j = m / 2;
00B9 E022 LDI R18,2
00BA E030 LDI R19,0
00BB 810A LDD R16,Y+2
00BC 811B LDD R17,Y+3
00BD 940E072E CALL div16s
00BF 0158 MOVW R10,R16
(0020) is = 2 * is + (m - 2 * j);
00C0 E002 LDI R16,2
00C1 E010 LDI R17,0
00C2 0195 MOVW R18,R10
00C3 940E0764 CALL empy16s
00C5 802A LDD R2,Y+2
00C6 803B LDD R3,Y+3
00C7 1A20 SUB R2,R16
00C8 0A31 SBC R3,R17
00C9 8D2A LDD R18,Y+26
00CA 8D3B LDD R19,Y+27
00CB E002 LDI R16,2
00CC E010 LDI R17,0
00CD 940E0764 CALL empy16s
00CF 0128 MOVW R4,R16
00D0 0C42 ADD R4,R2
00D1 1C53 ADC R5,R3
00D2 8E5B STD Y+27,R5
00D3 8E4A STD Y+26,R4
(0021) m = j;
00D4 82BB STD Y+3,R11
00D5 82AA STD Y+2,R10
00D6 8D88 LDD R24,Y+24
00D7 8D99 LDD R25,Y+25
00D8 9601 ADIW R24,1
00D9 8F99 STD Y+25,R25
00DA 8F88 STD Y+24,R24
00DB AD8E LDD R24,Y+62
00DC AD9F LDD R25,Y+63
00DD 9701 SBIW R24,1
00DE 8C28 LDD R2,Y+24
00DF 8C39 LDD R3,Y+25
00E0 1582 CP R24,R2
00E1 0593 CPC R25,R3
00E2 F6B4 BGE 0x00B9
(0022) }
(0023) fr[it] = pr[is];
00E3 8D2A LDD R18,Y+26
00E4 8D3B LDD R19,Y+27
00E5 E004 LDI R16,4
00E6 E010 LDI R17,0
00E7 940E0764 CALL empy16s
00E9 01F8 MOVW R30,R16
00EA AC08 LDD R0,Y+56
00EB AC19 LDD R1,Y+57
00EC 0DE0 ADD R30,R0
00ED 1DF1 ADC R31,R1
00EE 8020 LDD R2,Z+0
00EF 8031 LDD R3,Z+1
00F0 8042 LDD R4,Z+2
00F1 8053 LDD R5,Z+3
00F2 E004 LDI R16,4
00F3 E010 LDI R17,0
00F4 019A MOVW R18,R20
00F5 940E0764 CALL empy16s
00F7 01F8 MOVW R30,R16
00F8 0DEE ADD R30,R14
00F9 1DFF ADC R31,R15
00FA 8220 STD Z+0,R2
00FB 8231 STD Z+1,R3
00FC 8242 STD Z+2,R4
00FD 8253 STD Z+3,R5
(0024) fi[it] = pi[is];
00FE 8D2A LDD R18,Y+26
00FF 8D3B LDD R19,Y+27
0100 E004 LDI R16,4
0101 E010 LDI R17,0
0102 940E0764 CALL empy16s
0104 01F8 MOVW R30,R16
0105 AC0A LDD R0,Y+58
0106 AC1B LDD R1,Y+59
0107 0DE0 ADD R30,R0
0108 1DF1 ADC R31,R1
0109 8020 LDD R2,Z+0
010A 8031 LDD R3,Z+1
010B 8042 LDD R4,Z+2
010C 8053 LDD R5,Z+3
010D E004 LDI R16,4
010E E010 LDI R17,0
010F 019A MOVW R18,R20
0110 940E0764 CALL empy16s
0112 01F8 MOVW R30,R16
0113 0DEC ADD R30,R12
0114 1DFD ADC R31,R13
0115 8220 STD Z+0,R2
0116 8231 STD Z+1,R3
0117 8242 STD Z+2,R4
0118 8253 STD Z+3,R5
0119 5F4F SUBI R20,0xFF
011A 4F5F SBCI R21,0xFF
011B AD8C LDD R24,Y+60
011C AD9D LDD R25,Y+61
011D 9701 SBIW R24,1
011E 1784 CP R24,R20
011F 0795 CPC R25,R21
0120 F00C BLT 0x0122
0121 CF8E RJMP 0x00B0
(0025) }
(0026) pr[0] = 1.0;
0122 E60C LDI R16,0x6C
0123 E010 LDI R17,0
0124 940E07A5 CALL lpm32
0126 0118 MOVW R2,R16
0127 0129 MOVW R4,R18
0128 ADE8 LDD R30,Y+56
0129 ADF9 LDD R31,Y+57
012A 8220 STD Z+0,R2
012B 8231 STD Z+1,R3
012C 8242 STD Z+2,R4
012D 8253 STD Z+3,R5
(0027) pi[0] = 0.0;
012E E608 LDI R16,0x68
012F E010 LDI R17,0
0130 940E07A5 CALL lpm32
0132 0118 MOVW R2,R16
0133 0129 MOVW R4,R18
0134 ADEA LDD R30,Y+58
0135 ADFB LDD R31,Y+59
0136 8220 STD Z+0,R2
0137 8231 STD Z+1,R3
0138 8242 STD Z+2,R4
0139 8253 STD Z+3,R5
(0028) p = 6.283185306 / (1.0 * n);
013A E604 LDI R16,0x64
013B E010 LDI R17,0
013C 940E07A5 CALL lpm32
013E 933A ST R19,-Y
013F 932A ST R18,-Y
0140 931A ST R17,-Y
0141 930A ST R16,-Y
0142 E60C LDI R16,0x6C
0143 E010 LDI R17,0
0144 940E07A5 CALL lpm32
0146 933A ST R19,-Y
0147 932A ST R18,-Y
0148 931A ST R17,-Y
0149 930A ST R16,-Y
014A 01FE MOVW R30,R28
014B 5BEC SUBI R30,0xBC
014C 4FFF SBCI R31,0xFF
014D 8100 LDD R16,Z+0
014E 8111 LDD R17,Z+1
014F 940E080D CALL int2fp
0151 933A ST R19,-Y
0152 932A ST R18,-Y
0153 931A ST R17,-Y
0154 930A ST R16,-Y
0155 940E0998 CALL empy32fs
0157 940E08CD CALL div32f
0159 01FE MOVW R30,R28
015A 8700 STD Z+8,R16
015B 8711 STD Z+9,R17
015C 8722 STD Z+10,R18
015D 8733 STD Z+11,R19
(0029) pr[1] = cos(p);
015E 01FE MOVW R30,R28
015F 8500 LDD R16,Z+8
0160 8511 LDD R17,Z+9
0161 8522 LDD R18,Z+10
0162 8533 LDD R19,Z+11
0163 940E0C8E CALL _cos
0165 0118 MOVW R2,R16
0166 0129 MOVW R4,R18
0167 ADE8 LDD R30,Y+56
0168 ADF9 LDD R31,Y+57
0169 8224 STD Z+4,R2
016A 8235 STD Z+5,R3
016B 8246 STD Z+6,R4
016C 8257 STD Z+7,R5
(0030) pi[1] = -sin(p);
016D 01FE MOVW R30,R28
016E 8500 LDD R16,Z+8
016F 8511 LDD R17,Z+9
0170 8522 LDD R18,Z+10
0171 8533 LDD R19,Z+11
0172 940E0F4A CALL _sin
0174 933A ST R19,-Y
0175 932A ST R18,-Y
0176 931A ST R17,-Y
0177 930A ST R16,-Y
0178 940E09E8 CALL neg32f
017A ADEA LDD R30,Y+58
017B ADFB LDD R31,Y+59
017C 8304 STD Z+4,R16
017D 8315 STD Z+5,R17
017E 8326 STD Z+6,R18
017F 8337 STD Z+7,R19
(0031) if(l != 0)
0180 01FE MOVW R30,R28
0181 5BEC SUBI R30,0xBC
0182 4FFF SBCI R31,0xFF
0183 8000 LDD R0,Z+0
0184 8011 LDD R1,Z+1
0185 2000 TST R0
0186 F411 BNE 0x0189
0187 2011 TST R1
0188 F0A1 BEQ 0x019D
(0032) pi[1] = -pi[1];
0189 AD8A LDD R24,Y+58
018A AD9B LDD R25,Y+59
018B 9604 ADIW R24,4
018C 011C MOVW R2,R24
018D 01FC MOVW R30,R24
018E 8040 LDD R4,Z+0
018F 8051 LDD R5,Z+1
0190 8062 LDD R6,Z+2
0191 8073 LDD R7,Z+3
0192 927A ST R7,-Y
0193 926A ST R6,-Y
0194 925A ST R5,-Y
0195 924A ST R4,-Y
0196 940E09E8 CALL neg32f
0198 01F1 MOVW R30,R2
0199 8300 STD Z+0,R16
019A 8311 STD Z+1,R17
019B 8322 STD Z+2,R18
019C 8333 STD Z+3,R19
(0033) for(i = 2;i <= n - 1;i ++)
019D E082 LDI R24,2
019E E090 LDI R25,0
019F 8F99 STD Y+25,R25
01A0 8F88 STD Y+24,R24
01A1 C0E4 RJMP 0x0286
(0034) {
(0035) p = pr[i - 1] * pr[1];
01A2 8D28 LDD R18,Y+24
01A3 8D39 LDD R19,Y+25
01A4 E004 LDI R16,4
01A5 E010 LDI R17,0
01A6 940E0764 CALL empy16s
01A8 01F8 MOVW R30,R16
01A9 9734 SBIW R30,4
01AA AC08 LDD R0,Y+56
01AB AC19 LDD R1,Y+57
01AC 0DE0 ADD R30,R0
01AD 1DF1 ADC R31,R1
01AE 8020 LDD R2,Z+0
01AF 8031 LDD R3,Z+1
01B0 8042 LDD R4,Z+2
01B1 8053 LDD R5,Z+3
01B2 925A ST R5,-Y
01B3 924A ST R4,-Y
01B4 923A ST R3,-Y
01B5 922A ST R2,-Y
01B6 01F0 MOVW R30,R0
01B7 8024 LDD R2,Z+4
01B8 8035 LDD R3,Z+5
01B9 8046 LDD R4,Z+6
01BA 8057 LDD R5,Z+7
01BB 925A ST R5,-Y
01BC 924A ST R4,-Y
01BD 923A ST R3,-Y
01BE 922A ST R2,-Y
01BF 940E099B CALL empy32f
01C1 01FE MOVW R30,R28
01C2 8700 STD Z+8,R16
01C3 8711 STD Z+9,R17
01C4 8722 STD Z+10,R18
01C5 8733 STD Z+11,R19
(0036) q = pi[i - 1] * pi[1];
01C6 8D28 LDD R18,Y+24
01C7 8D39 LDD R19,Y+25
01C8 E004 LDI R16,4
01C9 E010 LDI R17,0
01CA 940E0764 CALL empy16s
01CC 01F8 MOVW R30,R16
01CD 9734 SBIW R30,4
01CE AC0A LDD R0,Y+58
01CF AC1B LDD R1,Y+59
01D0 0DE0 ADD R30,R0
01D1 1DF1 ADC R31,R1
01D2 8020 LDD R2,Z+0
01D3 8031 LDD R3,Z+1
01D4 8042 LDD R4,Z+2
01D5 8053 LDD R5,Z+3
01D6 925A ST R5,-Y
01D7 924A ST R4,-Y
01D8 923A ST R3,-Y
01D9 922A ST R2,-Y
01DA 01F0 MOVW R30,R0
01DB 8024 LDD R2,Z+4
01DC 8035 LDD R3,Z+5
01DD 8046 LDD R4,Z+6
01DE 8057 LDD R5,Z+7
01DF 925A ST R5,-Y
01E0 924A ST R4,-Y
01E1 923A ST R3,-Y
01E2 922A ST R2,-Y
01E3 940E099B CALL empy32f
01E5 01FE MOVW R30,R28
01E6 8704 STD Z+12,R16
01E7 8715 STD Z+13,R17
01E8 8726 STD Z+14,R18
01E9 8737 STD Z+15,R19
(0037) s = (pr[i - 1] + pi[i - 1]) * (pr[1] + pi[1]);
01EA 8D28 LDD R18,Y+24
01EB 8D39 LDD R19,Y+25
01EC E004 LDI R16,4
01ED E010 LDI R17,0
01EE 940E0764 CALL empy16s
01F0 01C8 MOVW R24,R16
01F1 9704 SBIW R24,4
01F2 01FC MOVW R30,R24
01F3 AC08 LDD R0,Y+56
01F4 AC19 LDD R1,Y+57
01F5 0DE0 ADD R30,R0
01F6 1DF1 ADC R31,R1
01F7 8040 LDD R4,Z+0
01F8 8051 LDD R5,Z+1
01F9 8062 LDD R6,Z+2
01FA 8073 LDD R7,Z+3
01FB 927A ST R7,-Y
01FC 926A ST R6,-Y
01FD 925A ST R5,-Y
01FE 924A ST R4,-Y
01FF 01FC MOVW R30,R24
0200 AC0E LDD R0,Y+62
0201 AC1F LDD R1,Y+63
0202 0DE0 ADD R30,R0
0203 1DF1 ADC R31,R1
0204 8020 LDD R2,Z+0
0205 8031 LDD R3,Z+1
0206 8042 LDD R4,Z+2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -