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

📄 fffff.lst

📁 在ICCAVR 环境实现的fft,
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    0081 EFCF      LDI	R28,0xFF
    0082 E1D0      LDI	R29,0x10
    0083 BFCD      OUT	0x3D,R28
    0084 BFDE      OUT	0x3E,R29
    0085 51C0      SUBI	R28,0x10
    0086 40D0      SBCI	R29,0
    0087 EA0A      LDI	R16,0xAA
    0088 8308      STD	Y+0,R16
    0089 2400      CLR	R0
    008A E2E0      LDI	R30,0x20
    008B E0F1      LDI	R31,1
    008C E011      LDI	R17,1
    008D 38E2      CPI	R30,0x82
    008E 07F1      CPC	R31,R17
    008F F011      BEQ	0x0092
    0090 9201      ST	R0,Z+
    0091 CFFB      RJMP	0x008D
    0092 8300      STD	Z+0,R16
    0093 EEE2      LDI	R30,0xE2
    0094 E0F0      LDI	R31,0
    0095 E0A0      LDI	R26,0
    0096 E0B1      LDI	R27,1
    0097 E011      LDI	R17,1
    0098 30E2      CPI	R30,2
    0099 07F1      CPC	R31,R17
    009A F021      BEQ	0x009F
    009B 95C8      LPM
    009C 9631      ADIW	R30,1
    009D 920D      ST	R0,X+
    009E CFF9      RJMP	0x0098
    009F 940E043D  CALL	_main
_exit:
    00A1 CFFF      RJMP	_exit
_FFT:
  x6                   --> Y+22
  x5                   --> Y+20
  x4                   --> Y+18
  xx                   --> Y+16
  x3                   --> Y+14
  x2                   --> Y+12
  x1                   --> R12
  x0                   --> R10
  L                    --> Y+27
  j                    --> R14
  temp                 --> Y+8
  TI                   --> Y+4
  TR                   --> Y+0
  i                    --> Y+26
  p                    --> R10
  b                    --> Y+24
  k                    --> R12
  dataI                --> Y+41
  dataR                --> Y+39
    00A2 940E0444  CALL	push_arg4
    00A4 940E049C  CALL	push_gset5
    00A6 976D      SBIW	R28,0x1D
FILE: D:\HJN\Design\AVR\fft\fffff.c
(0001) #include <iom128v.h>
(0002) #include <math.h>
(0003) #define PI 3.1415926
(0004) #define qq PI/8
(0005) 
(0006) int dataR[]={5,5,5,5,0,0,0,0,5,5,5,5,0,0,0,0};
(0007) int dataI[16],w[32];
(0008) 
(0009) 
(0010) void FFT(int dataR[],int dataI[])
(0011) {int x0,x1,x2,x3,x4,x5,x6,xx;
(0012)  unsigned char i;
(0013)  int L,j,k,b,p;
(0014)  float TR,TI,temp;
(0015) /********** following code invert sequence ************/
(0016) for(i=0;i<16;i++)
    00A7 2400      CLR	R0
    00A8 8E0A      STD	Y+26,R0
    00A9 C067      RJMP	0x0111
(0017) { x0=x1=x2=x3=x4=x5=x6=0;
    00AA 2422      CLR	R2
    00AB 2433      CLR	R3
    00AC 8A3F      STD	Y+23,R3
    00AD 8A2E      STD	Y+22,R2
    00AE 8A3D      STD	Y+21,R3
    00AF 8A2C      STD	Y+20,R2
    00B0 8A3B      STD	Y+19,R3
    00B1 8A2A      STD	Y+18,R2
    00B2 863F      STD	Y+15,R3
    00B3 862E      STD	Y+14,R2
    00B4 863D      STD	Y+13,R3
    00B5 862C      STD	Y+12,R2
    00B6 24CC      CLR	R12
    00B7 24DD      CLR	R13
    00B8 24AA      CLR	R10
    00B9 24BB      CLR	R11
(0018) x0=i&0x01; x1=(i>>1)&0x01; x2=(i>>2)&0x01; x3=(i>>3)&0x01;
    00BA 8D8A      LDD	R24,Y+26
    00BB 2799      CLR	R25
    00BC 7081      ANDI	R24,1
    00BD 7090      ANDI	R25,0
    00BE 015C      MOVW	R10,R24
    00BF 8D8A      LDD	R24,Y+26
    00C0 2799      CLR	R25
    00C1 9595      ASR	R25
    00C2 9587      ROR	R24
    00C3 7081      ANDI	R24,1
    00C4 7090      ANDI	R25,0
    00C5 016C      MOVW	R12,R24
    00C6 8D8A      LDD	R24,Y+26
    00C7 2799      CLR	R25
    00C8 9595      ASR	R25
    00C9 9587      ROR	R24
    00CA 9595      ASR	R25
    00CB 9587      ROR	R24
    00CC 7081      ANDI	R24,1
    00CD 7090      ANDI	R25,0
    00CE 879D      STD	Y+13,R25
    00CF 878C      STD	Y+12,R24
    00D0 8D8A      LDD	R24,Y+26
    00D1 2799      CLR	R25
    00D2 9595      ASR	R25
    00D3 9587      ROR	R24
    00D4 9595      ASR	R25
    00D5 9587      ROR	R24
    00D6 9595      ASR	R25
    00D7 9587      ROR	R24
    00D8 7081      ANDI	R24,1
    00D9 7090      ANDI	R25,0
    00DA 879F      STD	Y+15,R25
    00DB 878E      STD	Y+14,R24
(0019) //x4=(i>>4)&0x01; x5=(i>>5)&0x01; x6=(i>>6)&0x01;
(0020) xx=x0*8+x1*4+x2*2+x3;
    00DC E004      LDI	R16,4
    00DD E010      LDI	R17,0
    00DE 0196      MOVW	R18,R12
    00DF 940E0483  CALL	empy16s
    00E1 0118      MOVW	R2,R16
    00E2 E008      LDI	R16,0x8
    00E3 E010      LDI	R17,0
    00E4 0195      MOVW	R18,R10
    00E5 940E0483  CALL	empy16s
    00E7 0128      MOVW	R4,R16
    00E8 0C42      ADD	R4,R2
    00E9 1C53      ADC	R5,R3
    00EA 852C      LDD	R18,Y+12
    00EB 853D      LDD	R19,Y+13
    00EC E002      LDI	R16,2
    00ED E010      LDI	R17,0
    00EE 940E0483  CALL	empy16s
    00F0 0E40      ADD	R4,R16
    00F1 1E51      ADC	R5,R17
    00F2 842E      LDD	R2,Y+14
    00F3 843F      LDD	R3,Y+15
    00F4 0C42      ADD	R4,R2
    00F5 1C53      ADC	R5,R3
    00F6 8A59      STD	Y+17,R5
    00F7 8A48      STD	Y+16,R4
(0021) dataI[xx]=dataR[i];
    00F8 E082      LDI	R24,2
    00F9 8C0A      LDD	R0,Y+26
    00FA 9D80      MUL	R24,R0
    00FB 01F0      MOVW	R30,R0
    00FC A00F      LDD	R0,Y+39
    00FD A418      LDD	R1,Y+40
    00FE 0DE0      ADD	R30,R0
    00FF 1DF1      ADC	R31,R1
    0100 8020      LDD	R2,Z+0
    0101 8031      LDD	R3,Z+1
    0102 0192      MOVW	R18,R4
    0103 E002      LDI	R16,2
    0104 E010      LDI	R17,0
    0105 940E0483  CALL	empy16s
    0107 01F8      MOVW	R30,R16
    0108 A409      LDD	R0,Y+41
    0109 A41A      LDD	R1,Y+42
    010A 0DE0      ADD	R30,R0
    010B 1DF1      ADC	R31,R1
    010C 8231      STD	Z+1,R3
    010D 8220      STD	Z+0,R2
    010E 8C0A      LDD	R0,Y+26
    010F 9403      INC	R0
    0110 8E0A      STD	Y+26,R0
    0111 8D8A      LDD	R24,Y+26
    0112 3180      CPI	R24,0x10
    0113 F408      BCC	0x0115
    0114 CF95      RJMP	0x00AA
(0022) }
(0023) for(i=0;i<16;i++)
    0115 2400      CLR	R0
    0116 8E0A      STD	Y+26,R0
    0117 C020      RJMP	0x0138
(0024) { dataR[i]=dataI[i]; dataI[i]=0; }
    0118 E082      LDI	R24,2
    0119 8C0A      LDD	R0,Y+26
    011A 9D80      MUL	R24,R0
    011B 0110      MOVW	R2,R0
    011C 01F1      MOVW	R30,R2
    011D A409      LDD	R0,Y+41
    011E A41A      LDD	R1,Y+42
    011F 0DE0      ADD	R30,R0
    0120 1DF1      ADC	R31,R1
    0121 8040      LDD	R4,Z+0
    0122 8051      LDD	R5,Z+1
    0123 01F1      MOVW	R30,R2
    0124 A00F      LDD	R0,Y+39
    0125 A418      LDD	R1,Y+40
    0126 0DE0      ADD	R30,R0
    0127 1DF1      ADC	R31,R1
    0128 8251      STD	Z+1,R5
    0129 8240      STD	Z+0,R4
    012A 8C0A      LDD	R0,Y+26
    012B 9D80      MUL	R24,R0
    012C 01F0      MOVW	R30,R0
    012D A409      LDD	R0,Y+41
    012E A41A      LDD	R1,Y+42
    012F 0DE0      ADD	R30,R0
    0130 1DF1      ADC	R31,R1
    0131 2422      CLR	R2
    0132 2433      CLR	R3
    0133 8231      STD	Z+1,R3
    0134 8220      STD	Z+0,R2
    0135 8C0A      LDD	R0,Y+26
    0136 9403      INC	R0
    0137 8E0A      STD	Y+26,R0
    0138 8D8A      LDD	R24,Y+26
    0139 3180      CPI	R24,0x10
    013A F2E8      BCS	0x0118
(0025) /************** following code FFT *******************/
(0026) for(L=1;L<=4;L++) { /* for(1) */
    013B E081      LDI	R24,1
    013C E090      LDI	R25,0
    013D 8F9C      STD	Y+28,R25
    013E 8F8B      STD	Y+27,R24
(0027) b=1; i=L-1;
    013F E081      LDI	R24,1
    0140 E090      LDI	R25,0
    0141 8F99      STD	Y+25,R25
    0142 8F88      STD	Y+24,R24
    0143 8D8B      LDD	R24,Y+27
    0144 8D9C      LDD	R25,Y+28
    0145 9701      SBIW	R24,1
    0146 8F8A      STD	Y+26,R24
    0147 C00B      RJMP	0x0153
(0028) while(i>0) 
(0029) {b=b*2; i--;} /* b= 2^(L-1) */
    0148 E002      LDI	R16,2
    0149 E010      LDI	R17,0
    014A 8D28      LDD	R18,Y+24
    014B 8D39      LDD	R19,Y+25
    014C 940E0483  CALL	empy16s
    014E 8F19      STD	Y+25,R17
    014F 8F08      STD	Y+24,R16
    0150 8C0A      LDD	R0,Y+26
    0151 940A      DEC	R0
    0152 8E0A      STD	Y+26,R0
    0153 2422      CLR	R2
    0154 8C0A      LDD	R0,Y+26
    0155 1420      CP	R2,R0
    0156 F388      BCS	0x0148
(0030) for(j=0;j<=b-1;j++) /* for (2) */
    0157 24EE      CLR	R14
    0158 24FF      CLR	R15
    0159 C272      RJMP	0x03CC
(0031) { p=1; i=4-L;
    015A E081      LDI	R24,1
    015B E090      LDI	R25,0
    015C 015C      MOVW	R10,R24
    015D E084      LDI	R24,4
    015E 8C0B      LDD	R0,Y+27
    015F 8C1C      LDD	R1,Y+28
    0160 1980      SUB	R24,R0
    0161 0991      SBC	R25,R1
    0162 8F8A      STD	Y+26,R24
    0163 C009      RJMP	0x016D
(0032) while(i>0) /* p=pow(2,7-L)*j; */
(0033) {p=p*2; i--;}
    0164 E002      LDI	R16,2
    0165 E010      LDI	R17,0
    0166 0195      MOVW	R18,R10
    0167 940E0483  CALL	empy16s
    0169 0158      MOVW	R10,R16
    016A 8C0A      LDD	R0,Y+26
    016B 940A      DEC	R0
    016C 8E0A      STD	Y+26,R0
    016D 2422      CLR	R2
    016E 8C0A      LDD	R0,Y+26
    016F 1420      CP	R2,R0
    0170 F398      BCS	0x0164
(0034) p=p*j;for(k=j;k<16;k=k+2*b) /* for (3) */
    0171 0197      MOVW	R18,R14
    0172 0185      MOVW	R16,R10
    0173 940E0483  CALL	empy16s
    0175 0158      MOVW	R10,R16
    0176 0167      MOVW	R12,R14
    0177 C24B      RJMP	0x03C3
(0035) { TR=dataR[k]; TI=dataI[k]; temp=dataR[k+b];
    0178 E002      LDI	R16,2
    0179 E010      LDI	R17,0
    017A 0196      MOVW	R18,R12
    017B 940E0483  CALL	empy16s
    017D 01F8      MOVW	R30,R16
    017E A00F      LDD	R0,Y+39
    017F A418      LDD	R1,Y+40
    0180 0DE0      ADD	R30,R0
    0181 1DF1      ADC	R31,R1
    0182 8100      LDD	R16,Z+0
    0183 8111      LDD	R17,Z+1
    0184 940E052C  CALL	int2fp
    0186 01FE      MOVW	R30,R28
    0187 8300      STD	Z+0,R16
    0188 8311      STD	Z+1,R17
    0189 8322      STD	Z+2,R18
    018A 8333      STD	Z+3,R19
    018B E002      LDI	R16,2
    018C E010      LDI	R17,0
    018D 0196      MOVW	R18,R12
    018E 940E0483  CALL	empy16s
    0190 01F8      MOVW	R30,R16
    0191 A409      LDD	R0,Y+41
    0192 A41A      LDD	R1,Y+42
    0193 0DE0      ADD	R30,R0
    0194 1DF1      ADC	R31,R1
    0195 8100      LDD	R16,Z+0
    0196 8111      LDD	R17,Z+1
    0197 940E052C  CALL	int2fp
    0199 01FE      MOVW	R30,R28
    019A 8304      STD	Z+4,R16
    019B 8315      STD	Z+5,R17
    019C 8326      STD	Z+6,R18
    019D 8337      STD	Z+7,R19
    019E 0196      MOVW	R18,R12
    019F 8C08      LDD	R0,Y+24
    01A0 8C19      LDD	R1,Y+25
    01A1 0D20      ADD	R18,R0
    01A2 1D31      ADC	R19,R1
    01A3 E002      LDI	R16,2
    01A4 E010      LDI	R17,0
    01A5 940E0483  CALL	empy16s
    01A7 01F8      MOVW	R30,R16
    01A8 A00F      LDD	R0,Y+39
    01A9 A418      LDD	R1,Y+40
    01AA 0DE0      ADD	R30,R0
    01AB 1DF1      ADC	R31,R1
    01AC 8100      LDD	R16,Z+0
    01AD 8111      LDD	R17,Z+1
    01AE 940E052C  CALL	int2fp
    01B0 01FE      MOVW	R30,R28
    01B1 8700      STD	Z+8,R16
    01B2 8711      STD	Z+9,R17
    01B3 8722      STD	Z+10,R18
    01B4 8733      STD	Z+11,R19
(0036) dataR[k]=dataR[k]+dataR[k+b]*cos(qq*p)+dataI[k+b]*sin(qq*p);
    01B5 E80C      LDI	R16,0x8C
    01B6 E010      LDI	R17,0
    01B7 940E04C4  CALL	lpm32
    01B9 933A      ST	R19,-Y
    01BA 932A      ST	R18,-Y
    01BB 931A      ST	R17,-Y
    01BC 930A      ST	R16,-Y
    01BD 0185      MOVW	R16,R10
    01BE 940E052C  CALL	int2fp
    01C0 933A      ST	R19,-Y
    01C1 932A      ST	R18,-Y
    01C2 931A      ST	R17,-Y
    01C3 930A      ST	R16,-Y
    01C4 940E06B8  CALL	empy32f
    01C6 940E075C  CALL	_cos
    01C8 0118      MOVW	R2,R16
    01C9 0129      MOVW	R4,R18
    01CA E80C      LDI	R16,0x8C
    01CB E010      LDI	R17,0
    01CC 940E04C4  CALL	lpm32
    01CE 933A      ST	R19,-Y
    01CF 932A      ST	R18,-Y
    01D0 931A      ST	R17,-Y
    01D1 930A      ST	R16,-Y
    01D2 0185      MOVW	R16,R10
    01D3 940E052C  CALL	int2fp
    01D5 933A      ST	R19,-Y
    01D6 932A      ST	R18,-Y
    01D7 931A      ST	R17,-Y
    01D8 930A      ST	R16,-Y
    01D9 940E06B8  CALL	empy32f
    01DB 922F      PUSH	R2
    01DC 923F      PUSH	R3
    01DD 924F      PUSH	R4
    01DE 925F      PUSH	R5
    01DF 940E0A18  CALL	_sin
    01E1 905F      POP	R5
    01E2 904F      POP	R4
    01E3 903F      POP	R3
    01E4 902F      POP	R2
    01E5 0138      MOVW	R6,R16
    01E6 0149      MOVW	R8,R18
    01E7 E002      LDI	R16,2
    01E8 E010      LDI	R17,0
    01E9 0196      MOVW	R18,R12
    01EA 940E0483  CALL	empy16s
    01EC 01C8      MOVW	R24,R16
    01ED A00F      LDD	R0,Y+39
    01EE A418      LDD	R1,Y+40
    01EF 0D80      ADD	R24,R0
    01F0 1D91      ADC	R25,R1
    01F1 01FC      MOVW	R30,R24
    01F2 8100      LDD	R16,Z+0
    01F3 8111      LDD	R17,Z+1
    01F4 940E052C  CALL	int2fp
    01F6 933A      ST	R19,-Y
    01F7 932A      ST	R18,-Y
    01F8 931A      ST	R17,-Y
    01F9 930A      ST	R16,-Y
    01FA 0196      MOVW	R18,R12
    01FB 8C0C      LDD	R0,Y+28
    01FC 8C1D      LDD	R1,Y+29
    01FD 0D20      ADD	R18,R0
    01FE 1D31      ADC	R19,R1
    01FF E002      LDI	R16,2
    0200 E010      LDI	R17,0
    0201 940E0483  CALL	empy16s
    0203 01F8      MOVW	R30,R16
    0204 A40B      LDD	R0,Y+43
    0205 A41C      LDD	R1,Y+44
    0206 0DE0      ADD	R30,R0
    0207 1DF1      ADC	R31,R1
    0208 8100      LDD	R16,Z+0
    0209 8111      LDD	R17,Z+1
    020A 940E052C  CALL	int2fp
    020C 933A      ST	R19,-Y
    020D 932A      ST	R18,-Y
    020E 931A      ST	R17,-Y
    020F 930A      ST	R16,-Y
    0210 925A      ST	R5,-Y
    0211 924A      ST	R4,-Y
    0212 923A      ST	R3,-Y
    0213 922A      ST	R2,-Y
    0214 940E06B5  CALL	empy32fs

⌨️ 快捷键说明

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