?? fft.lst
字號:
__text_start:
__start:
004F E5CF LDI R28,0x5F
0050 E0D4 LDI R29,4
0051 BFCD OUT 0x3D,R28
0052 BFDE OUT 0x3E,R29
0053 51C0 SUBI R28,0x10
0054 40D0 SBCI R29,0
0055 EA0A LDI R16,0xAA
0056 8308 STD Y+0,R16
0057 2400 CLR R0
0058 E6E0 LDI R30,0x60
0059 E0F0 LDI R31,0
005A E010 LDI R17,0
005B 36E0 CPI R30,0x60
005C 07F1 CPC R31,R17
005D F011 BEQ 0x0060
005E 9201 ST R0,Z+
005F CFFB RJMP 0x005B
0060 8300 STD Z+0,R16
0061 E9EE LDI R30,0x9E
0062 E0F0 LDI R31,0
0063 E6A0 LDI R26,0x60
0064 E0B0 LDI R27,0
0065 E010 LDI R17,0
0066 39EE CPI R30,0x9E
0067 07F1 CPC R31,R17
0068 F021 BEQ 0x006D
0069 95C8 LPM
006A 9631 ADIW R30,1
006B 920D ST R0,X+
006C CFF9 RJMP 0x0066
006D 940E0598 CALL _main
_exit:
006F CFFF RJMP _exit
_four1:
theta --> Y+52
wpi --> Y+48
wpr --> Y+44
wtemp --> Y+40
m --> Y+36
istep --> Y+32
n --> Y+28
mmax --> Y+24
wr --> Y+20
wi --> Y+16
tempi --> Y+12
tempr --> Y+8
i --> Y+4
j --> Y+0
isign --> R10
nn --> Y+64
data --> R12
0070 933A ST R19,-Y
0071 932A ST R18,-Y
0072 940E0614 CALL push_gset4
0074 0168 MOVW R12,R16
0075 97E8 SBIW R28,0x38
0076 01FE MOVW R30,R28
0077 5BEC SUBI R30,0xBC
0078 4FFF SBCI R31,0xFF
0079 80A0 LDD R10,Z+0
007A 80B1 LDD R11,Z+1
FILE: D:\HJN\Design\AVR\fft\fft.c
(0001) /*data是輸入和輸出(復數),nn是FFT的點數 isign指示FFT變換方向1為正變換,
(0002) -1為反變換,程序出自《Numerical Recipes in C》 */
(0003)
(0004)
(0005) #include <math.h>
(0006) #define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr
(0007)
(0008) void four1(float data[], unsigned long nn, int isign)
(0009) {
(0010) unsigned long n,mmax,m,j,istep,i;
(0011) double wtemp,wr,wpr,wpi,wi,theta;
(0012) float tempr,tempi;
(0013)
(0014) n=nn << 1; //nn乘以2賦給n,作為取樣點數
007B 01FE MOVW R30,R28
007C 5CE0 SUBI R30,0xC0
007D 4FFF SBCI R31,0xFF
007E 8020 LDD R2,Z+0
007F 8031 LDD R3,Z+1
0080 8042 LDD R4,Z+2
0081 8053 LDD R5,Z+3
0082 0C22 LSL R2
0083 1C33 ROL R3
0084 1C44 ROL R4
0085 1C55 ROL R5
0086 01FE MOVW R30,R28
0087 8E24 STD Z+28,R2
0088 8E35 STD Z+29,R3
0089 8E46 STD Z+30,R4
008A 8E57 STD Z+31,R5
(0015) j=1;
008B E041 LDI R20,1
008C E050 LDI R21,0
008D E060 LDI R22,0
008E E070 LDI R23,0
008F 01FE MOVW R30,R28
0090 8340 STD Z+0,R20
0091 8351 STD Z+1,R21
0092 8362 STD Z+2,R22
0093 8373 STD Z+3,R23
(0016) for (i=1;i<n;i+=2) {
0094 E041 LDI R20,1
0095 E050 LDI R21,0
0096 E060 LDI R22,0
0097 E070 LDI R23,0
0098 01FE MOVW R30,R28
0099 8344 STD Z+4,R20
009A 8355 STD Z+5,R21
009B 8366 STD Z+6,R22
009C 8377 STD Z+7,R23
009D C179 RJMP 0x0217
(0017) if (j > i) {
009E 01FE MOVW R30,R28
009F 8024 LDD R2,Z+4
00A0 8035 LDD R3,Z+5
00A1 8046 LDD R4,Z+6
00A2 8057 LDD R5,Z+7
00A3 01FE MOVW R30,R28
00A4 8060 LDD R6,Z+0
00A5 8071 LDD R7,Z+1
00A6 8082 LDD R8,Z+2
00A7 8093 LDD R9,Z+3
00A8 1426 CP R2,R6
00A9 0437 CPC R3,R7
00AA 0448 CPC R4,R8
00AB 0459 CPC R5,R9
00AC F008 BCS 0x00AE
00AD C0F6 RJMP 0x01A4
(0018) SWAP(data[j],data[i]);
00AE 01FE MOVW R30,R28
00AF 8020 LDD R2,Z+0
00B0 8031 LDD R3,Z+1
00B1 8042 LDD R4,Z+2
00B2 8053 LDD R5,Z+3
00B3 E044 LDI R20,4
00B4 E050 LDI R21,0
00B5 E060 LDI R22,0
00B6 E070 LDI R23,0
00B7 925A ST R5,-Y
00B8 924A ST R4,-Y
00B9 923A ST R3,-Y
00BA 922A ST R2,-Y
00BB 018A MOVW R16,R20
00BC 019B MOVW R18,R22
00BD 940E05D9 CALL empy32u
00BF 01F8 MOVW R30,R16
00C0 0DEC ADD R30,R12
00C1 1DFD ADC R31,R13
00C2 8020 LDD R2,Z+0
00C3 8031 LDD R3,Z+1
00C4 8042 LDD R4,Z+2
00C5 8053 LDD R5,Z+3
00C6 01FE MOVW R30,R28
00C7 8620 STD Z+8,R2
00C8 8631 STD Z+9,R3
00C9 8642 STD Z+10,R4
00CA 8653 STD Z+11,R5
00CB 01FE MOVW R30,R28
00CC 8024 LDD R2,Z+4
00CD 8035 LDD R3,Z+5
00CE 8046 LDD R4,Z+6
00CF 8057 LDD R5,Z+7
00D0 E044 LDI R20,4
00D1 E050 LDI R21,0
00D2 E060 LDI R22,0
00D3 E070 LDI R23,0
00D4 925A ST R5,-Y
00D5 924A ST R4,-Y
00D6 923A ST R3,-Y
00D7 922A ST R2,-Y
00D8 018A MOVW R16,R20
00D9 019B MOVW R18,R22
00DA 940E05D9 CALL empy32u
00DC 01F8 MOVW R30,R16
00DD 0DEC ADD R30,R12
00DE 1DFD ADC R31,R13
00DF 8020 LDD R2,Z+0
00E0 8031 LDD R3,Z+1
00E1 8042 LDD R4,Z+2
00E2 8053 LDD R5,Z+3
00E3 01FE MOVW R30,R28
00E4 8060 LDD R6,Z+0
00E5 8071 LDD R7,Z+1
00E6 8082 LDD R8,Z+2
00E7 8093 LDD R9,Z+3
00E8 E044 LDI R20,4
00E9 E050 LDI R21,0
00EA E060 LDI R22,0
00EB E070 LDI R23,0
00EC 929A ST R9,-Y
00ED 928A ST R8,-Y
00EE 927A ST R7,-Y
00EF 926A ST R6,-Y
00F0 018A MOVW R16,R20
00F1 019B MOVW R18,R22
00F2 940E05D9 CALL empy32u
00F4 01F8 MOVW R30,R16
00F5 0DEC ADD R30,R12
00F6 1DFD ADC R31,R13
00F7 8220 STD Z+0,R2
00F8 8231 STD Z+1,R3
00F9 8242 STD Z+2,R4
00FA 8253 STD Z+3,R5
00FB 01FE MOVW R30,R28
00FC 8024 LDD R2,Z+4
00FD 8035 LDD R3,Z+5
00FE 8046 LDD R4,Z+6
00FF 8057 LDD R5,Z+7
0100 E044 LDI R20,4
0101 E050 LDI R21,0
0102 E060 LDI R22,0
0103 E070 LDI R23,0
0104 925A ST R5,-Y
0105 924A ST R4,-Y
0106 923A ST R3,-Y
0107 922A ST R2,-Y
0108 018A MOVW R16,R20
0109 019B MOVW R18,R22
010A 940E05D9 CALL empy32u
010C 01F8 MOVW R30,R16
010D 0DEC ADD R30,R12
010E 1DFD ADC R31,R13
010F 01DE MOVW R26,R28
0110 9618 ADIW R26,0x8
0111 902D LD R2,X+
0112 903D LD R3,X+
0113 904D LD R4,X+
0114 905C LD R5,0(X)
0115 8220 STD Z+0,R2
0116 8231 STD Z+1,R3
0117 8242 STD Z+2,R4
0118 8253 STD Z+3,R5
(0019) SWAP(data[j+1],data[i+1]);
0119 E041 LDI R20,1
011A E050 LDI R21,0
011B E060 LDI R22,0
011C E070 LDI R23,0
011D 01FE MOVW R30,R28
011E 8020 LDD R2,Z+0
011F 8031 LDD R3,Z+1
0120 8042 LDD R4,Z+2
0121 8053 LDD R5,Z+3
0122 0E24 ADD R2,R20
0123 1E35 ADC R3,R21
0124 1E46 ADC R4,R22
0125 1E57 ADC R5,R23
0126 E044 LDI R20,4
0127 E050 LDI R21,0
0128 E060 LDI R22,0
0129 E070 LDI R23,0
012A 925A ST R5,-Y
012B 924A ST R4,-Y
012C 923A ST R3,-Y
012D 922A ST R2,-Y
012E 018A MOVW R16,R20
012F 019B MOVW R18,R22
0130 940E05D9 CALL empy32u
0132 01F8 MOVW R30,R16
0133 0DEC ADD R30,R12
0134 1DFD ADC R31,R13
0135 8020 LDD R2,Z+0
0136 8031 LDD R3,Z+1
0137 8042 LDD R4,Z+2
0138 8053 LDD R5,Z+3
0139 01FE MOVW R30,R28
013A 8620 STD Z+8,R2
013B 8631 STD Z+9,R3
013C 8642 STD Z+10,R4
013D 8653 STD Z+11,R5
013E E041 LDI R20,1
013F E050 LDI R21,0
0140 E060 LDI R22,0
0141 E070 LDI R23,0
0142 01FE MOVW R30,R28
0143 8024 LDD R2,Z+4
0144 8035 LDD R3,Z+5
0145 8046 LDD R4,Z+6
0146 8057 LDD R5,Z+7
0147 0E24 ADD R2,R20
0148 1E35 ADC R3,R21
0149 1E46 ADC R4,R22
014A 1E57 ADC R5,R23
014B E044 LDI R20,4
014C E050 LDI R21,0
014D E060 LDI R22,0
014E E070 LDI R23,0
014F 925A ST R5,-Y
0150 924A ST R4,-Y
0151 923A ST R3,-Y
0152 922A ST R2,-Y
0153 018A MOVW R16,R20
0154 019B MOVW R18,R22
0155 940E05D9 CALL empy32u
0157 01F8 MOVW R30,R16
0158 0DEC ADD R30,R12
0159 1DFD ADC R31,R13
015A 8020 LDD R2,Z+0
015B 8031 LDD R3,Z+1
015C 8042 LDD R4,Z+2
015D 8053 LDD R5,Z+3
015E E041 LDI R20,1
015F E050 LDI R21,0
0160 E060 LDI R22,0
0161 E070 LDI R23,0
0162 01FE MOVW R30,R28
0163 8060 LDD R6,Z+0
0164 8071 LDD R7,Z+1
0165 8082 LDD R8,Z+2
0166 8093 LDD R9,Z+3
0167 0E64 ADD R6,R20
0168 1E75 ADC R7,R21
0169 1E86 ADC R8,R22
016A 1E97 ADC R9,R23
016B E044 LDI R20,4
016C E050 LDI R21,0
016D E060 LDI R22,0
016E E070 LDI R23,0
016F 929A ST R9,-Y
0170 928A ST R8,-Y
0171 927A ST R7,-Y
0172 926A ST R6,-Y
0173 018A MOVW R16,R20
0174 019B MOVW R18,R22
0175 940E05D9 CALL empy32u
0177 01F8 MOVW R30,R16
0178 0DEC ADD R30,R12
0179 1DFD ADC R31,R13
017A 8220 STD Z+0,R2
017B 8231 STD Z+1,R3
017C 8242 STD Z+2,R4
017D 8253 STD Z+3,R5
017E E041 LDI R20,1
017F E050 LDI R21,0
0180 E060 LDI R22,0
0181 E070 LDI R23,0
0182 01FE MOVW R30,R28
0183 8024 LDD R2,Z+4
0184 8035 LDD R3,Z+5
0185 8046 LDD R4,Z+6
0186 8057 LDD R5,Z+7
0187 0E24 ADD R2,R20
0188 1E35 ADC R3,R21
0189 1E46 ADC R4,R22
018A 1E57 ADC R5,R23
018B E044 LDI R20,4
018C E050 LDI R21,0
018D E060 LDI R22,0
018E E070 LDI R23,0
018F 925A ST R5,-Y
0190 924A ST R4,-Y
0191 923A ST R3,-Y
0192 922A ST R2,-Y
0193 018A MOVW R16,R20
0194 019B MOVW R18,R22
0195 940E05D9 CALL empy32u
0197 01F8 MOVW R30,R16
0198 0DEC ADD R30,R12
0199 1DFD ADC R31,R13
019A 01DE MOVW R26,R28
019B 9618 ADIW R26,0x8
019C 902D LD R2,X+
019D 903D LD R3,X+
019E 904D LD R4,X+
019F 905C LD R5,0(X)
01A0 8220 STD Z+0,R2
01A1 8231 STD Z+1,R3
01A2 8242 STD Z+2,R4
01A3 8253 STD Z+3,R5
(0020) }
(0021) m=n >> 1; //將n除以2的值賦給m
01A4 01FE MOVW R30,R28
01A5 8C24 LDD R2,Z+28
01A6 8C35 LDD R3,Z+29
01A7 8C46 LDD R4,Z+30
01A8 8C57 LDD R5,Z+31
01A9 9456 LSR R5
01AA 9447 ROR R4
01AB 9437 ROR R3
01AC 9427 ROR R2
01AD 01FE MOVW R30,R28
01AE A224 STD Z+36,R2
01AF A235 STD Z+37,R3
01B0 A246 STD Z+38,R4
01B1 A257 STD Z+39,R5
01B2 C021 RJMP 0x01D4
(0022) while (m >= 2 && j > m)
(0023) {
(0024) j -= m;
01B3 01FE MOVW R30,R28
01B4 A024 LDD R2,Z+36
01B5 A035 LDD R3,Z+37
01B6 A046 LDD R4,Z+38
01B7 A057 LDD R5,Z+39
01B8 01FE MOVW R30,R28
01B9 8060 LDD R6,Z+0
01BA 8071 LDD R7,Z+1
01BB 8082 LDD R8,Z+2
01BC 8093 LDD R9,Z+3
01BD 1862 SUB R6,R2
01BE 0873 SBC R7,R3
01BF 0884 SBC R8,R4
01C0 0895 SBC R9,R5
01C1 01FE MOVW R30,R28
01C2 8260 STD Z+0,R6
01C3 8271 STD Z+1,R7
01C4 8282 STD Z+2,R8
01C5 8293 STD Z+3,R9
(0025) m >>= 1; //將m除以2的值賦給m
01C6 01FE MOVW R30,R28
01C7 A024 LDD R2,Z+36
01C8 A035 LDD R3,Z+37
01C9 A046 LDD R4,Z+38
01CA A057 LDD R5,Z+39
01CB 9456 LSR R5
01CC 9447 ROR R4
01CD 9437 ROR R3
01CE 9427 ROR R2
01CF 01FE MOVW R30,R28
01D0 A224 STD Z+36,R2
01D1 A235 STD Z+37,R3
01D2 A246 STD Z+38,R4
01D3 A257 STD Z+39,R5
01D4 E042 LDI R20,2
01D5 E050 LDI R21,0
01D6 E060 LDI R22,0
01D7 E070 LDI R23,0
01D8 01FE MOVW R30,R28
01D9 A024 LDD R2,Z+36
01DA A035 LDD R3,Z+37
01DB A046 LDD R4,Z+38
01DC A057 LDD R5,Z+39
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -