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

📄 fft.lst

📁 在ICCAVR 环境实现的fft,
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    004F E5CF      LDI	R28,0x5F
    0050 E0D4      LDI	R29,4
    0051 BFCD      OUT	0x3D,R28
    0052 BFDE      OUT	0x3E,R29
    0053 51C0      SUBI	R28,0x10
    0054 40D0      SBCI	R29,0
    0055 EA0A      LDI	R16,0xAA
    0056 8308      STD	Y+0,R16
    0057 2400      CLR	R0
    0058 E6E0      LDI	R30,0x60
    0059 E0F0      LDI	R31,0
    005A E010      LDI	R17,0
    005B 36E0      CPI	R30,0x60
    005C 07F1      CPC	R31,R17
    005D F011      BEQ	0x0060
    005E 9201      ST	R0,Z+
    005F CFFB      RJMP	0x005B
    0060 8300      STD	Z+0,R16
    0061 E9EE      LDI	R30,0x9E
    0062 E0F0      LDI	R31,0
    0063 E6A0      LDI	R26,0x60
    0064 E0B0      LDI	R27,0
    0065 E010      LDI	R17,0
    0066 39EE      CPI	R30,0x9E
    0067 07F1      CPC	R31,R17
    0068 F021      BEQ	0x006D
    0069 95C8      LPM
    006A 9631      ADIW	R30,1
    006B 920D      ST	R0,X+
    006C CFF9      RJMP	0x0066
    006D 940E0598  CALL	_main
_exit:
    006F CFFF      RJMP	_exit
_four1:
  theta                --> Y+52
  wpi                  --> Y+48
  wpr                  --> Y+44
  wtemp                --> Y+40
  m                    --> Y+36
  istep                --> Y+32
  n                    --> Y+28
  mmax                 --> Y+24
  wr                   --> Y+20
  wi                   --> Y+16
  tempi                --> Y+12
  tempr                --> Y+8
  i                    --> Y+4
  j                    --> Y+0
  isign                --> R10
  nn                   --> Y+64
  data                 --> R12
    0070 933A      ST	R19,-Y
    0071 932A      ST	R18,-Y
    0072 940E0614  CALL	push_gset4
    0074 0168      MOVW	R12,R16
    0075 97E8      SBIW	R28,0x38
    0076 01FE      MOVW	R30,R28
    0077 5BEC      SUBI	R30,0xBC
    0078 4FFF      SBCI	R31,0xFF
    0079 80A0      LDD	R10,Z+0
    007A 80B1      LDD	R11,Z+1
FILE: D:\HJN\Design\AVR\fft\fft.c
(0001) /*data是输入和输出(复数),nn是FFT的点数 isign指示FFT变换方向1为正变换,
(0002)  -1为反变换,程序出自《Numerical Recipes in C》 */
(0003) 
(0004) 
(0005) #include <math.h>
(0006) #define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr
(0007) 
(0008) void four1(float data[], unsigned long nn, int isign)
(0009) {
(0010)   unsigned long n,mmax,m,j,istep,i;
(0011)   double wtemp,wr,wpr,wpi,wi,theta;
(0012)   float tempr,tempi;
(0013) 
(0014)   n=nn << 1;                //nn乘以2赋给n,作为取样点数
    007B 01FE      MOVW	R30,R28
    007C 5CE0      SUBI	R30,0xC0
    007D 4FFF      SBCI	R31,0xFF
    007E 8020      LDD	R2,Z+0
    007F 8031      LDD	R3,Z+1
    0080 8042      LDD	R4,Z+2
    0081 8053      LDD	R5,Z+3
    0082 0C22      LSL	R2
    0083 1C33      ROL	R3
    0084 1C44      ROL	R4
    0085 1C55      ROL	R5
    0086 01FE      MOVW	R30,R28
    0087 8E24      STD	Z+28,R2
    0088 8E35      STD	Z+29,R3
    0089 8E46      STD	Z+30,R4
    008A 8E57      STD	Z+31,R5
(0015)   j=1;
    008B E041      LDI	R20,1
    008C E050      LDI	R21,0
    008D E060      LDI	R22,0
    008E E070      LDI	R23,0
    008F 01FE      MOVW	R30,R28
    0090 8340      STD	Z+0,R20
    0091 8351      STD	Z+1,R21
    0092 8362      STD	Z+2,R22
    0093 8373      STD	Z+3,R23
(0016)   for (i=1;i<n;i+=2) {
    0094 E041      LDI	R20,1
    0095 E050      LDI	R21,0
    0096 E060      LDI	R22,0
    0097 E070      LDI	R23,0
    0098 01FE      MOVW	R30,R28
    0099 8344      STD	Z+4,R20
    009A 8355      STD	Z+5,R21
    009B 8366      STD	Z+6,R22
    009C 8377      STD	Z+7,R23
    009D C179      RJMP	0x0217
(0017)     if (j > i) {
    009E 01FE      MOVW	R30,R28
    009F 8024      LDD	R2,Z+4
    00A0 8035      LDD	R3,Z+5
    00A1 8046      LDD	R4,Z+6
    00A2 8057      LDD	R5,Z+7
    00A3 01FE      MOVW	R30,R28
    00A4 8060      LDD	R6,Z+0
    00A5 8071      LDD	R7,Z+1
    00A6 8082      LDD	R8,Z+2
    00A7 8093      LDD	R9,Z+3
    00A8 1426      CP	R2,R6
    00A9 0437      CPC	R3,R7
    00AA 0448      CPC	R4,R8
    00AB 0459      CPC	R5,R9
    00AC F008      BCS	0x00AE
    00AD C0F6      RJMP	0x01A4
(0018)       SWAP(data[j],data[i]);
    00AE 01FE      MOVW	R30,R28
    00AF 8020      LDD	R2,Z+0
    00B0 8031      LDD	R3,Z+1
    00B1 8042      LDD	R4,Z+2
    00B2 8053      LDD	R5,Z+3
    00B3 E044      LDI	R20,4
    00B4 E050      LDI	R21,0
    00B5 E060      LDI	R22,0
    00B6 E070      LDI	R23,0
    00B7 925A      ST	R5,-Y
    00B8 924A      ST	R4,-Y
    00B9 923A      ST	R3,-Y
    00BA 922A      ST	R2,-Y
    00BB 018A      MOVW	R16,R20
    00BC 019B      MOVW	R18,R22
    00BD 940E05D9  CALL	empy32u
    00BF 01F8      MOVW	R30,R16
    00C0 0DEC      ADD	R30,R12
    00C1 1DFD      ADC	R31,R13
    00C2 8020      LDD	R2,Z+0
    00C3 8031      LDD	R3,Z+1
    00C4 8042      LDD	R4,Z+2
    00C5 8053      LDD	R5,Z+3
    00C6 01FE      MOVW	R30,R28
    00C7 8620      STD	Z+8,R2
    00C8 8631      STD	Z+9,R3
    00C9 8642      STD	Z+10,R4
    00CA 8653      STD	Z+11,R5
    00CB 01FE      MOVW	R30,R28
    00CC 8024      LDD	R2,Z+4
    00CD 8035      LDD	R3,Z+5
    00CE 8046      LDD	R4,Z+6
    00CF 8057      LDD	R5,Z+7
    00D0 E044      LDI	R20,4
    00D1 E050      LDI	R21,0
    00D2 E060      LDI	R22,0
    00D3 E070      LDI	R23,0
    00D4 925A      ST	R5,-Y
    00D5 924A      ST	R4,-Y
    00D6 923A      ST	R3,-Y
    00D7 922A      ST	R2,-Y
    00D8 018A      MOVW	R16,R20
    00D9 019B      MOVW	R18,R22
    00DA 940E05D9  CALL	empy32u
    00DC 01F8      MOVW	R30,R16
    00DD 0DEC      ADD	R30,R12
    00DE 1DFD      ADC	R31,R13
    00DF 8020      LDD	R2,Z+0
    00E0 8031      LDD	R3,Z+1
    00E1 8042      LDD	R4,Z+2
    00E2 8053      LDD	R5,Z+3
    00E3 01FE      MOVW	R30,R28
    00E4 8060      LDD	R6,Z+0
    00E5 8071      LDD	R7,Z+1
    00E6 8082      LDD	R8,Z+2
    00E7 8093      LDD	R9,Z+3
    00E8 E044      LDI	R20,4
    00E9 E050      LDI	R21,0
    00EA E060      LDI	R22,0
    00EB E070      LDI	R23,0
    00EC 929A      ST	R9,-Y
    00ED 928A      ST	R8,-Y
    00EE 927A      ST	R7,-Y
    00EF 926A      ST	R6,-Y
    00F0 018A      MOVW	R16,R20
    00F1 019B      MOVW	R18,R22
    00F2 940E05D9  CALL	empy32u
    00F4 01F8      MOVW	R30,R16
    00F5 0DEC      ADD	R30,R12
    00F6 1DFD      ADC	R31,R13
    00F7 8220      STD	Z+0,R2
    00F8 8231      STD	Z+1,R3
    00F9 8242      STD	Z+2,R4
    00FA 8253      STD	Z+3,R5
    00FB 01FE      MOVW	R30,R28
    00FC 8024      LDD	R2,Z+4
    00FD 8035      LDD	R3,Z+5
    00FE 8046      LDD	R4,Z+6
    00FF 8057      LDD	R5,Z+7
    0100 E044      LDI	R20,4
    0101 E050      LDI	R21,0
    0102 E060      LDI	R22,0
    0103 E070      LDI	R23,0
    0104 925A      ST	R5,-Y
    0105 924A      ST	R4,-Y
    0106 923A      ST	R3,-Y
    0107 922A      ST	R2,-Y
    0108 018A      MOVW	R16,R20
    0109 019B      MOVW	R18,R22
    010A 940E05D9  CALL	empy32u
    010C 01F8      MOVW	R30,R16
    010D 0DEC      ADD	R30,R12
    010E 1DFD      ADC	R31,R13
    010F 01DE      MOVW	R26,R28
    0110 9618      ADIW	R26,0x8
    0111 902D      LD	R2,X+
    0112 903D      LD	R3,X+
    0113 904D      LD	R4,X+
    0114 905C      LD	R5,0(X)
    0115 8220      STD	Z+0,R2
    0116 8231      STD	Z+1,R3
    0117 8242      STD	Z+2,R4
    0118 8253      STD	Z+3,R5
(0019)       SWAP(data[j+1],data[i+1]);
    0119 E041      LDI	R20,1
    011A E050      LDI	R21,0
    011B E060      LDI	R22,0
    011C E070      LDI	R23,0
    011D 01FE      MOVW	R30,R28
    011E 8020      LDD	R2,Z+0
    011F 8031      LDD	R3,Z+1
    0120 8042      LDD	R4,Z+2
    0121 8053      LDD	R5,Z+3
    0122 0E24      ADD	R2,R20
    0123 1E35      ADC	R3,R21
    0124 1E46      ADC	R4,R22
    0125 1E57      ADC	R5,R23
    0126 E044      LDI	R20,4
    0127 E050      LDI	R21,0
    0128 E060      LDI	R22,0
    0129 E070      LDI	R23,0
    012A 925A      ST	R5,-Y
    012B 924A      ST	R4,-Y
    012C 923A      ST	R3,-Y
    012D 922A      ST	R2,-Y
    012E 018A      MOVW	R16,R20
    012F 019B      MOVW	R18,R22
    0130 940E05D9  CALL	empy32u
    0132 01F8      MOVW	R30,R16
    0133 0DEC      ADD	R30,R12
    0134 1DFD      ADC	R31,R13
    0135 8020      LDD	R2,Z+0
    0136 8031      LDD	R3,Z+1
    0137 8042      LDD	R4,Z+2
    0138 8053      LDD	R5,Z+3
    0139 01FE      MOVW	R30,R28
    013A 8620      STD	Z+8,R2
    013B 8631      STD	Z+9,R3
    013C 8642      STD	Z+10,R4
    013D 8653      STD	Z+11,R5
    013E E041      LDI	R20,1
    013F E050      LDI	R21,0
    0140 E060      LDI	R22,0
    0141 E070      LDI	R23,0
    0142 01FE      MOVW	R30,R28
    0143 8024      LDD	R2,Z+4
    0144 8035      LDD	R3,Z+5
    0145 8046      LDD	R4,Z+6
    0146 8057      LDD	R5,Z+7
    0147 0E24      ADD	R2,R20
    0148 1E35      ADC	R3,R21
    0149 1E46      ADC	R4,R22
    014A 1E57      ADC	R5,R23
    014B E044      LDI	R20,4
    014C E050      LDI	R21,0
    014D E060      LDI	R22,0
    014E E070      LDI	R23,0
    014F 925A      ST	R5,-Y
    0150 924A      ST	R4,-Y
    0151 923A      ST	R3,-Y
    0152 922A      ST	R2,-Y
    0153 018A      MOVW	R16,R20
    0154 019B      MOVW	R18,R22
    0155 940E05D9  CALL	empy32u
    0157 01F8      MOVW	R30,R16
    0158 0DEC      ADD	R30,R12
    0159 1DFD      ADC	R31,R13
    015A 8020      LDD	R2,Z+0
    015B 8031      LDD	R3,Z+1
    015C 8042      LDD	R4,Z+2
    015D 8053      LDD	R5,Z+3
    015E E041      LDI	R20,1
    015F E050      LDI	R21,0
    0160 E060      LDI	R22,0
    0161 E070      LDI	R23,0
    0162 01FE      MOVW	R30,R28
    0163 8060      LDD	R6,Z+0
    0164 8071      LDD	R7,Z+1
    0165 8082      LDD	R8,Z+2
    0166 8093      LDD	R9,Z+3
    0167 0E64      ADD	R6,R20
    0168 1E75      ADC	R7,R21
    0169 1E86      ADC	R8,R22
    016A 1E97      ADC	R9,R23
    016B E044      LDI	R20,4
    016C E050      LDI	R21,0
    016D E060      LDI	R22,0
    016E E070      LDI	R23,0
    016F 929A      ST	R9,-Y
    0170 928A      ST	R8,-Y
    0171 927A      ST	R7,-Y
    0172 926A      ST	R6,-Y
    0173 018A      MOVW	R16,R20
    0174 019B      MOVW	R18,R22
    0175 940E05D9  CALL	empy32u
    0177 01F8      MOVW	R30,R16
    0178 0DEC      ADD	R30,R12
    0179 1DFD      ADC	R31,R13
    017A 8220      STD	Z+0,R2
    017B 8231      STD	Z+1,R3
    017C 8242      STD	Z+2,R4
    017D 8253      STD	Z+3,R5
    017E E041      LDI	R20,1
    017F E050      LDI	R21,0
    0180 E060      LDI	R22,0
    0181 E070      LDI	R23,0
    0182 01FE      MOVW	R30,R28
    0183 8024      LDD	R2,Z+4
    0184 8035      LDD	R3,Z+5
    0185 8046      LDD	R4,Z+6
    0186 8057      LDD	R5,Z+7
    0187 0E24      ADD	R2,R20
    0188 1E35      ADC	R3,R21
    0189 1E46      ADC	R4,R22
    018A 1E57      ADC	R5,R23
    018B E044      LDI	R20,4
    018C E050      LDI	R21,0
    018D E060      LDI	R22,0
    018E E070      LDI	R23,0
    018F 925A      ST	R5,-Y
    0190 924A      ST	R4,-Y
    0191 923A      ST	R3,-Y
    0192 922A      ST	R2,-Y
    0193 018A      MOVW	R16,R20
    0194 019B      MOVW	R18,R22
    0195 940E05D9  CALL	empy32u
    0197 01F8      MOVW	R30,R16
    0198 0DEC      ADD	R30,R12
    0199 1DFD      ADC	R31,R13
    019A 01DE      MOVW	R26,R28
    019B 9618      ADIW	R26,0x8
    019C 902D      LD	R2,X+
    019D 903D      LD	R3,X+
    019E 904D      LD	R4,X+
    019F 905C      LD	R5,0(X)
    01A0 8220      STD	Z+0,R2
    01A1 8231      STD	Z+1,R3
    01A2 8242      STD	Z+2,R4
    01A3 8253      STD	Z+3,R5
(0020)     }
(0021)     m=n >> 1;              //将n除以2的值赋给m
    01A4 01FE      MOVW	R30,R28
    01A5 8C24      LDD	R2,Z+28
    01A6 8C35      LDD	R3,Z+29
    01A7 8C46      LDD	R4,Z+30
    01A8 8C57      LDD	R5,Z+31
    01A9 9456      LSR	R5
    01AA 9447      ROR	R4
    01AB 9437      ROR	R3
    01AC 9427      ROR	R2
    01AD 01FE      MOVW	R30,R28
    01AE A224      STD	Z+36,R2
    01AF A235      STD	Z+37,R3
    01B0 A246      STD	Z+38,R4
    01B1 A257      STD	Z+39,R5
    01B2 C021      RJMP	0x01D4
(0022)     while (m >= 2 && j > m) 
(0023) 	{
(0024)       j -= m;
    01B3 01FE      MOVW	R30,R28
    01B4 A024      LDD	R2,Z+36
    01B5 A035      LDD	R3,Z+37
    01B6 A046      LDD	R4,Z+38
    01B7 A057      LDD	R5,Z+39
    01B8 01FE      MOVW	R30,R28
    01B9 8060      LDD	R6,Z+0
    01BA 8071      LDD	R7,Z+1
    01BB 8082      LDD	R8,Z+2
    01BC 8093      LDD	R9,Z+3
    01BD 1862      SUB	R6,R2
    01BE 0873      SBC	R7,R3
    01BF 0884      SBC	R8,R4
    01C0 0895      SBC	R9,R5
    01C1 01FE      MOVW	R30,R28
    01C2 8260      STD	Z+0,R6
    01C3 8271      STD	Z+1,R7
    01C4 8282      STD	Z+2,R8
    01C5 8293      STD	Z+3,R9
(0025)       m >>= 1;            //将m除以2的值赋给m
    01C6 01FE      MOVW	R30,R28
    01C7 A024      LDD	R2,Z+36
    01C8 A035      LDD	R3,Z+37
    01C9 A046      LDD	R4,Z+38
    01CA A057      LDD	R5,Z+39
    01CB 9456      LSR	R5
    01CC 9447      ROR	R4
    01CD 9437      ROR	R3
    01CE 9427      ROR	R2
    01CF 01FE      MOVW	R30,R28
    01D0 A224      STD	Z+36,R2
    01D1 A235      STD	Z+37,R3
    01D2 A246      STD	Z+38,R4
    01D3 A257      STD	Z+39,R5
    01D4 E042      LDI	R20,2
    01D5 E050      LDI	R21,0
    01D6 E060      LDI	R22,0
    01D7 E070      LDI	R23,0
    01D8 01FE      MOVW	R30,R28
    01D9 A024      LDD	R2,Z+36
    01DA A035      LDD	R3,Z+37
    01DB A046      LDD	R4,Z+38
    01DC A057      LDD	R5,Z+39

⌨️ 快捷键说明

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