?? fffff.lst
字號(hào):
__text_start:
__start:
0081 EFCF LDI R28,0xFF
0082 E1D0 LDI R29,0x10
0083 BFCD OUT 0x3D,R28
0084 BFDE OUT 0x3E,R29
0085 51C0 SUBI R28,0x10
0086 40D0 SBCI R29,0
0087 EA0A LDI R16,0xAA
0088 8308 STD Y+0,R16
0089 2400 CLR R0
008A E2E0 LDI R30,0x20
008B E0F1 LDI R31,1
008C E011 LDI R17,1
008D 38E2 CPI R30,0x82
008E 07F1 CPC R31,R17
008F F011 BEQ 0x0092
0090 9201 ST R0,Z+
0091 CFFB RJMP 0x008D
0092 8300 STD Z+0,R16
0093 EEE2 LDI R30,0xE2
0094 E0F0 LDI R31,0
0095 E0A0 LDI R26,0
0096 E0B1 LDI R27,1
0097 E011 LDI R17,1
0098 30E2 CPI R30,2
0099 07F1 CPC R31,R17
009A F021 BEQ 0x009F
009B 95C8 LPM
009C 9631 ADIW R30,1
009D 920D ST R0,X+
009E CFF9 RJMP 0x0098
009F 940E043D CALL _main
_exit:
00A1 CFFF RJMP _exit
_FFT:
x6 --> Y+22
x5 --> Y+20
x4 --> Y+18
xx --> Y+16
x3 --> Y+14
x2 --> Y+12
x1 --> R12
x0 --> R10
L --> Y+27
j --> R14
temp --> Y+8
TI --> Y+4
TR --> Y+0
i --> Y+26
p --> R10
b --> Y+24
k --> R12
dataI --> Y+41
dataR --> Y+39
00A2 940E0444 CALL push_arg4
00A4 940E049C CALL push_gset5
00A6 976D SBIW R28,0x1D
FILE: D:\HJN\Design\AVR\fft\fffff.c
(0001) #include <iom128v.h>
(0002) #include <math.h>
(0003) #define PI 3.1415926
(0004) #define qq PI/8
(0005)
(0006) int dataR[]={5,5,5,5,0,0,0,0,5,5,5,5,0,0,0,0};
(0007) int dataI[16],w[32];
(0008)
(0009)
(0010) void FFT(int dataR[],int dataI[])
(0011) {int x0,x1,x2,x3,x4,x5,x6,xx;
(0012) unsigned char i;
(0013) int L,j,k,b,p;
(0014) float TR,TI,temp;
(0015) /********** following code invert sequence ************/
(0016) for(i=0;i<16;i++)
00A7 2400 CLR R0
00A8 8E0A STD Y+26,R0
00A9 C067 RJMP 0x0111
(0017) { x0=x1=x2=x3=x4=x5=x6=0;
00AA 2422 CLR R2
00AB 2433 CLR R3
00AC 8A3F STD Y+23,R3
00AD 8A2E STD Y+22,R2
00AE 8A3D STD Y+21,R3
00AF 8A2C STD Y+20,R2
00B0 8A3B STD Y+19,R3
00B1 8A2A STD Y+18,R2
00B2 863F STD Y+15,R3
00B3 862E STD Y+14,R2
00B4 863D STD Y+13,R3
00B5 862C STD Y+12,R2
00B6 24CC CLR R12
00B7 24DD CLR R13
00B8 24AA CLR R10
00B9 24BB CLR R11
(0018) x0=i&0x01; x1=(i>>1)&0x01; x2=(i>>2)&0x01; x3=(i>>3)&0x01;
00BA 8D8A LDD R24,Y+26
00BB 2799 CLR R25
00BC 7081 ANDI R24,1
00BD 7090 ANDI R25,0
00BE 015C MOVW R10,R24
00BF 8D8A LDD R24,Y+26
00C0 2799 CLR R25
00C1 9595 ASR R25
00C2 9587 ROR R24
00C3 7081 ANDI R24,1
00C4 7090 ANDI R25,0
00C5 016C MOVW R12,R24
00C6 8D8A LDD R24,Y+26
00C7 2799 CLR R25
00C8 9595 ASR R25
00C9 9587 ROR R24
00CA 9595 ASR R25
00CB 9587 ROR R24
00CC 7081 ANDI R24,1
00CD 7090 ANDI R25,0
00CE 879D STD Y+13,R25
00CF 878C STD Y+12,R24
00D0 8D8A LDD R24,Y+26
00D1 2799 CLR R25
00D2 9595 ASR R25
00D3 9587 ROR R24
00D4 9595 ASR R25
00D5 9587 ROR R24
00D6 9595 ASR R25
00D7 9587 ROR R24
00D8 7081 ANDI R24,1
00D9 7090 ANDI R25,0
00DA 879F STD Y+15,R25
00DB 878E STD Y+14,R24
(0019) //x4=(i>>4)&0x01; x5=(i>>5)&0x01; x6=(i>>6)&0x01;
(0020) xx=x0*8+x1*4+x2*2+x3;
00DC E004 LDI R16,4
00DD E010 LDI R17,0
00DE 0196 MOVW R18,R12
00DF 940E0483 CALL empy16s
00E1 0118 MOVW R2,R16
00E2 E008 LDI R16,0x8
00E3 E010 LDI R17,0
00E4 0195 MOVW R18,R10
00E5 940E0483 CALL empy16s
00E7 0128 MOVW R4,R16
00E8 0C42 ADD R4,R2
00E9 1C53 ADC R5,R3
00EA 852C LDD R18,Y+12
00EB 853D LDD R19,Y+13
00EC E002 LDI R16,2
00ED E010 LDI R17,0
00EE 940E0483 CALL empy16s
00F0 0E40 ADD R4,R16
00F1 1E51 ADC R5,R17
00F2 842E LDD R2,Y+14
00F3 843F LDD R3,Y+15
00F4 0C42 ADD R4,R2
00F5 1C53 ADC R5,R3
00F6 8A59 STD Y+17,R5
00F7 8A48 STD Y+16,R4
(0021) dataI[xx]=dataR[i];
00F8 E082 LDI R24,2
00F9 8C0A LDD R0,Y+26
00FA 9D80 MUL R24,R0
00FB 01F0 MOVW R30,R0
00FC A00F LDD R0,Y+39
00FD A418 LDD R1,Y+40
00FE 0DE0 ADD R30,R0
00FF 1DF1 ADC R31,R1
0100 8020 LDD R2,Z+0
0101 8031 LDD R3,Z+1
0102 0192 MOVW R18,R4
0103 E002 LDI R16,2
0104 E010 LDI R17,0
0105 940E0483 CALL empy16s
0107 01F8 MOVW R30,R16
0108 A409 LDD R0,Y+41
0109 A41A LDD R1,Y+42
010A 0DE0 ADD R30,R0
010B 1DF1 ADC R31,R1
010C 8231 STD Z+1,R3
010D 8220 STD Z+0,R2
010E 8C0A LDD R0,Y+26
010F 9403 INC R0
0110 8E0A STD Y+26,R0
0111 8D8A LDD R24,Y+26
0112 3180 CPI R24,0x10
0113 F408 BCC 0x0115
0114 CF95 RJMP 0x00AA
(0022) }
(0023) for(i=0;i<16;i++)
0115 2400 CLR R0
0116 8E0A STD Y+26,R0
0117 C020 RJMP 0x0138
(0024) { dataR[i]=dataI[i]; dataI[i]=0; }
0118 E082 LDI R24,2
0119 8C0A LDD R0,Y+26
011A 9D80 MUL R24,R0
011B 0110 MOVW R2,R0
011C 01F1 MOVW R30,R2
011D A409 LDD R0,Y+41
011E A41A LDD R1,Y+42
011F 0DE0 ADD R30,R0
0120 1DF1 ADC R31,R1
0121 8040 LDD R4,Z+0
0122 8051 LDD R5,Z+1
0123 01F1 MOVW R30,R2
0124 A00F LDD R0,Y+39
0125 A418 LDD R1,Y+40
0126 0DE0 ADD R30,R0
0127 1DF1 ADC R31,R1
0128 8251 STD Z+1,R5
0129 8240 STD Z+0,R4
012A 8C0A LDD R0,Y+26
012B 9D80 MUL R24,R0
012C 01F0 MOVW R30,R0
012D A409 LDD R0,Y+41
012E A41A LDD R1,Y+42
012F 0DE0 ADD R30,R0
0130 1DF1 ADC R31,R1
0131 2422 CLR R2
0132 2433 CLR R3
0133 8231 STD Z+1,R3
0134 8220 STD Z+0,R2
0135 8C0A LDD R0,Y+26
0136 9403 INC R0
0137 8E0A STD Y+26,R0
0138 8D8A LDD R24,Y+26
0139 3180 CPI R24,0x10
013A F2E8 BCS 0x0118
(0025) /************** following code FFT *******************/
(0026) for(L=1;L<=4;L++) { /* for(1) */
013B E081 LDI R24,1
013C E090 LDI R25,0
013D 8F9C STD Y+28,R25
013E 8F8B STD Y+27,R24
(0027) b=1; i=L-1;
013F E081 LDI R24,1
0140 E090 LDI R25,0
0141 8F99 STD Y+25,R25
0142 8F88 STD Y+24,R24
0143 8D8B LDD R24,Y+27
0144 8D9C LDD R25,Y+28
0145 9701 SBIW R24,1
0146 8F8A STD Y+26,R24
0147 C00B RJMP 0x0153
(0028) while(i>0)
(0029) {b=b*2; i--;} /* b= 2^(L-1) */
0148 E002 LDI R16,2
0149 E010 LDI R17,0
014A 8D28 LDD R18,Y+24
014B 8D39 LDD R19,Y+25
014C 940E0483 CALL empy16s
014E 8F19 STD Y+25,R17
014F 8F08 STD Y+24,R16
0150 8C0A LDD R0,Y+26
0151 940A DEC R0
0152 8E0A STD Y+26,R0
0153 2422 CLR R2
0154 8C0A LDD R0,Y+26
0155 1420 CP R2,R0
0156 F388 BCS 0x0148
(0030) for(j=0;j<=b-1;j++) /* for (2) */
0157 24EE CLR R14
0158 24FF CLR R15
0159 C272 RJMP 0x03CC
(0031) { p=1; i=4-L;
015A E081 LDI R24,1
015B E090 LDI R25,0
015C 015C MOVW R10,R24
015D E084 LDI R24,4
015E 8C0B LDD R0,Y+27
015F 8C1C LDD R1,Y+28
0160 1980 SUB R24,R0
0161 0991 SBC R25,R1
0162 8F8A STD Y+26,R24
0163 C009 RJMP 0x016D
(0032) while(i>0) /* p=pow(2,7-L)*j; */
(0033) {p=p*2; i--;}
0164 E002 LDI R16,2
0165 E010 LDI R17,0
0166 0195 MOVW R18,R10
0167 940E0483 CALL empy16s
0169 0158 MOVW R10,R16
016A 8C0A LDD R0,Y+26
016B 940A DEC R0
016C 8E0A STD Y+26,R0
016D 2422 CLR R2
016E 8C0A LDD R0,Y+26
016F 1420 CP R2,R0
0170 F398 BCS 0x0164
(0034) p=p*j;for(k=j;k<16;k=k+2*b) /* for (3) */
0171 0197 MOVW R18,R14
0172 0185 MOVW R16,R10
0173 940E0483 CALL empy16s
0175 0158 MOVW R10,R16
0176 0167 MOVW R12,R14
0177 C24B RJMP 0x03C3
(0035) { TR=dataR[k]; TI=dataI[k]; temp=dataR[k+b];
0178 E002 LDI R16,2
0179 E010 LDI R17,0
017A 0196 MOVW R18,R12
017B 940E0483 CALL empy16s
017D 01F8 MOVW R30,R16
017E A00F LDD R0,Y+39
017F A418 LDD R1,Y+40
0180 0DE0 ADD R30,R0
0181 1DF1 ADC R31,R1
0182 8100 LDD R16,Z+0
0183 8111 LDD R17,Z+1
0184 940E052C CALL int2fp
0186 01FE MOVW R30,R28
0187 8300 STD Z+0,R16
0188 8311 STD Z+1,R17
0189 8322 STD Z+2,R18
018A 8333 STD Z+3,R19
018B E002 LDI R16,2
018C E010 LDI R17,0
018D 0196 MOVW R18,R12
018E 940E0483 CALL empy16s
0190 01F8 MOVW R30,R16
0191 A409 LDD R0,Y+41
0192 A41A LDD R1,Y+42
0193 0DE0 ADD R30,R0
0194 1DF1 ADC R31,R1
0195 8100 LDD R16,Z+0
0196 8111 LDD R17,Z+1
0197 940E052C CALL int2fp
0199 01FE MOVW R30,R28
019A 8304 STD Z+4,R16
019B 8315 STD Z+5,R17
019C 8326 STD Z+6,R18
019D 8337 STD Z+7,R19
019E 0196 MOVW R18,R12
019F 8C08 LDD R0,Y+24
01A0 8C19 LDD R1,Y+25
01A1 0D20 ADD R18,R0
01A2 1D31 ADC R19,R1
01A3 E002 LDI R16,2
01A4 E010 LDI R17,0
01A5 940E0483 CALL empy16s
01A7 01F8 MOVW R30,R16
01A8 A00F LDD R0,Y+39
01A9 A418 LDD R1,Y+40
01AA 0DE0 ADD R30,R0
01AB 1DF1 ADC R31,R1
01AC 8100 LDD R16,Z+0
01AD 8111 LDD R17,Z+1
01AE 940E052C CALL int2fp
01B0 01FE MOVW R30,R28
01B1 8700 STD Z+8,R16
01B2 8711 STD Z+9,R17
01B3 8722 STD Z+10,R18
01B4 8733 STD Z+11,R19
(0036) dataR[k]=dataR[k]+dataR[k+b]*cos(qq*p)+dataI[k+b]*sin(qq*p);
01B5 E80C LDI R16,0x8C
01B6 E010 LDI R17,0
01B7 940E04C4 CALL lpm32
01B9 933A ST R19,-Y
01BA 932A ST R18,-Y
01BB 931A ST R17,-Y
01BC 930A ST R16,-Y
01BD 0185 MOVW R16,R10
01BE 940E052C CALL int2fp
01C0 933A ST R19,-Y
01C1 932A ST R18,-Y
01C2 931A ST R17,-Y
01C3 930A ST R16,-Y
01C4 940E06B8 CALL empy32f
01C6 940E075C CALL _cos
01C8 0118 MOVW R2,R16
01C9 0129 MOVW R4,R18
01CA E80C LDI R16,0x8C
01CB E010 LDI R17,0
01CC 940E04C4 CALL lpm32
01CE 933A ST R19,-Y
01CF 932A ST R18,-Y
01D0 931A ST R17,-Y
01D1 930A ST R16,-Y
01D2 0185 MOVW R16,R10
01D3 940E052C CALL int2fp
01D5 933A ST R19,-Y
01D6 932A ST R18,-Y
01D7 931A ST R17,-Y
01D8 930A ST R16,-Y
01D9 940E06B8 CALL empy32f
01DB 922F PUSH R2
01DC 923F PUSH R3
01DD 924F PUSH R4
01DE 925F PUSH R5
01DF 940E0A18 CALL _sin
01E1 905F POP R5
01E2 904F POP R4
01E3 903F POP R3
01E4 902F POP R2
01E5 0138 MOVW R6,R16
01E6 0149 MOVW R8,R18
01E7 E002 LDI R16,2
01E8 E010 LDI R17,0
01E9 0196 MOVW R18,R12
01EA 940E0483 CALL empy16s
01EC 01C8 MOVW R24,R16
01ED A00F LDD R0,Y+39
01EE A418 LDD R1,Y+40
01EF 0D80 ADD R24,R0
01F0 1D91 ADC R25,R1
01F1 01FC MOVW R30,R24
01F2 8100 LDD R16,Z+0
01F3 8111 LDD R17,Z+1
01F4 940E052C CALL int2fp
01F6 933A ST R19,-Y
01F7 932A ST R18,-Y
01F8 931A ST R17,-Y
01F9 930A ST R16,-Y
01FA 0196 MOVW R18,R12
01FB 8C0C LDD R0,Y+28
01FC 8C1D LDD R1,Y+29
01FD 0D20 ADD R18,R0
01FE 1D31 ADC R19,R1
01FF E002 LDI R16,2
0200 E010 LDI R17,0
0201 940E0483 CALL empy16s
0203 01F8 MOVW R30,R16
0204 A40B LDD R0,Y+43
0205 A41C LDD R1,Y+44
0206 0DE0 ADD R30,R0
0207 1DF1 ADC R31,R1
0208 8100 LDD R16,Z+0
0209 8111 LDD R17,Z+1
020A 940E052C CALL int2fp
020C 933A ST R19,-Y
020D 932A ST R18,-Y
020E 931A ST R17,-Y
020F 930A ST R16,-Y
0210 925A ST R5,-Y
0211 924A ST R4,-Y
0212 923A ST R3,-Y
0213 922A ST R2,-Y
0214 940E06B5 CALL empy32fs
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -