?? fffff.lis
字號:
.module fffff.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\fffff.c
0020 .dbsym e dataR _dataR A[32:16]I
.area text(rom, con, rel)
0000 .dbfile D:\HJN\Design\AVR\fft\fffff.c
0000 .dbfunc e FFT _FFT fV
0000 ; x6 -> y+22
0000 ; x5 -> y+20
0000 ; x4 -> y+18
0000 ; xx -> y+16
0000 ; x3 -> y+14
0000 ; x2 -> y+12
0000 ; x1 -> R12,R13
0000 ; x0 -> R10,R11
0000 ; L -> y+27
0000 ; j -> R14,R15
0000 ; temp -> y+8
0000 ; TI -> y+4
0000 ; TR -> y+0
0000 ; i -> y+26
0000 ; p -> R10,R11
0000 ; b -> y+24
0000 ; k -> R12,R13
0000 ; dataI -> y+41
0000 ; dataR -> y+39
.even
0000 _FFT::
0000 0E940000 xcall push_arg4
0004 0E940000 xcall push_gset5
0008 6D97 sbiw R28,29
000A .dbline -1
000A .dbline 11
000A ; #include <iom128v.h>
000A ; #include <math.h>
000A ; #define PI 3.1415926
000A ; #define qq PI/8
000A ;
000A ; int dataR[]={5,5,5,5,0,0,0,0,5,5,5,5,0,0,0,0};
000A ; int dataI[16],w[32];
000A ;
000A ;
000A ; void FFT(int dataR[],int dataI[])
000A ; {int x0,x1,x2,x3,x4,x5,x6,xx;
000A .dbline 16
000A ; unsigned char i;
000A ; int L,j,k,b,p;
000A ; float TR,TI,temp;
000A ; /********** following code invert sequence ************/
000A ; for(i=0;i<16;i++)
000A 0024 clr R0
000C 0A8E std y+26,R0
000E 67C0 xjmp L5
0010 L2:
0010 .dbline 17
0010 .dbline 17
0010 2224 clr R2
0012 3324 clr R3
0014 3F8A std y+23,R3
0016 2E8A std y+22,R2
0018 3D8A std y+21,R3
001A 2C8A std y+20,R2
001C 3B8A std y+19,R3
001E 2A8A std y+18,R2
0020 3F86 std y+15,R3
0022 2E86 std y+14,R2
0024 3D86 std y+13,R3
0026 2C86 std y+12,R2
0028 CC24 clr R12
002A DD24 clr R13
002C AA24 clr R10
002E BB24 clr R11
0030 .dbline 18
0030 8A8D ldd R24,y+26
0032 9927 clr R25
0034 8170 andi R24,1
0036 9070 andi R25,0
0038 5C01 movw R10,R24
003A .dbline 18
003A 8A8D ldd R24,y+26
003C 9927 clr R25
003E 9595 asr R25
0040 8795 ror R24
0042 8170 andi R24,1
0044 9070 andi R25,0
0046 6C01 movw R12,R24
0048 .dbline 18
0048 8A8D ldd R24,y+26
004A 9927 clr R25
004C 9595 asr R25
004E 8795 ror R24
0050 9595 asr R25
0052 8795 ror R24
0054 8170 andi R24,1
0056 9070 andi R25,0
0058 9D87 std y+13,R25
005A 8C87 std y+12,R24
005C .dbline 18
005C 8A8D ldd R24,y+26
005E 9927 clr R25
0060 9595 asr R25
0062 8795 ror R24
0064 9595 asr R25
0066 8795 ror R24
0068 9595 asr R25
006A 8795 ror R24
006C 8170 andi R24,1
006E 9070 andi R25,0
0070 9F87 std y+15,R25
0072 8E87 std y+14,R24
0074 .dbline 20
0074 04E0 ldi R16,4
0076 10E0 ldi R17,0
0078 9601 movw R18,R12
007A 0E940000 xcall empy16s
007E 1801 movw R2,R16
0080 08E0 ldi R16,8
0082 10E0 ldi R17,0
0084 9501 movw R18,R10
0086 0E940000 xcall empy16s
008A 2801 movw R4,R16
008C 420C add R4,R2
008E 531C adc R5,R3
0090 2C85 ldd R18,y+12
0092 3D85 ldd R19,y+13
0094 02E0 ldi R16,2
0096 10E0 ldi R17,0
0098 0E940000 xcall empy16s
009C 400E add R4,R16
009E 511E adc R5,R17
00A0 2E84 ldd R2,y+14
00A2 3F84 ldd R3,y+15
00A4 420C add R4,R2
00A6 531C adc R5,R3
00A8 598A std y+17,R5
00AA 488A std y+16,R4
00AC .dbline 21
00AC 82E0 ldi R24,2
00AE 0A8C ldd R0,y+26
00B0 809D mul R24,R0
00B2 F001 movw R30,R0
00B4 0FA0 ldd R0,y+39
00B6 18A4 ldd R1,y+40
00B8 E00D add R30,R0
00BA F11D adc R31,R1
00BC 2080 ldd R2,z+0
00BE 3180 ldd R3,z+1
00C0 9201 movw R18,R4
00C2 02E0 ldi R16,2
00C4 10E0 ldi R17,0
00C6 0E940000 xcall empy16s
00CA F801 movw R30,R16
00CC 09A4 ldd R0,y+41
00CE 1AA4 ldd R1,y+42
00D0 E00D add R30,R0
00D2 F11D adc R31,R1
00D4 3182 std z+1,R3
00D6 2082 std z+0,R2
00D8 .dbline 22
00D8 L3:
00D8 .dbline 16
00D8 0A8C ldd R0,y+26
00DA 0394 inc R0
00DC 0A8E std y+26,R0
00DE L5:
00DE .dbline 16
00DE 8A8D ldd R24,y+26
00E0 8031 cpi R24,16
00E2 08F4 brsh X0
00E4 95CF xjmp L2
00E6 X0:
00E6 .dbline 23
00E6 ; { x0=x1=x2=x3=x4=x5=x6=0;
00E6 ; x0=i&0x01; x1=(i>>1)&0x01; x2=(i>>2)&0x01; x3=(i>>3)&0x01;
00E6 ; //x4=(i>>4)&0x01; x5=(i>>5)&0x01; x6=(i>>6)&0x01;
00E6 ; xx=x0*8+x1*4+x2*2+x3;
00E6 ; dataI[xx]=dataR[i];
00E6 ; }
00E6 ; for(i=0;i<16;i++)
00E6 0024 clr R0
00E8 0A8E std y+26,R0
00EA 20C0 xjmp L9
00EC L6:
00EC .dbline 24
00EC .dbline 24
00EC 82E0 ldi R24,2
00EE 0A8C ldd R0,y+26
00F0 809D mul R24,R0
00F2 1001 movw R2,R0
00F4 F101 movw R30,R2
00F6 09A4 ldd R0,y+41
00F8 1AA4 ldd R1,y+42
00FA E00D add R30,R0
00FC F11D adc R31,R1
00FE 4080 ldd R4,z+0
0100 5180 ldd R5,z+1
0102 F101 movw R30,R2
0104 0FA0 ldd R0,y+39
0106 18A4 ldd R1,y+40
0108 E00D add R30,R0
010A F11D adc R31,R1
010C 5182 std z+1,R5
010E 4082 std z+0,R4
0110 .dbline 24
0110 0A8C ldd R0,y+26
0112 809D mul R24,R0
0114 F001 movw R30,R0
0116 09A4 ldd R0,y+41
0118 1AA4 ldd R1,y+42
011A E00D add R30,R0
011C F11D adc R31,R1
011E 2224 clr R2
0120 3324 clr R3
0122 3182 std z+1,R3
0124 2082 std z+0,R2
0126 .dbline 24
0126 L7:
0126 .dbline 23
0126 0A8C ldd R0,y+26
0128 0394 inc R0
012A 0A8E std y+26,R0
012C L9:
012C .dbline 23
012C 8A8D ldd R24,y+26
012E 8031 cpi R24,16
0130 E8F2 brlo L6
0132 .dbline 26
0132 81E0 ldi R24,1
0134 90E0 ldi R25,0
0136 9C8F std y+28,R25
0138 8B8F std y+27,R24
013A L10:
013A .dbline 26
013A ; { dataR[i]=dataI[i]; dataI[i]=0; }
013A ; /************** following code FFT *******************/
013A ; for(L=1;L<=4;L++) { /* for(1) */
013A .dbline 27
013A ; b=1; i=L-1;
013A 81E0 ldi R24,1
013C 90E0 ldi R25,0
013E 998F std y+25,R25
0140 888F std y+24,R24
0142 .dbline 27
0142 8B8D ldd R24,y+27
0144 9C8D ldd R25,y+28
0146 0197 sbiw R24,1
0148 8A8F std y+26,R24
014A 0BC0 xjmp L15
014C L14:
014C .dbline 29
014C .dbline 29
014C 02E0 ldi R16,2
014E 10E0 ldi R17,0
0150 288D ldd R18,y+24
0152 398D ldd R19,y+25
0154 0E940000 xcall empy16s
0158 198F std y+25,R17
015A 088F std y+24,R16
015C .dbline 29
015C 0A8C ldd R0,y+26
015E 0A94 dec R0
0160 0A8E std y+26,R0
0162 .dbline 29
0162 L15:
0162 .dbline 28
0162 ; while(i>0)
0162 2224 clr R2
0164 0A8C ldd R0,y+26
0166 2014 cp R2,R0
0168 88F3 brlo L14
016A .dbline 30
016A ; {b=b*2; i--;} /* b= 2^(L-1) */
016A ; for(j=0;j<=b-1;j++) /* for (2) */
016A EE24 clr R14
016C FF24 clr R15
016E 72C2 xjmp L20
0170 L17:
0170 .dbline 31
0170 ; { p=1; i=4-L;
0170 .dbline 31
0170 81E0 ldi R24,1
0172 90E0 ldi R25,0
0174 5C01 movw R10,R24
0176 .dbline 31
0176 84E0 ldi R24,4
0178 0B8C ldd R0,y+27
017A 1C8C ldd R1,y+28
017C 8019 sub R24,R0
017E 9109 sbc R25,R1
0180 8A8F std y+26,R24
0182 09C0 xjmp L22
0184 L21:
0184 .dbline 33
0184 .dbline 33
0184 02E0 ldi R16,2
0186 10E0 ldi R17,0
0188 9501 movw R18,R10
018A 0E940000 xcall empy16s
018E 5801 movw R10,R16
0190 .dbline 33
0190 0A8C ldd R0,y+26
0192 0A94 dec R0
0194 0A8E std y+26,R0
0196 .dbline 33
0196 L22:
0196 .dbline 32
0196 ; while(i>0) /* p=pow(2,7-L)*j; */
0196 2224 clr R2
0198 0A8C ldd R0,y+26
019A 2014 cp R2,R0
019C 98F3 brlo L21
019E .dbline 34
019E ; {p=p*2; i--;}
019E ; p=p*j;for(k=j;k<16;k=k+2*b) /* for (3) */
019E 9701 movw R18,R14
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -