📄 fftbook.lst
字号:
(0056) // FFT算法
(0057) for(L=1;L<=4;L++) // 第一层循环
046D E081 LDI R24,1
046E E090 LDI R25,0
046F 939000D1 STS L+1,R25
0471 938000D0 STS L,R24
(0058) {
(0059) b=1; i=L-1;
0473 E081 LDI R24,1
0474 E090 LDI R25,0
0475 939000C9 STS b+1,R25
0477 938000C8 STS b,R24
0479 918000D0 LDS R24,L
047B 919000D1 LDS R25,L+1
047D 9701 SBIW R24,1
047E 939000CF STS i+1,R25
0480 938000CE STS i,R24
0482 C015 RJMP 0x0498
(0060) while(i>0)
(0061) {
(0062) b=b*2; i--;
0483 912000C8 LDS R18,b
0485 913000C9 LDS R19,b+1
0487 E002 LDI R16,2
0488 E010 LDI R17,0
0489 940E060D CALL empy16s
048B 931000C9 STS b+1,R17
048D 930000C8 STS b,R16
048F 918000CE LDS R24,i
0491 919000CF LDS R25,i+1
0493 9701 SBIW R24,1
0494 939000CF STS i+1,R25
0496 938000CE STS i,R24
0498 2422 CLR R2
0499 2433 CLR R3
049A 904000CE LDS R4,i
049C 905000CF LDS R5,i+1
049E 1424 CP R2,R4
049F 0435 CPC R3,R5
04A0 F314 BLT 0x0483
(0063) }
(0064) for(j=0;j<=b-1;j++) // 第二层循环
04A1 923000CD STS j+1,R3
04A3 922000CC STS j,R2
04A5 C06B RJMP 0x0511
(0065) {
(0066) p=1; i=4-L;
04A6 E081 LDI R24,1
04A7 E090 LDI R25,0
04A8 939000C7 STS p+1,R25
04AA 938000C6 STS p,R24
04AC 902000D0 LDS R2,L
04AE 903000D1 LDS R3,L+1
04B0 E084 LDI R24,4
04B1 1982 SUB R24,R2
04B2 0993 SBC R25,R3
04B3 939000CF STS i+1,R25
04B5 938000CE STS i,R24
04B7 C015 RJMP 0x04CD
(0067) while(i>0)
(0068) {
(0069) p=p*2; i--;
04B8 912000C6 LDS R18,p
04BA 913000C7 LDS R19,p+1
04BC E002 LDI R16,2
04BD E010 LDI R17,0
04BE 940E060D CALL empy16s
04C0 931000C7 STS p+1,R17
04C2 930000C6 STS p,R16
04C4 918000CE LDS R24,i
04C6 919000CF LDS R25,i+1
04C8 9701 SBIW R24,1
04C9 939000CF STS i+1,R25
04CB 938000CE STS i,R24
04CD 2422 CLR R2
04CE 2433 CLR R3
04CF 904000CE LDS R4,i
04D1 905000CF LDS R5,i+1
04D3 1424 CP R2,R4
04D4 0435 CPC R3,R5
04D5 F314 BLT 0x04B8
(0070) }
(0071) p=p*j;
04D6 912000CC LDS R18,j
04D8 913000CD LDS R19,j+1
04DA 910000C6 LDS R16,p
04DC 911000C7 LDS R17,p+1
04DE 940E060D CALL empy16s
04E0 931000C7 STS p+1,R17
04E2 930000C6 STS p,R16
(0072) for(k=j;k<16;k=k+2*b) // 第三层循环
04E4 902000CC LDS R2,j
04E6 903000CD LDS R3,j+1
04E8 923000CB STS k+1,R3
04EA 922000CA STS k,R2
04EC C013 RJMP 0x0500
(0073) {
(0074) FFTT();
04ED DC06 RCALL _FFTT
04EE 912000C8 LDS R18,b
04F0 913000C9 LDS R19,b+1
04F2 E002 LDI R16,2
04F3 E010 LDI R17,0
04F4 940E060D CALL empy16s
04F6 902000CA LDS R2,k
04F8 903000CB LDS R3,k+1
04FA 0E20 ADD R2,R16
04FB 1E31 ADC R3,R17
04FC 923000CB STS k+1,R3
04FE 922000CA STS k,R2
0500 918000CA LDS R24,k
0502 919000CB LDS R25,k+1
0504 3180 CPI R24,0x10
0505 E0E0 LDI R30,0
0506 079E CPC R25,R30
0507 F32C BLT 0x04ED
0508 918000CC LDS R24,j
050A 919000CD LDS R25,j+1
050C 9601 ADIW R24,1
050D 939000CD STS j+1,R25
050F 938000CC STS j,R24
0511 918000C8 LDS R24,b
0513 919000C9 LDS R25,b+1
0515 9701 SBIW R24,1
0516 902000CC LDS R2,j
0518 903000CD LDS R3,j+1
051A 1582 CP R24,R2
051B 0593 CPC R25,R3
051C F00C BLT 0x051E
051D CF88 RJMP 0x04A6
051E 918000D0 LDS R24,L
0520 919000D1 LDS R25,L+1
0522 9601 ADIW R24,1
0523 939000D1 STS L+1,R25
0525 938000D0 STS L,R24
0527 E084 LDI R24,4
0528 E090 LDI R25,0
0529 902000D0 LDS R2,L
052B 903000D1 LDS R3,L+1
052D 1582 CP R24,R2
052E 0593 CPC R25,R3
052F F00C BLT 0x0531
0530 CF42 RJMP 0x0473
(0075) }
(0076) }
(0077) }
(0078) for(i=0;i<32;i++) // 32次以下的谐波分析
0531 2422 CLR R2
0532 2433 CLR R3
0533 923000CF STS i+1,R3
0535 922000CE STS i,R2
(0079) {
(0080) w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);
0537 912000CE LDS R18,i
0539 913000CF LDS R19,i+1
053B E002 LDI R16,2
053C E010 LDI R17,0
053D 940E060D CALL empy16s
053F 01F8 MOVW R30,R16
0540 0FE6 ADD R30,R22
0541 1FF7 ADC R31,R23
0542 8020 LDD R2,Z+0
0543 8031 LDD R3,Z+1
0544 01F8 MOVW R30,R16
0545 0FE4 ADD R30,R20
0546 1FF5 ADC R31,R21
0547 8040 LDD R4,Z+0
0548 8051 LDD R5,Z+1
0549 0192 MOVW R18,R4
054A 0182 MOVW R16,R4
054B 940E060D CALL empy16s
054D 0128 MOVW R4,R16
054E 0191 MOVW R18,R2
054F 0181 MOVW R16,R2
0550 940E060D CALL empy16s
0552 0D04 ADD R16,R4
0553 1D15 ADC R17,R5
0554 940E06B6 CALL int2fp
0556 940E0BDB CALL _sqrt
0558 0118 MOVW R2,R16
0559 0129 MOVW R4,R18
055A 933A ST R19,-Y
055B 932A ST R18,-Y
055C 931A ST R17,-Y
055D 930A ST R16,-Y
055E E504 LDI R16,0x54
055F E010 LDI R17,0
0560 940E064E CALL lpm32
0562 933A ST R19,-Y
0563 932A ST R18,-Y
0564 931A ST R17,-Y
0565 930A ST R16,-Y
0566 940E07CE CALL cmp32f
0568 F0AC BLT 0x057E
0569 925A ST R5,-Y
056A 924A ST R4,-Y
056B 923A ST R3,-Y
056C 922A ST R2,-Y
056D E504 LDI R16,0x54
056E E010 LDI R17,0
056F 940E064E CALL lpm32
0571 933A ST R19,-Y
0572 932A ST R18,-Y
0573 931A ST R17,-Y
0574 930A ST R16,-Y
0575 940E071B CALL sub32f
0577 940E066E CALL fp2int
0579 01C8 MOVW R24,R16
057A 5080 SUBI R24,0
057B 4890 SBCI R25,0x80
057C 015C MOVW R10,R24
057D C005 RJMP 0x0583
057E 0181 MOVW R16,R2
057F 0192 MOVW R18,R4
0580 940E066E CALL fp2int
0582 0158 MOVW R10,R16
0583 EA86 LDI R24,0xA6
0584 E090 LDI R25,0
0585 91E000CE LDS R30,i
0587 91F000CF LDS R31,i+1
0589 0FE8 ADD R30,R24
058A 1FF9 ADC R31,R25
058B 82A0 STD Z+0,R10
(0081) w[i]=w[i]/64;
058C 906000CE LDS R6,i
058E 907000CF LDS R7,i+1
0590 0E68 ADD R6,R24
0591 1E79 ADC R7,R25
0592 E410 LDI R17,0x40
0593 01F3 MOVW R30,R6
0594 8100 LDD R16,Z+0
0595 940E05F7 CALL div8u
0597 01F3 MOVW R30,R6
0598 8300 STD Z+0,R16
0599 918000CE LDS R24,i
059B 919000CF LDS R25,i+1
059D 9601 ADIW R24,1
059E 939000CF STS i+1,R25
05A0 938000CE STS i,R24
05A2 3280 CPI R24,0x20
05A3 E0E0 LDI R30,0
05A4 079E CPC R25,R30
05A5 F40C BGE 0x05A7
05A6 CF90 RJMP 0x0537
(0082) }
(0083) w[0]=w[0]/2;
05A7 906000A6 LDS R6,w
05A9 9466 LSR R6
05AA 926000A6 STS w,R6
05AC 940E0620 CALL pop_gset3
05AE 9508 RET
(0084) }
(0085)
(0086) void main ()
(0087) {
(0088) FFT(dataR,dataI);
_main:
05AF E820 LDI R18,0x80
05B0 E030 LDI R19,0
05B1 E600 LDI R16,0x60
05B2 E010 LDI R17,0
05B3 DE6D RCALL _FFT
(0089) while(1);
FILE: <library>
05B4 CFFF RJMP 0x05B4
05B5 9508 RET
push_arg4:
05B6 933A ST R19,-Y
05B7 932A ST R18,-Y
push_arg2:
05B8 931A ST R17,-Y
05B9 930A ST R16,-Y
05BA 9508 RET
mod16s:
05BB 9468 BSET 6
05BC 92DA ST R13,-Y
05BD 2ED1 MOV R13,R17
05BE C004 RJMP 0x05C3
div16s:
05BF 94E8 BCLR 6
05C0 92DA ST R13,-Y
05C1 2ED1 MOV R13,R17
05C2 26D3 EOR R13,R19
05C3 FF17 SBRS R17,7
05C4 C004 RJMP 0x05C9
05C5 9510 COM R17
05C6 9500 COM R16
05C7 5F0F SUBI R16,0xFF
05C8 4F1F SBCI R17,0xFF
05C9 FF37 SBRS R19,7
05CA C004 RJMP 0x05CF
05CB 9530 COM R19
05CC 9520 COM R18
05CD 5F2F SUBI R18,0xFF
05CE 4F3F SBCI R19,0xFF
05CF 940E05DC CALL xdiv16u
05D1 FED7 SBRS R13,7
05D2 C004 RJMP 0x05D7
05D3 9510 COM R17
05D4 9500 COM R16
05D5 5F0F SUBI R16,0xFF
05D6 4F1F SBCI R17,0xFF
05D7 90D9 LD R13,Y+
05D8 9508 RET
mod16u:
05D9 9468 BSET 6
05DA C001 RJMP xdiv16u
div16u:
05DB 94E8 BCLR 6
xdiv16u:
05DC 92EA ST R14,-Y
05DD 92FA ST R15,-Y
05DE 938A ST R24,-Y
05DF 24EE CLR R14
05E0 24FF CLR R15
05E1 E180 LDI R24,0x10
05E2 0F00 LSL R16
05E3 1F11 ROL R17
05E4 1CEE ROL R14
05E5 1CFF ROL R15
05E6 16E2 CP R14,R18
05E7 06F3 CPC R15,R19
05E8 F018 BCS 0x05EC
05E9 1AE2 SUB R14,R18
05EA 0AF3 SBC R15,R19
05EB 9503 INC R16
05EC 958A DEC R24
05ED F7A1 BNE 0x05E2
05EE F416 BRTC 0x05F1
05EF 2D0E MOV R16,R14
05F0 2D1F MOV R17,R15
05F1 9189 LD R24,Y+
05F2 90F9 LD R15,Y+
05F3 90E9 LD R14,Y+
05F4 9508 RET
mod8u:
05F5 9468 BSET 6
05F6 C001 RJMP xdiv8u
div8u:
05F7 94E8 BCLR 6
xdiv8u:
05F8 932A ST R18,-Y
05F9 92FA ST R15,-Y
05FA 92EA ST R14,-Y
05FB 24FF CLR R15
05FC 24EE CLR R14
05FD E120 LDI R18,0x10
05FE 0F00 LSL R16
05FF 1CFF ROL R15
0600 1CEE ROL R14
0601 16E1 CP R14,R17
0602 F010 BCS 0x0605
0603 1AE1 SUB R14,R17
0604 9503 INC R16
0605 952A DEC R18
0606 F7B9 BNE 0x05FE
0607 F40E BRTC 0x0609
0608 2D0E MOV R16,R14
0609 90E9 LD R14,Y+
060A 90F9 LD R15,Y+
060B 9129 LD R18,Y+
060C 9508 RET
empy16s:
060D 920A ST R0,-Y
060E 921A ST R1,-Y
060F 938A ST R24,-Y
0610 939A ST R25,-Y
0611 9F02 MUL R16,R18
0612 01C0 MOVW R24,R0
0613 9F12 MUL R17,R18
0614 0D90 ADD R25,R0
0615 9F03 MUL R16,R19
0616 0D90 ADD R25,R0
0617 018C MOVW R16,R24
0618 9199 LD R25,Y+
0619 9189 LD R24,Y+
061A 9019 LD R1,Y+
061B 9009 LD R0,Y+
061C 9508 RET
pop_gset2:
061D E0E2 LDI R30,2
061E 940C0632 JMP pop
pop_gset3:
0620 E0E4 LDI R30,4
0621 940C0632 JMP pop
pop_gset5:
0623 27EE CLR R30
0624 940C0632 JMP pop
push_gset5:
0626 92FA ST R15,-Y
0627 92EA ST R14,-Y
push_gset4:
0628 92DA ST R13,-Y
0629 92CA ST R12,-Y
push_gset3:
062A 92BA ST R11,-Y
062B 92AA ST R10,-Y
push_gset2:
062C 937A ST R23,-Y
062D 936A ST R22,-Y
push_gset1:
062E 935A ST R21,-Y
062F 934A ST R20,-Y
0630 9508 RET
pop_gset1:
0631 E0E1 LDI R30,1
pop:
0632 9149 LD R20,Y+
0633 9159 LD R21,Y+
0634 FDE0 SBRC R30,0
0635 9508 RET
0636 9169 LD R22,Y+
0637 9179 LD R23,Y+
0638 FDE1 SBRC R30,1
0639 9508 RET
063A 90A9 LD R10,Y+
063B 90B9 LD R11,Y+
063C FDE2 SBRC R30,2
063D 9508 RET
063E 90C9 LD R12,Y+
063F 90D9 LD R13,Y+
0640 FDE3 SBRC R30,3
0641 9508 RET
0642 90E9 LD R14,Y+
0643 90F9 LD R15,Y+
0644 9508 RET
neg32:
0645 9500 COM R16
0646 9510 COM R17
0647 9520 COM R18
0648 9530 COM R19
0649 5F0F SUBI R16,0xFF
064A 4F1F SBCI R17,0xFF
064B 4F2F SBCI R18,0xFF
064C 4F3F SBCI R19,0xFF
064D 9508 RET
lpm32:
064E 93EA ST R30,-Y
064F 93FA ST R31,-Y
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -