⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fft2.lis

📁 在ICCAVR 环境实现的fft,
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module fft2.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\HJN\Design\AVR\fft\fft2.c
 0000                   .dbfunc e FFT _FFT fV
 0000           ;             l0 -> y+36
 0000           ;             vi -> y+32
 0000           ;             vr -> y+28
 0000           ;             is -> y+26
 0000           ;              i -> y+24
 0000           ;          poddi -> y+20
 0000           ;          poddr -> y+16
 0000           ;              q -> y+12
 0000           ;              p -> y+8
 0000           ;              s -> y+4
 0000           ;              m -> y+2
 0000           ;             nv -> y+0
 0000           ;             it -> R20,R21
 0000           ;              j -> R10,R11
 0000           ;             il -> y+70
 0000           ;              l -> y+68
 0000           ;             fi -> R12,R13
 0000           ;             fr -> R14,R15
 0000           ;              k -> y+62
 0000           ;              n -> y+60
 0000           ;             pi -> y+58
 0000           ;             pr -> y+56
                        .even
 0000           _FFT::
 0000 0E940000          xcall push_arg4
 0004 0E940000          xcall push_gset5
 0008 AE97              sbiw R28,46
 000A FE01              movw R30,R28
 000C E05C              subi R30,192  ; addi 64
 000E FF4F              sbci R31,255
 0010 E080              ldd R14,z+0
 0012 F180              ldd R15,z+1
 0014 FE01              movw R30,R28
 0016 EE5B              subi R30,190  ; addi 66
 0018 FF4F              sbci R31,255
 001A C080              ldd R12,z+0
 001C D180              ldd R13,z+1
 001E                   .dbline -1
 001E                   .dbline 10
 001E           ; #include<math.h>
 001E           ; 
 001E           ; /*pr:输入实部
 001E           ; pi:输入虚部
 001E           ; n为2^k,n不小于数据个数
 001E           ; l:为0表示正变换,1表示反变换
 001E           ; il:1表示fr为取模结果。0表示fr输出实部fi输出虚部
 001E           ; */
 001E           ; void FFT(double* pr, double* pi, int n, int k, double* fr, double* fi, int l, int il)
 001E           ; {
 001E                   .dbline 13
 001E           ; int it,m,is,i,j,nv,l0;
 001E           ; double p,q,s,vr,vi,poddr,poddi;
 001E           ; for(it = 0;it <= n - 1;it ++)
 001E 4427              clr R20
 0020 5527              clr R21
 0022 6BC0              xjmp L5
 0024           L2:
 0024                   .dbline 14
 0024           ; {
 0024                   .dbline 15
 0024           ; m = it;
 0024 5B83              std y+3,R21
 0026 4A83              std y+2,R20
 0028                   .dbline 16
 0028           ; is = 0;
 0028 2224              clr R2
 002A 3324              clr R3
 002C 3B8E              std y+27,R3
 002E 2A8E              std y+26,R2
 0030                   .dbline 17
 0030           ; for(i = 0;i <= k - 1;i ++)
 0030 398E              std y+25,R3
 0032 288E              std y+24,R2
 0034 22C0              xjmp L9
 0036           L6:
 0036                   .dbline 18
 0036                   .dbline 19
 0036 22E0              ldi R18,2
 0038 30E0              ldi R19,0
 003A 0A81              ldd R16,y+2
 003C 1B81              ldd R17,y+3
 003E 0E940000          xcall div16s
 0042 5801              movw R10,R16
 0044                   .dbline 20
 0044 02E0              ldi R16,2
 0046 10E0              ldi R17,0
 0048 9501              movw R18,R10
 004A 0E940000          xcall empy16s
 004E 2A80              ldd R2,y+2
 0050 3B80              ldd R3,y+3
 0052 201A              sub R2,R16
 0054 310A              sbc R3,R17
 0056 2A8D              ldd R18,y+26
 0058 3B8D              ldd R19,y+27
 005A 02E0              ldi R16,2
 005C 10E0              ldi R17,0
 005E 0E940000          xcall empy16s
 0062 2801              movw R4,R16
 0064 420C              add R4,R2
 0066 531C              adc R5,R3
 0068 5B8E              std y+27,R5
 006A 4A8E              std y+26,R4
 006C                   .dbline 21
 006C BB82              std y+3,R11
 006E AA82              std y+2,R10
 0070                   .dbline 22
 0070           L7:
 0070                   .dbline 17
 0070 888D              ldd R24,y+24
 0072 998D              ldd R25,y+25
 0074 0196              adiw R24,1
 0076 998F              std y+25,R25
 0078 888F              std y+24,R24
 007A           L9:
 007A                   .dbline 17
 007A 8EAD              ldd R24,y+62
 007C 9FAD              ldd R25,y+63
 007E 0197              sbiw R24,1
 0080 288C              ldd R2,y+24
 0082 398C              ldd R3,y+25
 0084 8215              cp R24,R2
 0086 9305              cpc R25,R3
 0088 B4F6              brge L6
 008A                   .dbline 23
 008A 2A8D              ldd R18,y+26
 008C 3B8D              ldd R19,y+27
 008E 04E0              ldi R16,4
 0090 10E0              ldi R17,0
 0092 0E940000          xcall empy16s
 0096 F801              movw R30,R16
 0098 08AC              ldd R0,y+56
 009A 19AC              ldd R1,y+57
 009C E00D              add R30,R0
 009E F11D              adc R31,R1
 00A0 2080              ldd R2,z+0
 00A2 3180              ldd R3,z+1
 00A4 4280              ldd R4,z+2
 00A6 5380              ldd R5,z+3
 00A8 04E0              ldi R16,4
 00AA 10E0              ldi R17,0
 00AC 9A01              movw R18,R20
 00AE 0E940000          xcall empy16s
 00B2 F801              movw R30,R16
 00B4 EE0D              add R30,R14
 00B6 FF1D              adc R31,R15
 00B8 2082              std z+0,R2
 00BA 3182              std z+1,R3
 00BC 4282              std z+2,R4
 00BE 5382              std z+3,R5
 00C0                   .dbline 24
 00C0 2A8D              ldd R18,y+26
 00C2 3B8D              ldd R19,y+27
 00C4 04E0              ldi R16,4
 00C6 10E0              ldi R17,0
 00C8 0E940000          xcall empy16s
 00CC F801              movw R30,R16
 00CE 0AAC              ldd R0,y+58
 00D0 1BAC              ldd R1,y+59
 00D2 E00D              add R30,R0
 00D4 F11D              adc R31,R1
 00D6 2080              ldd R2,z+0
 00D8 3180              ldd R3,z+1
 00DA 4280              ldd R4,z+2
 00DC 5380              ldd R5,z+3
 00DE 04E0              ldi R16,4
 00E0 10E0              ldi R17,0
 00E2 9A01              movw R18,R20
 00E4 0E940000          xcall empy16s
 00E8 F801              movw R30,R16
 00EA EC0D              add R30,R12
 00EC FD1D              adc R31,R13
 00EE 2082              std z+0,R2
 00F0 3182              std z+1,R3
 00F2 4282              std z+2,R4
 00F4 5382              std z+3,R5
 00F6                   .dbline 25
 00F6           L3:
 00F6                   .dbline 13
 00F6 4F5F              subi R20,255  ; offset = 1
 00F8 5F4F              sbci R21,255
 00FA           L5:
 00FA                   .dbline 13
 00FA 8CAD              ldd R24,y+60
 00FC 9DAD              ldd R25,y+61
 00FE 0197              sbiw R24,1
 0100 8417              cp R24,R20
 0102 9507              cpc R25,R21
 0104 0CF0              brlt X3
 0106 8ECF              xjmp L2
 0108           X3:
 0108                   .dbline 26
 0108           ; {
 0108           ; j = m / 2;
 0108           ; is = 2 * is + (m - 2 * j);
 0108           ; m = j;
 0108           ; }
 0108           ; fr[it] = pr[is];
 0108           ; fi[it] = pi[is];
 0108           ; }
 0108           ; pr[0] = 1.0;
 0108 00E0              ldi R16,<L10
 010A 10E0              ldi R17,>L10
 010C 0E940000          xcall lpm32
 0110 1801              movw R2,R16
 0112 2901              movw R4,R18
 0114 E8AD              ldd R30,y+56
 0116 F9AD              ldd R31,y+57
 0118 2082              std z+0,R2
 011A 3182              std z+1,R3
 011C 4282              std z+2,R4
 011E 5382              std z+3,R5
 0120                   .dbline 27
 0120           ; pi[0] = 0.0;
 0120 00E0              ldi R16,<L11
 0122 10E0              ldi R17,>L11
 0124 0E940000          xcall lpm32
 0128 1801              movw R2,R16
 012A 2901              movw R4,R18
 012C EAAD              ldd R30,y+58
 012E FBAD              ldd R31,y+59
 0130 2082              std z+0,R2
 0132 3182              std z+1,R3
 0134 4282              std z+2,R4
 0136 5382              std z+3,R5
 0138                   .dbline 28
 0138           ; p = 6.283185306 / (1.0 * n);
 0138 00E0              ldi R16,<L12
 013A 10E0              ldi R17,>L12
 013C 0E940000          xcall lpm32
 0140 3A93              st -y,R19
 0142 2A93              st -y,R18
 0144 1A93              st -y,R17
 0146 0A93              st -y,R16
 0148 00E0              ldi R16,<L10
 014A 10E0              ldi R17,>L10
 014C 0E940000          xcall lpm32
 0150 3A93              st -y,R19
 0152 2A93              st -y,R18
 0154 1A93              st -y,R17
 0156 0A93              st -y,R16
 0158            ; stack offset 8
 0158 FE01              movw R30,R28
 015A EC5B              subi R30,188  ; addi 68
 015C FF4F              sbci R31,255
 015E 0081              ldd R16,z+0
 0160 1181              ldd R17,z+1
 0162 0E940000          xcall int2fp
 0166 3A93              st -y,R19
 0168 2A93              st -y,R18
 016A 1A93              st -y,R17
 016C 0A93              st -y,R16
 016E 0E940000          xcall empy32fs
 0172 0E940000          xcall div32f
 0176 FE01              movw R30,R28
 0178 0087              std z+8,R16
 017A 1187              std z+9,R17
 017C 2287              std z+10,R18
 017E 3387              std z+11,R19
 0180                   .dbline 29
 0180           ; pr[1] = cos(p);
 0180 FE01              movw R30,R28
 0182 0085              ldd R16,z+8
 0184 1185              ldd R17,z+9
 0186 2285              ldd R18,z+10
 0188 3385              ldd R19,z+11
 018A 0E940000          xcall _cos
 018E 1801              movw R2,R16
 0190 2901              movw R4,R18
 0192 E8AD              ldd R30,y+56
 0194 F9AD              ldd R31,y+57
 0196 2482              std z+4,R2
 0198 3582              std z+5,R3
 019A 4682              std z+6,R4
 019C 5782              std z+7,R5
 019E                   .dbline 30
 019E           ; pi[1] = -sin(p);
 019E FE01              movw R30,R28
 01A0 0085              ldd R16,z+8
 01A2 1185              ldd R17,z+9
 01A4 2285              ldd R18,z+10
 01A6 3385              ldd R19,z+11
 01A8 0E940000          xcall _sin
 01AC 3A93              st -y,R19
 01AE 2A93              st -y,R18
 01B0 1A93              st -y,R17
 01B2 0A93              st -y,R16
 01B4 0E940000          xcall neg32f
 01B8 EAAD              ldd R30,y+58
 01BA FBAD              ldd R31,y+59
 01BC 0483              std z+4,R16
 01BE 1583              std z+5,R17
 01C0 2683              std z+6,R18
 01C2 3783              std z+7,R19
 01C4                   .dbline 31
 01C4           ; if(l != 0)
 01C4 FE01              movw R30,R28
 01C6 EC5B              subi R30,188  ; addi 68
 01C8 FF4F              sbci R31,255
 01CA 0080              ldd R0,z+0
 01CC 1180              ldd R1,z+1
 01CE 0020              tst R0
 01D0 11F4              brne X0
 01D2 1120              tst R1
 01D4 A1F0              breq L13
 01D6           X0:
 01D6                   .dbline 32
 01D6           ; pi[1] = -pi[1];
 01D6 8AAD              ldd R24,y+58
 01D8 9BAD              ldd R25,y+59
 01DA 0496              adiw R24,4
 01DC 1C01              movw R2,R24
 01DE FC01              movw R30,R24
 01E0 4080              ldd R4,z+0
 01E2 5180              ldd R5,z+1
 01E4 6280              ldd R6,z+2
 01E6 7380              ldd R7,z+3
 01E8 7A92              st -y,R7
 01EA 6A92              st -y,R6
 01EC 5A92              st -y,R5
 01EE 4A92              st -y,R4
 01F0 0E940000          xcall neg32f
 01F4 F101              movw R30,R2
 01F6 0083              std z+0,R16
 01F8 1183              std z+1,R17
 01FA 2283              std z+2,R18
 01FC 3383              std z+3,R19
 01FE           L13:
 01FE                   .dbline 33
 01FE           ; for(i = 2;i <= n - 1;i ++)
 01FE 82E0              ldi R24,2
 0200 90E0              ldi R25,0
 0202 998F              std y+25,R25
 0204 888F              std y+24,R24
 0206 E4C0              xjmp L18
 0208           L15:
 0208                   .dbline 34
 0208                   .dbline 35
 0208 288D              ldd R18,y+24
 020A 398D              ldd R19,y+25
 020C 04E0              ldi R16,4
 020E 10E0              ldi R17,0
 0210 0E940000          xcall empy16s
 0214 F801              movw R30,R16
 0216 3497              sbiw R30,4
 0218 08AC              ldd R0,y+56
 021A 19AC              ldd R1,y+57
 021C E00D              add R30,R0
 021E F11D              adc R31,R1
 0220 2080              ldd R2,z+0
 0222 3180              ldd R3,z+1
 0224 4280              ldd R4,z+2
 0226 5380              ldd R5,z+3
 0228 5A92              st -y,R5
 022A 4A92              st -y,R4
 022C 3A92              st -y,R3
 022E 2A92              st -y,R2
 0230 F001              movw R30,R0
 0232 2480              ldd R2,z+4
 0234 3580              ldd R3,z+5

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -