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

📄 fft1.lst

📁 在ICCAVR 环境实现的fft,
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    007D E5CF      LDI	R28,0x5F
    007E E0D4      LDI	R29,4
    007F BFCD      OUT	0x3D,R28
    0080 BFDE      OUT	0x3E,R29
    0081 51C0      SUBI	R28,0x10
    0082 40D0      SBCI	R29,0
    0083 EA0A      LDI	R16,0xAA
    0084 8308      STD	Y+0,R16
    0085 2400      CLR	R0
    0086 E6E0      LDI	R30,0x60
    0087 E0F0      LDI	R31,0
    0088 E010      LDI	R17,0
    0089 36E2      CPI	R30,0x62
    008A 07F1      CPC	R31,R17
    008B F011      BEQ	0x008E
    008C 9201      ST	R0,Z+
    008D CFFB      RJMP	0x0089
    008E 8300      STD	Z+0,R16
    008F EFEA      LDI	R30,0xFA
    0090 E0F0      LDI	R31,0
    0091 E6A0      LDI	R26,0x60
    0092 E0B0      LDI	R27,0
    0093 E010      LDI	R17,0
    0094 3FEA      CPI	R30,0xFA
    0095 07F1      CPC	R31,R17
    0096 F021      BEQ	0x009B
    0097 95C8      LPM
    0098 9631      ADIW	R30,1
    0099 920D      ST	R0,X+
    009A CFF9      RJMP	0x0094
    009B 940E0723  CALL	_main
_exit:
    009D CFFF      RJMP	_exit
_FFT:
  l0                   --> Y+36
  vi                   --> Y+32
  vr                   --> Y+28
  is                   --> Y+26
  i                    --> Y+24
  poddi                --> Y+20
  poddr                --> Y+16
  q                    --> Y+12
  p                    --> Y+8
  s                    --> Y+4
  m                    --> Y+2
  nv                   --> Y+0
  it                   --> R20
  j                    --> R10
  il                   --> Y+70
  l                    --> Y+68
  fi                   --> R12
  fr                   --> R14
  k                    --> Y+62
  n                    --> Y+60
  pi                   --> Y+58
  pr                   --> Y+56
    009E 940E0725  CALL	push_arg4
    00A0 940E077D  CALL	push_gset5
    00A2 97AE      SBIW	R28,0x2E
    00A3 01FE      MOVW	R30,R28
    00A4 5CE0      SUBI	R30,0xC0
    00A5 4FFF      SBCI	R31,0xFF
    00A6 80E0      LDD	R14,Z+0
    00A7 80F1      LDD	R15,Z+1
    00A8 01FE      MOVW	R30,R28
    00A9 5BEE      SUBI	R30,0xBE
    00AA 4FFF      SBCI	R31,0xFF
    00AB 80C0      LDD	R12,Z+0
    00AC 80D1      LDD	R13,Z+1
FILE: D:\HJN\Design\AVR\fft\fft2.c
(0001) #include<math.h>
(0002) 
(0003) /*pr:输入实部
(0004) pi:输入虚部
(0005) n为2^k,n不小于数据个数
(0006) l:为0表示正变换,1表示反变换
(0007) il:1表示fr为取模结果。0表示fr输出实部fi输出虚部
(0008) */
(0009) void FFT(double* pr, double* pi, int n, int k, double* fr, double* fi, int l, int il)
(0010) {
(0011) int it,m,is,i,j,nv,l0;
(0012) double p,q,s,vr,vi,poddr,poddi;
(0013) for(it = 0;it <= n - 1;it ++)
    00AD 2744      CLR	R20
    00AE 2755      CLR	R21
    00AF C06B      RJMP	0x011B
(0014) {
(0015) m = it;
    00B0 835B      STD	Y+3,R21
    00B1 834A      STD	Y+2,R20
(0016) is = 0;
    00B2 2422      CLR	R2
    00B3 2433      CLR	R3
    00B4 8E3B      STD	Y+27,R3
    00B5 8E2A      STD	Y+26,R2
(0017) for(i = 0;i <= k - 1;i ++)
    00B6 8E39      STD	Y+25,R3
    00B7 8E28      STD	Y+24,R2
    00B8 C022      RJMP	0x00DB
(0018) {
(0019) j = m / 2;
    00B9 E022      LDI	R18,2
    00BA E030      LDI	R19,0
    00BB 810A      LDD	R16,Y+2
    00BC 811B      LDD	R17,Y+3
    00BD 940E072E  CALL	div16s
    00BF 0158      MOVW	R10,R16
(0020) is = 2 * is + (m - 2 * j);
    00C0 E002      LDI	R16,2
    00C1 E010      LDI	R17,0
    00C2 0195      MOVW	R18,R10
    00C3 940E0764  CALL	empy16s
    00C5 802A      LDD	R2,Y+2
    00C6 803B      LDD	R3,Y+3
    00C7 1A20      SUB	R2,R16
    00C8 0A31      SBC	R3,R17
    00C9 8D2A      LDD	R18,Y+26
    00CA 8D3B      LDD	R19,Y+27
    00CB E002      LDI	R16,2
    00CC E010      LDI	R17,0
    00CD 940E0764  CALL	empy16s
    00CF 0128      MOVW	R4,R16
    00D0 0C42      ADD	R4,R2
    00D1 1C53      ADC	R5,R3
    00D2 8E5B      STD	Y+27,R5
    00D3 8E4A      STD	Y+26,R4
(0021) m = j;
    00D4 82BB      STD	Y+3,R11
    00D5 82AA      STD	Y+2,R10
    00D6 8D88      LDD	R24,Y+24
    00D7 8D99      LDD	R25,Y+25
    00D8 9601      ADIW	R24,1
    00D9 8F99      STD	Y+25,R25
    00DA 8F88      STD	Y+24,R24
    00DB AD8E      LDD	R24,Y+62
    00DC AD9F      LDD	R25,Y+63
    00DD 9701      SBIW	R24,1
    00DE 8C28      LDD	R2,Y+24
    00DF 8C39      LDD	R3,Y+25
    00E0 1582      CP	R24,R2
    00E1 0593      CPC	R25,R3
    00E2 F6B4      BGE	0x00B9
(0022) }
(0023) fr[it] = pr[is];
    00E3 8D2A      LDD	R18,Y+26
    00E4 8D3B      LDD	R19,Y+27
    00E5 E004      LDI	R16,4
    00E6 E010      LDI	R17,0
    00E7 940E0764  CALL	empy16s
    00E9 01F8      MOVW	R30,R16
    00EA AC08      LDD	R0,Y+56
    00EB AC19      LDD	R1,Y+57
    00EC 0DE0      ADD	R30,R0
    00ED 1DF1      ADC	R31,R1
    00EE 8020      LDD	R2,Z+0
    00EF 8031      LDD	R3,Z+1
    00F0 8042      LDD	R4,Z+2
    00F1 8053      LDD	R5,Z+3
    00F2 E004      LDI	R16,4
    00F3 E010      LDI	R17,0
    00F4 019A      MOVW	R18,R20
    00F5 940E0764  CALL	empy16s
    00F7 01F8      MOVW	R30,R16
    00F8 0DEE      ADD	R30,R14
    00F9 1DFF      ADC	R31,R15
    00FA 8220      STD	Z+0,R2
    00FB 8231      STD	Z+1,R3
    00FC 8242      STD	Z+2,R4
    00FD 8253      STD	Z+3,R5
(0024) fi[it] = pi[is];
    00FE 8D2A      LDD	R18,Y+26
    00FF 8D3B      LDD	R19,Y+27
    0100 E004      LDI	R16,4
    0101 E010      LDI	R17,0
    0102 940E0764  CALL	empy16s
    0104 01F8      MOVW	R30,R16
    0105 AC0A      LDD	R0,Y+58
    0106 AC1B      LDD	R1,Y+59
    0107 0DE0      ADD	R30,R0
    0108 1DF1      ADC	R31,R1
    0109 8020      LDD	R2,Z+0
    010A 8031      LDD	R3,Z+1
    010B 8042      LDD	R4,Z+2
    010C 8053      LDD	R5,Z+3
    010D E004      LDI	R16,4
    010E E010      LDI	R17,0
    010F 019A      MOVW	R18,R20
    0110 940E0764  CALL	empy16s
    0112 01F8      MOVW	R30,R16
    0113 0DEC      ADD	R30,R12
    0114 1DFD      ADC	R31,R13
    0115 8220      STD	Z+0,R2
    0116 8231      STD	Z+1,R3
    0117 8242      STD	Z+2,R4
    0118 8253      STD	Z+3,R5
    0119 5F4F      SUBI	R20,0xFF
    011A 4F5F      SBCI	R21,0xFF
    011B AD8C      LDD	R24,Y+60
    011C AD9D      LDD	R25,Y+61
    011D 9701      SBIW	R24,1
    011E 1784      CP	R24,R20
    011F 0795      CPC	R25,R21
    0120 F00C      BLT	0x0122
    0121 CF8E      RJMP	0x00B0
(0025) }
(0026) pr[0] = 1.0;
    0122 E60C      LDI	R16,0x6C
    0123 E010      LDI	R17,0
    0124 940E07A5  CALL	lpm32
    0126 0118      MOVW	R2,R16
    0127 0129      MOVW	R4,R18
    0128 ADE8      LDD	R30,Y+56
    0129 ADF9      LDD	R31,Y+57
    012A 8220      STD	Z+0,R2
    012B 8231      STD	Z+1,R3
    012C 8242      STD	Z+2,R4
    012D 8253      STD	Z+3,R5
(0027) pi[0] = 0.0;
    012E E608      LDI	R16,0x68
    012F E010      LDI	R17,0
    0130 940E07A5  CALL	lpm32
    0132 0118      MOVW	R2,R16
    0133 0129      MOVW	R4,R18
    0134 ADEA      LDD	R30,Y+58
    0135 ADFB      LDD	R31,Y+59
    0136 8220      STD	Z+0,R2
    0137 8231      STD	Z+1,R3
    0138 8242      STD	Z+2,R4
    0139 8253      STD	Z+3,R5
(0028) p = 6.283185306 / (1.0 * n);
    013A E604      LDI	R16,0x64
    013B E010      LDI	R17,0
    013C 940E07A5  CALL	lpm32
    013E 933A      ST	R19,-Y
    013F 932A      ST	R18,-Y
    0140 931A      ST	R17,-Y
    0141 930A      ST	R16,-Y
    0142 E60C      LDI	R16,0x6C
    0143 E010      LDI	R17,0
    0144 940E07A5  CALL	lpm32
    0146 933A      ST	R19,-Y
    0147 932A      ST	R18,-Y
    0148 931A      ST	R17,-Y
    0149 930A      ST	R16,-Y
    014A 01FE      MOVW	R30,R28
    014B 5BEC      SUBI	R30,0xBC
    014C 4FFF      SBCI	R31,0xFF
    014D 8100      LDD	R16,Z+0
    014E 8111      LDD	R17,Z+1
    014F 940E080D  CALL	int2fp
    0151 933A      ST	R19,-Y
    0152 932A      ST	R18,-Y
    0153 931A      ST	R17,-Y
    0154 930A      ST	R16,-Y
    0155 940E0998  CALL	empy32fs
    0157 940E08CD  CALL	div32f
    0159 01FE      MOVW	R30,R28
    015A 8700      STD	Z+8,R16
    015B 8711      STD	Z+9,R17
    015C 8722      STD	Z+10,R18
    015D 8733      STD	Z+11,R19
(0029) pr[1] = cos(p);
    015E 01FE      MOVW	R30,R28
    015F 8500      LDD	R16,Z+8
    0160 8511      LDD	R17,Z+9
    0161 8522      LDD	R18,Z+10
    0162 8533      LDD	R19,Z+11
    0163 940E0C8E  CALL	_cos
    0165 0118      MOVW	R2,R16
    0166 0129      MOVW	R4,R18
    0167 ADE8      LDD	R30,Y+56
    0168 ADF9      LDD	R31,Y+57
    0169 8224      STD	Z+4,R2
    016A 8235      STD	Z+5,R3
    016B 8246      STD	Z+6,R4
    016C 8257      STD	Z+7,R5
(0030) pi[1] = -sin(p);
    016D 01FE      MOVW	R30,R28
    016E 8500      LDD	R16,Z+8
    016F 8511      LDD	R17,Z+9
    0170 8522      LDD	R18,Z+10
    0171 8533      LDD	R19,Z+11
    0172 940E0F4A  CALL	_sin
    0174 933A      ST	R19,-Y
    0175 932A      ST	R18,-Y
    0176 931A      ST	R17,-Y
    0177 930A      ST	R16,-Y
    0178 940E09E8  CALL	neg32f
    017A ADEA      LDD	R30,Y+58
    017B ADFB      LDD	R31,Y+59
    017C 8304      STD	Z+4,R16
    017D 8315      STD	Z+5,R17
    017E 8326      STD	Z+6,R18
    017F 8337      STD	Z+7,R19
(0031) if(l != 0)
    0180 01FE      MOVW	R30,R28
    0181 5BEC      SUBI	R30,0xBC
    0182 4FFF      SBCI	R31,0xFF
    0183 8000      LDD	R0,Z+0
    0184 8011      LDD	R1,Z+1
    0185 2000      TST	R0
    0186 F411      BNE	0x0189
    0187 2011      TST	R1
    0188 F0A1      BEQ	0x019D
(0032) pi[1] = -pi[1];
    0189 AD8A      LDD	R24,Y+58
    018A AD9B      LDD	R25,Y+59
    018B 9604      ADIW	R24,4
    018C 011C      MOVW	R2,R24
    018D 01FC      MOVW	R30,R24
    018E 8040      LDD	R4,Z+0
    018F 8051      LDD	R5,Z+1
    0190 8062      LDD	R6,Z+2
    0191 8073      LDD	R7,Z+3
    0192 927A      ST	R7,-Y
    0193 926A      ST	R6,-Y
    0194 925A      ST	R5,-Y
    0195 924A      ST	R4,-Y
    0196 940E09E8  CALL	neg32f
    0198 01F1      MOVW	R30,R2
    0199 8300      STD	Z+0,R16
    019A 8311      STD	Z+1,R17
    019B 8322      STD	Z+2,R18
    019C 8333      STD	Z+3,R19
(0033) for(i = 2;i <= n - 1;i ++)
    019D E082      LDI	R24,2
    019E E090      LDI	R25,0
    019F 8F99      STD	Y+25,R25
    01A0 8F88      STD	Y+24,R24
    01A1 C0E4      RJMP	0x0286
(0034) {
(0035) p = pr[i - 1] * pr[1];
    01A2 8D28      LDD	R18,Y+24
    01A3 8D39      LDD	R19,Y+25
    01A4 E004      LDI	R16,4
    01A5 E010      LDI	R17,0
    01A6 940E0764  CALL	empy16s
    01A8 01F8      MOVW	R30,R16
    01A9 9734      SBIW	R30,4
    01AA AC08      LDD	R0,Y+56
    01AB AC19      LDD	R1,Y+57
    01AC 0DE0      ADD	R30,R0
    01AD 1DF1      ADC	R31,R1
    01AE 8020      LDD	R2,Z+0
    01AF 8031      LDD	R3,Z+1
    01B0 8042      LDD	R4,Z+2
    01B1 8053      LDD	R5,Z+3
    01B2 925A      ST	R5,-Y
    01B3 924A      ST	R4,-Y
    01B4 923A      ST	R3,-Y
    01B5 922A      ST	R2,-Y
    01B6 01F0      MOVW	R30,R0
    01B7 8024      LDD	R2,Z+4
    01B8 8035      LDD	R3,Z+5
    01B9 8046      LDD	R4,Z+6
    01BA 8057      LDD	R5,Z+7
    01BB 925A      ST	R5,-Y
    01BC 924A      ST	R4,-Y
    01BD 923A      ST	R3,-Y
    01BE 922A      ST	R2,-Y
    01BF 940E099B  CALL	empy32f
    01C1 01FE      MOVW	R30,R28
    01C2 8700      STD	Z+8,R16
    01C3 8711      STD	Z+9,R17
    01C4 8722      STD	Z+10,R18
    01C5 8733      STD	Z+11,R19
(0036) q = pi[i - 1] * pi[1];
    01C6 8D28      LDD	R18,Y+24
    01C7 8D39      LDD	R19,Y+25
    01C8 E004      LDI	R16,4
    01C9 E010      LDI	R17,0
    01CA 940E0764  CALL	empy16s
    01CC 01F8      MOVW	R30,R16
    01CD 9734      SBIW	R30,4
    01CE AC0A      LDD	R0,Y+58
    01CF AC1B      LDD	R1,Y+59
    01D0 0DE0      ADD	R30,R0
    01D1 1DF1      ADC	R31,R1
    01D2 8020      LDD	R2,Z+0
    01D3 8031      LDD	R3,Z+1
    01D4 8042      LDD	R4,Z+2
    01D5 8053      LDD	R5,Z+3
    01D6 925A      ST	R5,-Y
    01D7 924A      ST	R4,-Y
    01D8 923A      ST	R3,-Y
    01D9 922A      ST	R2,-Y
    01DA 01F0      MOVW	R30,R0
    01DB 8024      LDD	R2,Z+4
    01DC 8035      LDD	R3,Z+5
    01DD 8046      LDD	R4,Z+6
    01DE 8057      LDD	R5,Z+7
    01DF 925A      ST	R5,-Y
    01E0 924A      ST	R4,-Y
    01E1 923A      ST	R3,-Y
    01E2 922A      ST	R2,-Y
    01E3 940E099B  CALL	empy32f
    01E5 01FE      MOVW	R30,R28
    01E6 8704      STD	Z+12,R16
    01E7 8715      STD	Z+13,R17
    01E8 8726      STD	Z+14,R18
    01E9 8737      STD	Z+15,R19
(0037) s = (pr[i - 1] + pi[i - 1]) * (pr[1] + pi[1]);
    01EA 8D28      LDD	R18,Y+24
    01EB 8D39      LDD	R19,Y+25
    01EC E004      LDI	R16,4
    01ED E010      LDI	R17,0
    01EE 940E0764  CALL	empy16s
    01F0 01C8      MOVW	R24,R16
    01F1 9704      SBIW	R24,4
    01F2 01FC      MOVW	R30,R24
    01F3 AC08      LDD	R0,Y+56
    01F4 AC19      LDD	R1,Y+57
    01F5 0DE0      ADD	R30,R0
    01F6 1DF1      ADC	R31,R1
    01F7 8040      LDD	R4,Z+0
    01F8 8051      LDD	R5,Z+1
    01F9 8062      LDD	R6,Z+2
    01FA 8073      LDD	R7,Z+3
    01FB 927A      ST	R7,-Y
    01FC 926A      ST	R6,-Y
    01FD 925A      ST	R5,-Y
    01FE 924A      ST	R4,-Y
    01FF 01FC      MOVW	R30,R24
    0200 AC0E      LDD	R0,Y+62
    0201 AC1F      LDD	R1,Y+63
    0202 0DE0      ADD	R30,R0
    0203 1DF1      ADC	R31,R1
    0204 8020      LDD	R2,Z+0
    0205 8031      LDD	R3,Z+1
    0206 8042      LDD	R4,Z+2

⌨️ 快捷键说明

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