📄 fftbook.lis
字号:
.module fftbook.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\fftbook.c
0020 .dbsym e dataR _dataR A[32:16]I
.area text(rom, con, rel)
0000 .dbfile D:\HJN\Design\AVR\fft\fftbook.c
0000 .dbfunc e CHANGE _CHANGE fV
0000 ; b6 -> R22,R23
0000 ; b5 -> R22,R23
0000 ; b4 -> R22,R23
0000 ; all -> R20,R21
0000 ; b3 -> R22,R23
0000 ; b2 -> R10,R11
0000 ; b1 -> R14,R15
0000 ; b0 -> R12,R13
.even
0000 _CHANGE::
0000 0E940000 xcall push_gset5
0004 .dbline -1
0004 .dbline 15
0004 ; #include <math.h>
0004 ; #define uint unsigned int
0004 ; #define uchar unsigned char
0004 ; #define PI 3.1415926
0004 ;
0004 ; uint x0,x1,x2,x3,x4,x5,x6;
0004 ; int L,i,j,k,b,p;
0004 ; uchar w[32];
0004 ; uint TR,TI,temp;
0004 ;
0004 ; int dataR[]={5,5,5,5,0,0,0,0,5,5,5,5,0,0,0,0};
0004 ; int dataI[16];
0004 ;
0004 ; void CHANGE()
0004 ; { //i为原始存放位置,最后得invert_pos为倒位序存放位置
0004 .dbline 17
0004 ; int b0 , b1 , b2 , b3 , b4 , b5 , b6 , all;
0004 ; b0 = b1 = b2 = b3 = b4 = b5 = b6 = all = 0;
0004 4427 clr R20
0006 5527 clr R21
0008 6627 clr R22
000A 7727 clr R23
000C AA24 clr R10
000E BB24 clr R11
0010 EE24 clr R14
0012 FF24 clr R15
0014 CC24 clr R12
0016 DD24 clr R13
0018 .dbline 18
0018 ; b0 = i&0x01;
0018 80914E00 lds R24,_i
001C 90914F00 lds R25,_i+1
0020 8170 andi R24,1
0022 9070 andi R25,0
0024 6C01 movw R12,R24
0026 .dbline 19
0026 ; b1 = (i>>1)&0x01;
0026 80914E00 lds R24,_i
002A 90914F00 lds R25,_i+1
002E 9595 asr R25
0030 8795 ror R24
0032 8170 andi R24,1
0034 9070 andi R25,0
0036 7C01 movw R14,R24
0038 .dbline 20
0038 ; b2 = (i>>2)&0x01;
0038 80914E00 lds R24,_i
003C 90914F00 lds R25,_i+1
0040 9595 asr R25
0042 8795 ror R24
0044 9595 asr R25
0046 8795 ror R24
0048 8170 andi R24,1
004A 9070 andi R25,0
004C 5C01 movw R10,R24
004E .dbline 21
004E ; b3 = (i>>3)&0x01;
004E 60914E00 lds R22,_i
0052 70914F00 lds R23,_i+1
0056 7595 asr R23
0058 6795 ror R22
005A 7595 asr R23
005C 6795 ror R22
005E 7595 asr R23
0060 6795 ror R22
0062 6170 andi R22,1
0064 7070 andi R23,0
0066 .dbline 25
0066 ; // b4 = (i>>4)&0x01;
0066 ; //b5 = (i>>5)&0x01;
0066 ; // b6 = (i>>6)&0x01;
0066 ; all = b0*8 + b1*4 + b2*2 + b3; //*8 + b4*4 + b5*2 + b6;
0066 04E0 ldi R16,4
0068 10E0 ldi R17,0
006A 9701 movw R18,R14
006C 0E940000 xcall empy16s
0070 1801 movw R2,R16
0072 08E0 ldi R16,8
0074 10E0 ldi R17,0
0076 9601 movw R18,R12
0078 0E940000 xcall empy16s
007C A801 movw R20,R16
007E 420D add R20,R2
0080 531D adc R21,R3
0082 02E0 ldi R16,2
0084 10E0 ldi R17,0
0086 9501 movw R18,R10
0088 0E940000 xcall empy16s
008C 400F add R20,R16
008E 511F adc R21,R17
0090 460F add R20,R22
0092 571F adc R21,R23
0094 .dbline 26
0094 ; dataI[all] = dataR[i];
0094 20914E00 lds R18,_i
0098 30914F00 lds R19,_i+1
009C 02E0 ldi R16,2
009E 10E0 ldi R17,0
00A0 0E940000 xcall empy16s
00A4 F801 movw R30,R16
00A6 80E0 ldi R24,<_dataR
00A8 90E0 ldi R25,>_dataR
00AA E80F add R30,R24
00AC F91F adc R31,R25
00AE 2080 ldd R2,z+0
00B0 3180 ldd R3,z+1
00B2 02E0 ldi R16,2
00B4 10E0 ldi R17,0
00B6 9A01 movw R18,R20
00B8 0E940000 xcall empy16s
00BC F801 movw R30,R16
00BE 80E0 ldi R24,<_dataI
00C0 90E0 ldi R25,>_dataI
00C2 E80F add R30,R24
00C4 F91F adc R31,R25
00C6 3182 std z+1,R3
00C8 2082 std z+0,R2
00CA .dbline -2
00CA L1:
00CA 0E940000 xcall pop_gset5
00CE .dbline 0 ; func end
00CE 0895 ret
00D0 .dbsym r b6 22 I
00D0 .dbsym r b5 22 I
00D0 .dbsym r b4 22 I
00D0 .dbsym r all 20 I
00D0 .dbsym r b3 22 I
00D0 .dbsym r b2 10 I
00D0 .dbsym r b1 14 I
00D0 .dbsym r b0 12 I
00D0 .dbend
00D0 .dbfunc e FFTT _FFTT fV
.even
00D0 _FFTT::
00D0 .dbline -1
00D0 .dbline 31
00D0 ; }
00D0 ;
00D0 ;
00D0 ; void FFTT()
00D0 ; { TR=dataR[k];
00D0 .dbline 31
00D0 20914A00 lds R18,_k
00D4 30914B00 lds R19,_k+1
00D8 02E0 ldi R16,2
00DA 10E0 ldi R17,0
00DC 0E940000 xcall empy16s
00E0 F801 movw R30,R16
00E2 80E0 ldi R24,<_dataR
00E4 90E0 ldi R25,>_dataR
00E6 E80F add R30,R24
00E8 F91F adc R31,R25
00EA 2080 ldd R2,z+0
00EC 3180 ldd R3,z+1
00EE 30922500 sts _TR+1,R3
00F2 20922400 sts _TR,R2
00F6 .dbline 32
00F6 ; TI=dataI[k];
00F6 20914A00 lds R18,_k
00FA 30914B00 lds R19,_k+1
00FE 02E0 ldi R16,2
0100 10E0 ldi R17,0
0102 0E940000 xcall empy16s
0106 F801 movw R30,R16
0108 80E0 ldi R24,<_dataI
010A 90E0 ldi R25,>_dataI
010C E80F add R30,R24
010E F91F adc R31,R25
0110 2080 ldd R2,z+0
0112 3180 ldd R3,z+1
0114 30922300 sts _TI+1,R3
0118 20922200 sts _TI,R2
011C .dbline 33
011C ; temp=dataR[k+b];
011C 20904800 lds R2,_b
0120 30904900 lds R3,_b+1
0124 20914A00 lds R18,_k
0128 30914B00 lds R19,_k+1
012C 220D add R18,R2
012E 331D adc R19,R3
0130 02E0 ldi R16,2
0132 10E0 ldi R17,0
0134 0E940000 xcall empy16s
0138 F801 movw R30,R16
013A 80E0 ldi R24,<_dataR
013C 90E0 ldi R25,>_dataR
013E E80F add R30,R24
0140 F91F adc R31,R25
0142 2080 ldd R2,z+0
0144 3180 ldd R3,z+1
0146 30922100 sts _temp+1,R3
014A 20922000 sts _temp,R2
014E .dbline 34
014E ; dataR[k]=dataR[k]+dataR[k+b]*cos(2*PI*p/16)+dataI[k+b]*sin(2*PI*p/16);
014E 00E0 ldi R16,<L3
0150 10E0 ldi R17,>L3
0152 0E940000 xcall lpm32
0156 3A93 st -y,R19
0158 2A93 st -y,R18
015A 1A93 st -y,R17
015C 0A93 st -y,R16
015E 00914600 lds R16,_p
0162 10914700 lds R17,_p+1
0166 0E940000 xcall int2fp
016A 3A93 st -y,R19
016C 2A93 st -y,R18
016E 1A93 st -y,R17
0170 0A93 st -y,R16
0172 0E940000 xcall empy32fs
0176 00E0 ldi R16,<L4
0178 10E0 ldi R17,>L4
017A 0E940000 xcall lpm32
017E 3A93 st -y,R19
0180 2A93 st -y,R18
0182 1A93 st -y,R17
0184 0A93 st -y,R16
0186 0E940000 xcall div32f
018A 0E940000 xcall _cos
018E 1801 movw R2,R16
0190 2901 movw R4,R18
0192 00E0 ldi R16,<L3
0194 10E0 ldi R17,>L3
0196 0E940000 xcall lpm32
019A 3A93 st -y,R19
019C 2A93 st -y,R18
019E 1A93 st -y,R17
01A0 0A93 st -y,R16
01A2 00914600 lds R16,_p
01A6 10914700 lds R17,_p+1
01AA 0E940000 xcall int2fp
01AE 3A93 st -y,R19
01B0 2A93 st -y,R18
01B2 1A93 st -y,R17
01B4 0A93 st -y,R16
01B6 0E940000 xcall empy32fs
01BA 00E0 ldi R16,<L4
01BC 10E0 ldi R17,>L4
01BE 0E940000 xcall lpm32
01C2 3A93 st -y,R19
01C4 2A93 st -y,R18
01C6 1A93 st -y,R17
01C8 0A93 st -y,R16
01CA 0E940000 xcall div32f
01CE 2F92 push R2
01D0 3F92 push R3
01D2 4F92 push R4
01D4 5F92 push R5
01D6 0E940000 xcall _sin
01DA 5F90 pop R5
01DC 4F90 pop R4
01DE 3F90 pop R3
01E0 2F90 pop R2
01E2 3801 movw R6,R16
01E4 4901 movw R8,R18
01E6 20914A00 lds R18,_k
01EA 30914B00 lds R19,_k+1
01EE 02E0 ldi R16,2
01F0 10E0 ldi R17,0
01F2 0E940000 xcall empy16s
01F6 80E0 ldi R24,<_dataR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -