📄 fftbook.lst
字号:
__text_start:
__start:
006B E5CF LDI R28,0x5F
006C E0D4 LDI R29,4
006D BFCD OUT 0x3D,R28
006E BFDE OUT 0x3E,R29
006F 51C0 SUBI R28,0x10
0070 40D0 SBCI R29,0
0071 EA0A LDI R16,0xAA
0072 8308 STD Y+0,R16
0073 2400 CLR R0
0074 E8E0 LDI R30,0x80
0075 E0F0 LDI R31,0
0076 E010 LDI R17,0
0077 3EE2 CPI R30,0xE2
0078 07F1 CPC R31,R17
0079 F011 BEQ 0x007C
007A 9201 ST R0,Z+
007B CFFB RJMP 0x0077
007C 8300 STD Z+0,R16
007D EBE6 LDI R30,0xB6
007E E0F0 LDI R31,0
007F E6A0 LDI R26,0x60
0080 E0B0 LDI R27,0
0081 E010 LDI R17,0
0082 3DE6 CPI R30,0xD6
0083 07F1 CPC R31,R17
0084 F021 BEQ 0x0089
0085 95C8 LPM
0086 9631 ADIW R30,1
0087 920D ST R0,X+
0088 CFF9 RJMP 0x0082
0089 940E05AF CALL _main
_exit:
008B CFFF RJMP _exit
_CHANGE:
b6 --> R22
b5 --> R22
b4 --> R22
all --> R20
b3 --> R22
b2 --> R10
b1 --> R14
b0 --> R12
008C 940E0626 CALL push_gset5
FILE: D:\HJN\Design\AVR\fft\fftbook.c
(0001) #include <math.h>
(0002) #define uint unsigned int
(0003) #define uchar unsigned char
(0004) #define PI 3.1415926
(0005)
(0006) uint x0,x1,x2,x3,x4,x5,x6;
(0007) int L,i,j,k,b,p;
(0008) uchar w[32];
(0009) uint TR,TI,temp;
(0010)
(0011) int dataR[]={5,5,5,5,0,0,0,0,5,5,5,5,0,0,0,0};
(0012) int dataI[16];
(0013)
(0014) void CHANGE()
(0015) { //i为原始存放位置,最后得invert_pos为倒位序存放位置
(0016) int b0 , b1 , b2 , b3 , b4 , b5 , b6 , all;
(0017) b0 = b1 = b2 = b3 = b4 = b5 = b6 = all = 0;
008E 2744 CLR R20
008F 2755 CLR R21
0090 2766 CLR R22
0091 2777 CLR R23
0092 24AA CLR R10
0093 24BB CLR R11
0094 24EE CLR R14
0095 24FF CLR R15
0096 24CC CLR R12
0097 24DD CLR R13
(0018) b0 = i&0x01;
0098 918000CE LDS R24,i
009A 919000CF LDS R25,i+1
009C 7081 ANDI R24,1
009D 7090 ANDI R25,0
009E 016C MOVW R12,R24
(0019) b1 = (i>>1)&0x01;
009F 918000CE LDS R24,i
00A1 919000CF LDS R25,i+1
00A3 9595 ASR R25
00A4 9587 ROR R24
00A5 7081 ANDI R24,1
00A6 7090 ANDI R25,0
00A7 017C MOVW R14,R24
(0020) b2 = (i>>2)&0x01;
00A8 918000CE LDS R24,i
00AA 919000CF LDS R25,i+1
00AC 9595 ASR R25
00AD 9587 ROR R24
00AE 9595 ASR R25
00AF 9587 ROR R24
00B0 7081 ANDI R24,1
00B1 7090 ANDI R25,0
00B2 015C MOVW R10,R24
(0021) b3 = (i>>3)&0x01;
00B3 916000CE LDS R22,i
00B5 917000CF LDS R23,i+1
00B7 9575 ASR R23
00B8 9567 ROR R22
00B9 9575 ASR R23
00BA 9567 ROR R22
00BB 9575 ASR R23
00BC 9567 ROR R22
00BD 7061 ANDI R22,1
00BE 7070 ANDI R23,0
(0022) // b4 = (i>>4)&0x01;
(0023) //b5 = (i>>5)&0x01;
(0024) // b6 = (i>>6)&0x01;
(0025) all = b0*8 + b1*4 + b2*2 + b3; //*8 + b4*4 + b5*2 + b6;
00BF E004 LDI R16,4
00C0 E010 LDI R17,0
00C1 0197 MOVW R18,R14
00C2 940E060D CALL empy16s
00C4 0118 MOVW R2,R16
00C5 E008 LDI R16,0x8
00C6 E010 LDI R17,0
00C7 0196 MOVW R18,R12
00C8 940E060D CALL empy16s
00CA 01A8 MOVW R20,R16
00CB 0D42 ADD R20,R2
00CC 1D53 ADC R21,R3
00CD E002 LDI R16,2
00CE E010 LDI R17,0
00CF 0195 MOVW R18,R10
00D0 940E060D CALL empy16s
00D2 0F40 ADD R20,R16
00D3 1F51 ADC R21,R17
00D4 0F46 ADD R20,R22
00D5 1F57 ADC R21,R23
(0026) dataI[all] = dataR[i];
00D6 912000CE LDS R18,i
00D8 913000CF LDS R19,i+1
00DA E002 LDI R16,2
00DB E010 LDI R17,0
00DC 940E060D CALL empy16s
00DE 01F8 MOVW R30,R16
00DF E680 LDI R24,0x60
00E0 E090 LDI R25,0
00E1 0FE8 ADD R30,R24
00E2 1FF9 ADC R31,R25
00E3 8020 LDD R2,Z+0
00E4 8031 LDD R3,Z+1
00E5 E002 LDI R16,2
00E6 E010 LDI R17,0
00E7 019A MOVW R18,R20
00E8 940E060D CALL empy16s
00EA 01F8 MOVW R30,R16
00EB E880 LDI R24,0x80
00EC E090 LDI R25,0
00ED 0FE8 ADD R30,R24
00EE 1FF9 ADC R31,R25
00EF 8231 STD Z+1,R3
00F0 8220 STD Z+0,R2
00F1 940E0623 CALL pop_gset5
00F3 9508 RET
(0027) }
(0028)
(0029)
(0030) void FFTT()
(0031) { TR=dataR[k];
_FFTT:
00F4 912000CA LDS R18,k
00F6 913000CB LDS R19,k+1
00F8 E002 LDI R16,2
00F9 E010 LDI R17,0
00FA 940E060D CALL empy16s
00FC 01F8 MOVW R30,R16
00FD E680 LDI R24,0x60
00FE E090 LDI R25,0
00FF 0FE8 ADD R30,R24
0100 1FF9 ADC R31,R25
0101 8020 LDD R2,Z+0
0102 8031 LDD R3,Z+1
0103 923000A5 STS TR+1,R3
0105 922000A4 STS TR,R2
(0032) TI=dataI[k];
0107 912000CA LDS R18,k
0109 913000CB LDS R19,k+1
010B E002 LDI R16,2
010C E010 LDI R17,0
010D 940E060D CALL empy16s
010F 01F8 MOVW R30,R16
0110 E880 LDI R24,0x80
0111 E090 LDI R25,0
0112 0FE8 ADD R30,R24
0113 1FF9 ADC R31,R25
0114 8020 LDD R2,Z+0
0115 8031 LDD R3,Z+1
0116 923000A3 STS TI+1,R3
0118 922000A2 STS TI,R2
(0033) temp=dataR[k+b];
011A 902000C8 LDS R2,b
011C 903000C9 LDS R3,b+1
011E 912000CA LDS R18,k
0120 913000CB LDS R19,k+1
0122 0D22 ADD R18,R2
0123 1D33 ADC R19,R3
0124 E002 LDI R16,2
0125 E010 LDI R17,0
0126 940E060D CALL empy16s
0128 01F8 MOVW R30,R16
0129 E680 LDI R24,0x60
012A E090 LDI R25,0
012B 0FE8 ADD R30,R24
012C 1FF9 ADC R31,R25
012D 8020 LDD R2,Z+0
012E 8031 LDD R3,Z+1
012F 923000A1 STS temp+1,R3
0131 922000A0 STS temp,R2
(0034) dataR[k]=dataR[k]+dataR[k+b]*cos(2*PI*p/16)+dataI[k+b]*sin(2*PI*p/16);
0133 E600 LDI R16,0x60
0134 E010 LDI R17,0
0135 940E064E CALL lpm32
0137 933A ST R19,-Y
0138 932A ST R18,-Y
0139 931A ST R17,-Y
013A 930A ST R16,-Y
013B 910000C6 LDS R16,p
013D 911000C7 LDS R17,p+1
013F 940E06B6 CALL int2fp
0141 933A ST R19,-Y
0142 932A ST R18,-Y
0143 931A ST R17,-Y
0144 930A ST R16,-Y
0145 940E083F CALL empy32fs
0147 E50C LDI R16,0x5C
0148 E010 LDI R17,0
0149 940E064E CALL lpm32
014B 933A ST R19,-Y
014C 932A ST R18,-Y
014D 931A ST R17,-Y
014E 930A ST R16,-Y
014F 940E0774 CALL div32f
0151 940E08E6 CALL _cos
0153 0118 MOVW R2,R16
0154 0129 MOVW R4,R18
0155 E600 LDI R16,0x60
0156 E010 LDI R17,0
0157 940E064E CALL lpm32
0159 933A ST R19,-Y
015A 932A ST R18,-Y
015B 931A ST R17,-Y
015C 930A ST R16,-Y
015D 910000C6 LDS R16,p
015F 911000C7 LDS R17,p+1
0161 940E06B6 CALL int2fp
0163 933A ST R19,-Y
0164 932A ST R18,-Y
0165 931A ST R17,-Y
0166 930A ST R16,-Y
0167 940E083F CALL empy32fs
0169 E50C LDI R16,0x5C
016A E010 LDI R17,0
016B 940E064E CALL lpm32
016D 933A ST R19,-Y
016E 932A ST R18,-Y
016F 931A ST R17,-Y
0170 930A ST R16,-Y
0171 940E0774 CALL div32f
0173 922F PUSH R2
0174 923F PUSH R3
0175 924F PUSH R4
0176 925F PUSH R5
0177 940E0BA2 CALL _sin
0179 905F POP R5
017A 904F POP R4
017B 903F POP R3
017C 902F POP R2
017D 0138 MOVW R6,R16
017E 0149 MOVW R8,R18
017F 912000CA LDS R18,k
0181 913000CB LDS R19,k+1
0183 E002 LDI R16,2
0184 E010 LDI R17,0
0185 940E060D CALL empy16s
0187 E680 LDI R24,0x60
0188 E090 LDI R25,0
0189 01F8 MOVW R30,R16
018A 0FE8 ADD R30,R24
018B 1FF9 ADC R31,R25
018C 01CF MOVW R24,R30
018D 8100 LDD R16,Z+0
018E 8111 LDD R17,Z+1
018F 940E06B6 CALL int2fp
0191 933A ST R19,-Y
0192 932A ST R18,-Y
0193 931A ST R17,-Y
0194 930A ST R16,-Y
0195 91E000C8 LDS R30,b
0197 91F000C9 LDS R31,b+1
0199 912000CA LDS R18,k
019B 913000CB LDS R19,k+1
019D 0F2E ADD R18,R30
019E 1F3F ADC R19,R31
019F E002 LDI R16,2
01A0 E010 LDI R17,0
01A1 940E060D CALL empy16s
01A3 01F8 MOVW R30,R16
01A4 E6A0 LDI R26,0x60
01A5 E0B0 LDI R27,0
01A6 0FEA ADD R30,R26
01A7 1FFB ADC R31,R27
01A8 8100 LDD R16,Z+0
01A9 8111 LDD R17,Z+1
01AA 940E06B6 CALL int2fp
01AC 933A ST R19,-Y
01AD 932A ST R18,-Y
01AE 931A ST R17,-Y
01AF 930A ST R16,-Y
01B0 925A ST R5,-Y
01B1 924A ST R4,-Y
01B2 923A ST R3,-Y
01B3 922A ST R2,-Y
01B4 940E083F CALL empy32fs
01B6 940E0710 CALL add32fs
01B8 902000C8 LDS R2,b
01BA 903000C9 LDS R3,b+1
01BC 912000CA LDS R18,k
01BE 913000CB LDS R19,k+1
01C0 0D22 ADD R18,R2
01C1 1D33 ADC R19,R3
01C2 E002 LDI R16,2
01C3 E010 LDI R17,0
01C4 940E060D CALL empy16s
01C6 01F8 MOVW R30,R16
01C7 E8A0 LDI R26,0x80
01C8 E0B0 LDI R27,0
01C9 0FEA ADD R30,R26
01CA 1FFB ADC R31,R27
01CB 8100 LDD R16,Z+0
01CC 8111 LDD R17,Z+1
01CD 940E06B6 CALL int2fp
01CF 933A ST R19,-Y
01D0 932A ST R18,-Y
01D1 931A ST R17,-Y
01D2 930A ST R16,-Y
01D3 929A ST R9,-Y
01D4 928A ST R8,-Y
01D5 927A ST R7,-Y
01D6 926A ST R6,-Y
01D7 940E083F CALL empy32fs
01D9 940E0713 CALL add32f
01DB 940E066E CALL fp2int
01DD 01FC MOVW R30,R24
01DE 8311 STD Z+1,R17
01DF 8300 STD Z+0,R16
(0035) dataI[k]=dataI[k]-dataR[k+b]*sin(2*PI*p/16)+dataI[k+b]*cos(2*PI*p/16);
01E0 E600 LDI R16,0x60
01E1 E010 LDI R17,0
01E2 940E064E CALL lpm32
01E4 933A ST R19,-Y
01E5 932A ST R18,-Y
01E6 931A ST R17,-Y
01E7 930A ST R16,-Y
01E8 910000C6 LDS R16,p
01EA 911000C7 LDS R17,p+1
01EC 940E06B6 CALL int2fp
01EE 933A ST R19,-Y
01EF 932A ST R18,-Y
01F0 931A ST R17,-Y
01F1 930A ST R16,-Y
01F2 940E083F CALL empy32fs
01F4 E50C LDI R16,0x5C
01F5 E010 LDI R17,0
01F6 940E064E CALL lpm32
01F8 933A ST R19,-Y
01F9 932A ST R18,-Y
01FA 931A ST R17,-Y
01FB 930A ST R16,-Y
01FC 940E0774 CALL div32f
01FE 940E0BA2 CALL _sin
0200 0118 MOVW R2,R16
0201 0129 MOVW R4,R18
0202 E600 LDI R16,0x60
0203 E010 LDI R17,0
0204 940E064E CALL lpm32
0206 933A ST R19,-Y
0207 932A ST R18,-Y
0208 931A ST R17,-Y
0209 930A ST R16,-Y
020A 910000C6 LDS R16,p
020C 911000C7 LDS R17,p+1
020E 940E06B6 CALL int2fp
0210 933A ST R19,-Y
0211 932A ST R18,-Y
0212 931A ST R17,-Y
0213 930A ST R16,-Y
0214 940E083F CALL empy32fs
0216 E50C LDI R16,0x5C
0217 E010 LDI R17,0
0218 940E064E CALL lpm32
021A 933A ST R19,-Y
021B 932A ST R18,-Y
021C 931A ST R17,-Y
021D 930A ST R16,-Y
021E 940E0774 CALL div32f
0220 922F PUSH R2
0221 923F PUSH R3
0222 924F PUSH R4
0223 925F PUSH R5
0224 940E08E6 CALL _cos
0226 905F POP R5
0227 904F POP R4
0228 903F POP R3
0229 902F POP R2
022A 0138 MOVW R6,R16
022B 0149 MOVW R8,R18
022C 912000CA LDS R18,k
022E 913000CB LDS R19,k+1
0230 E002 LDI R16,2
0231 E010 LDI R17,0
0232 940E060D CALL empy16s
0234 E880 LDI R24,0x80
0235 E090 LDI R25,0
0236 01F8 MOVW R30,R16
0237 0FE8 ADD R30,R24
0238 1FF9 ADC R31,R25
0239 01CF MOVW R24,R30
023A 8100 LDD R16,Z+0
023B 8111 LDD R17,Z+1
023C 940E06B6 CALL int2fp
023E 933A ST R19,-Y
023F 932A ST R18,-Y
0240 931A ST R17,-Y
0241 930A ST R16,-Y
0242 91E000C8 LDS R30,b
0244 91F000C9 LDS R31,b+1
0246 912000CA LDS R18,k
0248 913000CB LDS R19,k+1
024A 0F2E ADD R18,R30
024B 1F3F ADC R19,R31
024C E002 LDI R16,2
024D E010 LDI R17,0
024E 940E060D CALL empy16s
0250 01F8 MOVW R30,R16
0251 E6A0 LDI R26,0x60
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -