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

📄 ff.lis

📁 在ICCAVR 环境实现的fft,
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module ff.c
                        .area data(ram, con, rel)
 0000           _dataR::
 0000                   .blkb 4
                        .area idata
 0000 0000A040          .word 0x0,0x40a0
                        .area data(ram, con, rel)
 0004                   .blkb 4
                        .area idata
 0004 0000A040          .word 0x0,0x40a0
                        .area data(ram, con, rel)
 0008                   .blkb 4
                        .area idata
 0008 0000A040          .word 0x0,0x40a0
                        .area data(ram, con, rel)
 000C                   .blkb 4
                        .area idata
 000C 0000A040          .word 0x0,0x40a0
                        .area data(ram, con, rel)
 0010                   .blkb 4
                        .area idata
 0010 00000000          .word 0x0,0x0
                        .area data(ram, con, rel)
 0014                   .blkb 4
                        .area idata
 0014 00000000          .word 0x0,0x0
                        .area data(ram, con, rel)
 0018                   .blkb 4
                        .area idata
 0018 00000000          .word 0x0,0x0
                        .area data(ram, con, rel)
 001C                   .blkb 4
                        .area idata
 001C 00000000          .word 0x0,0x0
                        .area data(ram, con, rel)
 0020                   .dbfile D:\HJN\Design\AVR\fft\ff.c
 0020                   .dbsym e dataR _dataR A[32:8]D
 0020           _dataI::
 0020                   .blkb 4
                        .area idata
 0020 00000000          .word 0x0,0x0
                        .area data(ram, con, rel)
 0024                   .dbfile D:\HJN\Design\AVR\fft\ff.c
 0024                   .blkb 4
                        .area idata
 0024 00000000          .word 0x0,0x0
                        .area data(ram, con, rel)
 0028                   .dbfile D:\HJN\Design\AVR\fft\ff.c
 0028                   .blkb 4
                        .area idata
 0028 00000000          .word 0x0,0x0
                        .area data(ram, con, rel)
 002C                   .dbfile D:\HJN\Design\AVR\fft\ff.c
 002C                   .blkb 4
                        .area idata
 002C 00000000          .word 0x0,0x0
                        .area data(ram, con, rel)
 0030                   .dbfile D:\HJN\Design\AVR\fft\ff.c
 0030                   .blkb 4
                        .area idata
 0030 00000000          .word 0x0,0x0
                        .area data(ram, con, rel)
 0034                   .dbfile D:\HJN\Design\AVR\fft\ff.c
 0034                   .blkb 4
                        .area idata
 0034 00000000          .word 0x0,0x0
                        .area data(ram, con, rel)
 0038                   .dbfile D:\HJN\Design\AVR\fft\ff.c
 0038                   .blkb 4
                        .area idata
 0038 00000000          .word 0x0,0x0
                        .area data(ram, con, rel)
 003C                   .dbfile D:\HJN\Design\AVR\fft\ff.c
 003C                   .blkb 4
                        .area idata
 003C 00000000          .word 0x0,0x0
                        .area data(ram, con, rel)
 0040                   .dbfile D:\HJN\Design\AVR\fft\ff.c
 0040                   .dbsym e dataI _dataI A[32:8]D
                        .area text(rom, con, rel)
 0000                   .dbfile D:\HJN\Design\AVR\fft\ff.c
 0000                   .dbfunc e FFT _FFT fV
 0000           ;             xx -> y+12
 0000           ;             x2 -> R14,R15
 0000           ;             x1 -> R10,R11
 0000           ;             x0 -> R12,R13
 0000           ;              L -> y+24
 0000           ;              j -> R10,R11
 0000           ;           temp -> y+8
 0000           ;             TI -> y+4
 0000           ;             TR -> y+0
 0000           ;              b -> y+22
 0000           ;              p -> R14,R15
 0000           ;              k -> R12,R13
 0000           ;          dataI -> y+38
 0000           ;          dataR -> y+36
                        .even
 0000           _FFT::
 0000 0E940000          xcall push_arg4
 0004 0E940000          xcall push_gset5
 0008 6A97              sbiw R28,26
 000A                   .dbline -1
 000A                   .dbline 10
 000A           ; #include <iom128v.h>
 000A           ; #include <math.h>
 000A           ; #define PI 3.1415926
 000A           ; 
 000A           ; unsigned char i,w[32];
 000A           ; float dataR[]={5,5,5,5,0,0,0,0};
 000A           ; float dataI[]={0,0,0,0,0,0,0,0};
 000A           ; 
 000A           ; void FFT(float dataR[],float dataI[])
 000A           ; {
 000A                   .dbline 17
 000A           ;    int x0,x1,x2,xx;
 000A           ;    
 000A           ;    int L,j,k,b,p;
 000A           ;    float TR,TI,temp;
 000A           ; 
 000A           ; /********** following code invert sequence ************/
 000A           ;  for(i=0;i<8;i++)
 000A 2224              clr R2
 000C 20922000          sts _i,R2
 0010 55C0              xjmp L5
 0012           L2:
 0012                   .dbline 18
 0012                   .dbline 19
 0012 EE24              clr R14
 0014 FF24              clr R15
 0016 AA24              clr R10
 0018 BB24              clr R11
 001A CC24              clr R12
 001C DD24              clr R13
 001E                   .dbline 20
 001E 80912000          lds R24,_i
 0022 9927              clr R25
 0024 8170              andi R24,1
 0026 9070              andi R25,0
 0028 6C01              movw R12,R24
 002A                   .dbline 21
 002A 22E0              ldi R18,2
 002C 30E0              ldi R19,0
 002E 00912000          lds R16,_i
 0032 1127              clr R17
 0034 0E940000          xcall div16s
 0038 C801              movw R24,R16
 003A 8170              andi R24,1
 003C 9070              andi R25,0
 003E 5C01              movw R10,R24
 0040                   .dbline 22
 0040 24E0              ldi R18,4
 0042 30E0              ldi R19,0
 0044 00912000          lds R16,_i
 0048 1127              clr R17
 004A 0E940000          xcall div16s
 004E C801              movw R24,R16
 0050 8170              andi R24,1
 0052 9070              andi R25,0
 0054 7C01              movw R14,R24
 0056                   .dbline 23
 0056 02E0              ldi R16,2
 0058 10E0              ldi R17,0
 005A 9501              movw R18,R10
 005C 0E940000          xcall empy16s
 0060 1801              movw R2,R16
 0062 04E0              ldi R16,4
 0064 10E0              ldi R17,0
 0066 9601              movw R18,R12
 0068 0E940000          xcall empy16s
 006C 2801              movw R4,R16
 006E 420C              add R4,R2
 0070 531C              adc R5,R3
 0072 4E0C              add R4,R14
 0074 5F1C              adc R5,R15
 0076 5D86              std y+13,R5
 0078 4C86              std y+12,R4
 007A                   .dbline 24
 007A 20902000          lds R2,_i
 007E 84E0              ldi R24,4
 0080 829D              mul R24,R2
 0082 F001              movw R30,R0
 0084 0CA0              ldd R0,y+36
 0086 1DA0              ldd R1,y+37
 0088 E00D              add R30,R0
 008A F11D              adc R31,R1
 008C 2080              ldd R2,z+0
 008E 3180              ldd R3,z+1
 0090 4280              ldd R4,z+2
 0092 5380              ldd R5,z+3
 0094 2C85              ldd R18,y+12
 0096 3D85              ldd R19,y+13
 0098 04E0              ldi R16,4
 009A 10E0              ldi R17,0
 009C 0E940000          xcall empy16s
 00A0 F801              movw R30,R16
 00A2 0EA0              ldd R0,y+38
 00A4 1FA0              ldd R1,y+39
 00A6 E00D              add R30,R0
 00A8 F11D              adc R31,R1
 00AA 2082              std z+0,R2
 00AC 3182              std z+1,R3
 00AE 4282              std z+2,R4
 00B0 5382              std z+3,R5
 00B2                   .dbline 25
 00B2           L3:
 00B2                   .dbline 17
 00B2 80912000          lds R24,_i
 00B6 8F5F              subi R24,255    ; addi 1
 00B8 80932000          sts _i,R24
 00BC           L5:
 00BC                   .dbline 17
 00BC 80912000          lds R24,_i
 00C0 8830              cpi R24,8
 00C2 08F4              brsh X0
 00C4 A6CF              xjmp L2
 00C6           X0:
 00C6                   .dbline 26
 00C6           ;   { 
 00C6           ;    x0=x1=x2=0;
 00C6           ;    x0=i&0x01; 
 00C6           ;    x1=(i/2)&0x01; 
 00C6           ;    x2=(i/4)&0x01;
 00C6           ;    xx=x0*4+x1*2+x2;
 00C6           ;    dataI[xx]=dataR[i];   //实部的数放在虚部数组中
 00C6           ;   }
 00C6           ;  for(i=0;i<8;i++)
 00C6 2224              clr R2
 00C8 20922000          sts _i,R2
 00CC 2CC0              xjmp L9
 00CE           L6:
 00CE                   .dbline 27
 00CE                   .dbline 28
 00CE 20902000          lds R2,_i
 00D2 84E0              ldi R24,4
 00D4 829D              mul R24,R2
 00D6 1001              movw R2,R0
 00D8 F101              movw R30,R2
 00DA 0EA0              ldd R0,y+38
 00DC 1FA0              ldd R1,y+39
 00DE E00D              add R30,R0
 00E0 F11D              adc R31,R1
 00E2 4080              ldd R4,z+0
 00E4 5180              ldd R5,z+1
 00E6 6280              ldd R6,z+2
 00E8 7380              ldd R7,z+3
 00EA F101              movw R30,R2
 00EC 0CA0              ldd R0,y+36
 00EE 1DA0              ldd R1,y+37
 00F0 E00D              add R30,R0
 00F2 F11D              adc R31,R1
 00F4 4082              std z+0,R4
 00F6 5182              std z+1,R5
 00F8 6282              std z+2,R6
 00FA 7382              std z+3,R7
 00FC                   .dbline 29
 00FC 20902000          lds R2,_i
 0100 829D              mul R24,R2
 0102 F001              movw R30,R0
 0104 0EA0              ldd R0,y+38
 0106 1FA0              ldd R1,y+39
 0108 E00D              add R30,R0
 010A F11D              adc R31,R1
 010C 00E0              ldi R16,<L10
 010E 10E0              ldi R17,>L10
 0110 0E940000          xcall lpm32
 0114 0083              std z+0,R16
 0116 1183              std z+1,R17
 0118 2283              std z+2,R18
 011A 3383              std z+3,R19
 011C                   .dbline 30
 011C           L7:
 011C                   .dbline 26
 011C 80912000          lds R24,_i
 0120 8F5F              subi R24,255    ; addi 1
 0122 80932000          sts _i,R24
 0126           L9:
 0126                   .dbline 26
 0126 80912000          lds R24,_i
 012A 8830              cpi R24,8
 012C 08F4              brsh X1
 012E CFCF              xjmp L6
 0130           X1:
 0130                   .dbline 32
 0130           ;   { 
 0130           ;    dataR[i]=dataI[i];    //将虚部保存的数传回实部
 0130           ;    dataI[i]=0; 
 0130           ;   }
 0130           ; /************** following code FFT *******************/
 0130           ;  for(L = 1 ; L <= 3 ; L ++ )            // for (1)  L 代表第几级
 0130 81E0              ldi R24,1
 0132 90E0              ldi R25,0
 0134 998F              std y+25,R25
 0136 888F              std y+24,R24
 0138           L11:
 0138                   .dbline 33
 0138           ;   { 
 0138                   .dbline 34
 0138           ;     b = 1 ; 
 0138 81E0              ldi R24,1
 013A 90E0              ldi R25,0
 013C 9F8B              std y+23,R25
 013E 8E8B              std y+22,R24
 0140                   .dbline 35
 0140           ;     i = L - 1 ;          
 0140 888D              ldd R24,y+24
 0142 998D              ldd R25,y+25
 0144 0197              sbiw R24,1
 0146 80932000          sts _i,R24
 014A 0DC0              xjmp L16
 014C           L15:
 014C                   .dbline 37
 014C                   .dbline 38
 014C 02E0              ldi R16,2
 014E 10E0              ldi R17,0
 0150 2E89              ldd R18,y+22
 0152 3F89              ldd R19,y+23
 0154 0E940000          xcall empy16s
 0158 1F8B              std y+23,R17
 015A 0E8B              std y+22,R16
 015C                   .dbline 39
 015C 80912000          lds R24,_i
 0160 8150              subi R24,1
 0162 80932000          sts _i,R24
 0166                   .dbline 40
 0166           L16:
 0166                   .dbline 36
 0166           ;     while ( i > 0 )           //计算第L层旋转因子的个数,即输入口间距 b= 2^(L-1)  
 0166 2224              clr R2
 0168 30902000          lds R3,_i
 016C 2314              cp R2,R3
 016E 70F3              brlo L15
 0170                   .dbline 42
 0170           ;      {
 0170           ;        b=b*2; 
 0170           ;        i--;
 0170           ;      }                        
 0170           ;    
 0170           ;    for ( j = 0 ; j <= b - 1 ; j ++ )    // for (2)  j 用来控制计算第几个旋转因子
 0170 AA24              clr R10
 0172 BB24              clr R11
 0174 23C2              xjmp L21
 0176           L18:
 0176                   .dbline 43
 0176           ;     {
 0176                   .dbline 44
 0176           ;        p = 1 ;
 0176 81E0              ldi R24,1
 0178 90E0              ldi R25,0
 017A 7C01              movw R14,R24
 017C                   .dbline 45
 017C           ;        i = 3 - L ;     
 017C 83E0              ldi R24,3
 017E 088C              ldd R0,y+24
 0180 198C              ldd R1,y+25
 0182 8019              sub R24,R0
 0184 9109              sbc R25,R1
 0186 80932000          sts _i,R24
 018A 0BC0              xjmp L23
 018C           L22:
 018C                   .dbline 48
 018C                   .dbline 49
 018C 02E0              ldi R16,2
 018E 10E0              ldi R17,0
 0190 9701              movw R18,R14
 0192 0E940000          xcall empy16s
 0196 7801              movw R14,R16
 0198                   .dbline 50
 0198 80912000          lds R24,_i
 019C 8150              subi R24,1
 019E 80932000          sts _i,R24
 01A2                   .dbline 51
 01A2           L23:
 01A2                   .dbline 47
 01A2           ;        
 01A2           ;       while ( i > 0 )                           /* p=pow(2,3-L)*j; */
 01A2 2224              clr R2
 01A4 30902000          lds R3,_i
 01A8 2314              cp R2,R3
 01AA 80F3              brlo L22
 01AC                   .dbline 52
 01AC           ;          {
 01AC           ;           p = p * 2 ; 
 01AC           ;           i -- ;
 01AC           ;          }
 01AC           ;       p=p*j;
 01AC 9501              movw R18,R10
 01AE 8701              movw R16,R14
 01B0 0E940000          xcall empy16s
 01B4 7801              movw R14,R16
 01B6                   .dbline 54
 01B6           ;        
 01B6           ;         for ( k = j ; k < 8 ; k = k + 2 * b )  /* for (3) */

⌨️ 快捷键说明

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