📄 fftbook.lis
字号:
055E 0A93 st -y,R16
0560 9A92 st -y,R9
0562 8A92 st -y,R8
0564 7A92 st -y,R7
0566 6A92 st -y,R6
0568 0E940000 xcall empy32fs
056C 0E940000 xcall sub32f
0570 0E940000 xcall fp2int
0574 FC01 movw R30,R24
0576 1183 std z+1,R17
0578 0083 std z+0,R16
057A .dbline 37
057A ; dataI[k+b]=TI+temp*sin(2*PI*p/16)-dataI[k+b]*cos(2*PI*p/16);
057A 00E0 ldi R16,<L3
057C 10E0 ldi R17,>L3
057E 0E940000 xcall lpm32
0582 3A93 st -y,R19
0584 2A93 st -y,R18
0586 1A93 st -y,R17
0588 0A93 st -y,R16
058A 00914600 lds R16,_p
058E 10914700 lds R17,_p+1
0592 0E940000 xcall int2fp
0596 3A93 st -y,R19
0598 2A93 st -y,R18
059A 1A93 st -y,R17
059C 0A93 st -y,R16
059E 0E940000 xcall empy32fs
05A2 00E0 ldi R16,<L4
05A4 10E0 ldi R17,>L4
05A6 0E940000 xcall lpm32
05AA 3A93 st -y,R19
05AC 2A93 st -y,R18
05AE 1A93 st -y,R17
05B0 0A93 st -y,R16
05B2 0E940000 xcall div32f
05B6 0E940000 xcall _sin
05BA 1801 movw R2,R16
05BC 2901 movw R4,R18
05BE 00E0 ldi R16,<L3
05C0 10E0 ldi R17,>L3
05C2 0E940000 xcall lpm32
05C6 3A93 st -y,R19
05C8 2A93 st -y,R18
05CA 1A93 st -y,R17
05CC 0A93 st -y,R16
05CE 00914600 lds R16,_p
05D2 10914700 lds R17,_p+1
05D6 0E940000 xcall int2fp
05DA 3A93 st -y,R19
05DC 2A93 st -y,R18
05DE 1A93 st -y,R17
05E0 0A93 st -y,R16
05E2 0E940000 xcall empy32fs
05E6 00E0 ldi R16,<L4
05E8 10E0 ldi R17,>L4
05EA 0E940000 xcall lpm32
05EE 3A93 st -y,R19
05F0 2A93 st -y,R18
05F2 1A93 st -y,R17
05F4 0A93 st -y,R16
05F6 0E940000 xcall div32f
05FA 2F92 push R2
05FC 3F92 push R3
05FE 4F92 push R4
0600 5F92 push R5
0602 0E940000 xcall _cos
0606 5F90 pop R5
0608 4F90 pop R4
060A 3F90 pop R3
060C 2F90 pop R2
060E 3801 movw R6,R16
0610 4901 movw R8,R18
0612 00E0 ldi R16,<L5
0614 10E0 ldi R17,>L5
0616 0E940000 xcall lpm32
061A 3A93 st -y,R19
061C 2A93 st -y,R18
061E 1A93 st -y,R17
0620 0A93 st -y,R16
0622 00912200 lds R16,_TI
0626 10912300 lds R17,_TI+1
062A 1695 lsr R17
062C 0795 ror R16
062E 0E940000 xcall int2fp
0632 3A93 st -y,R19
0634 2A93 st -y,R18
0636 1A93 st -y,R17
0638 0A93 st -y,R16
063A 0E940000 xcall empy32fs
063E 00912200 lds R16,_TI
0642 10912300 lds R17,_TI+1
0646 0170 andi R16,1
0648 1070 andi R17,0
064A 0E940000 xcall int2fp
064E 3A93 st -y,R19
0650 2A93 st -y,R18
0652 1A93 st -y,R17
0654 0A93 st -y,R16
0656 0E940000 xcall add32fs
065A 00E0 ldi R16,<L5
065C 10E0 ldi R17,>L5
065E 0E940000 xcall lpm32
0662 3A93 st -y,R19
0664 2A93 st -y,R18
0666 1A93 st -y,R17
0668 0A93 st -y,R16
066A 00912000 lds R16,_temp
066E 10912100 lds R17,_temp+1
0672 1695 lsr R17
0674 0795 ror R16
0676 0E940000 xcall int2fp
067A 3A93 st -y,R19
067C 2A93 st -y,R18
067E 1A93 st -y,R17
0680 0A93 st -y,R16
0682 0E940000 xcall empy32fs
0686 00912000 lds R16,_temp
068A 10912100 lds R17,_temp+1
068E 0170 andi R16,1
0690 1070 andi R17,0
0692 0E940000 xcall int2fp
0696 3A93 st -y,R19
0698 2A93 st -y,R18
069A 1A93 st -y,R17
069C 0A93 st -y,R16
069E 0E940000 xcall add32fs
06A2 5A92 st -y,R5
06A4 4A92 st -y,R4
06A6 3A92 st -y,R3
06A8 2A92 st -y,R2
06AA 0E940000 xcall empy32fs
06AE 0E940000 xcall add32fs
06B2 20904800 lds R2,_b
06B6 30904900 lds R3,_b+1
06BA 20914A00 lds R18,_k
06BE 30914B00 lds R19,_k+1
06C2 220D add R18,R2
06C4 331D adc R19,R3
06C6 02E0 ldi R16,2
06C8 10E0 ldi R17,0
06CA 0E940000 xcall empy16s
06CE F801 movw R30,R16
06D0 80E0 ldi R24,<_dataI
06D2 90E0 ldi R25,>_dataI
06D4 E80F add R30,R24
06D6 F91F adc R31,R25
06D8 0081 ldd R16,z+0
06DA 1181 ldd R17,z+1
06DC 0E940000 xcall int2fp
06E0 3A93 st -y,R19
06E2 2A93 st -y,R18
06E4 1A93 st -y,R17
06E6 0A93 st -y,R16
06E8 9A92 st -y,R9
06EA 8A92 st -y,R8
06EC 7A92 st -y,R7
06EE 6A92 st -y,R6
06F0 0E940000 xcall empy32fs
06F4 0E940000 xcall sub32f
06F8 0E940000 xcall fp2int
06FC 1801 movw R2,R16
06FE 40904800 lds R4,_b
0702 50904900 lds R5,_b+1
0706 20914A00 lds R18,_k
070A 30914B00 lds R19,_k+1
070E 240D add R18,R4
0710 351D adc R19,R5
0712 02E0 ldi R16,2
0714 10E0 ldi R17,0
0716 0E940000 xcall empy16s
071A F801 movw R30,R16
071C 80E0 ldi R24,<_dataI
071E 90E0 ldi R25,>_dataI
0720 E80F add R30,R24
0722 F91F adc R31,R25
0724 3182 std z+1,R3
0726 2082 std z+0,R2
0728 .dbline -2
0728 L2:
0728 .dbline 0 ; func end
0728 0895 ret
072A .dbend
072A .dbfunc e FFT _FFT fV
072A ; dataI -> R20,R21
072A ; dataR -> R22,R23
.even
072A _FFT::
072A 0E940000 xcall push_gset3
072E A901 movw R20,R18
0730 B801 movw R22,R16
0732 .dbline -1
0732 .dbline 46
0732 ;
0732 ; /*dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p];
0732 ; dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p];
0732 ; dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p];
0732 ; dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p];*/
0732 ;
0732 ; }
0732 ; void FFT(int dataR[],int dataI[])
0732 ; {
0732 .dbline 48
0732 ; // 以下是数据掉头功能
0732 ; for(i = 0 ; i < 16 ; i++)
0732 2224 clr R2
0734 3324 clr R3
0736 30924F00 sts _i+1,R3
073A 20924E00 sts _i,R2
073E L7:
073E .dbline 49
073E .dbline 50
073E 60DC xcall _CHANGE
0740 .dbline 51
0740 L8:
0740 .dbline 48
0740 80914E00 lds R24,_i
0744 90914F00 lds R25,_i+1
0748 0196 adiw R24,1
074A 90934F00 sts _i+1,R25
074E 80934E00 sts _i,R24
0752 .dbline 48
0752 8031 cpi R24,16
0754 E0E0 ldi R30,0
0756 9E07 cpc R25,R30
0758 94F3 brlt L7
075A .dbline 52
075A ; {
075A ; CHANGE ( ) ;
075A ; }
075A ; for(i=0;i<16;i++)
075A 2224 clr R2
075C 3324 clr R3
075E 30924F00 sts _i+1,R3
0762 20924E00 sts _i,R2
0766 L11:
0766 .dbline 53
0766 .dbline 54
0766 20914E00 lds R18,_i
076A 30914F00 lds R19,_i+1
076E 02E0 ldi R16,2
0770 10E0 ldi R17,0
0772 0E940000 xcall empy16s
0776 F801 movw R30,R16
0778 E40F add R30,R20
077A F51F adc R31,R21
077C 2080 ldd R2,z+0
077E 3180 ldd R3,z+1
0780 F801 movw R30,R16
0782 E60F add R30,R22
0784 F71F adc R31,R23
0786 3182 std z+1,R3
0788 2082 std z+0,R2
078A .dbline 54
078A 20914E00 lds R18,_i
078E 30914F00 lds R19,_i+1
0792 02E0 ldi R16,2
0794 10E0 ldi R17,0
0796 0E940000 xcall empy16s
079A F801 movw R30,R16
079C E40F add R30,R20
079E F51F adc R31,R21
07A0 2224 clr R2
07A2 3324 clr R3
07A4 3182 std z+1,R3
07A6 2082 std z+0,R2
07A8 .dbline 55
07A8 L12:
07A8 .dbline 52
07A8 80914E00 lds R24,_i
07AC 90914F00 lds R25,_i+1
07B0 0196 adiw R24,1
07B2 90934F00 sts _i+1,R25
07B6 80934E00 sts _i,R24
07BA .dbline 52
07BA 8031 cpi R24,16
07BC E0E0 ldi R30,0
07BE 9E07 cpc R25,R30
07C0 94F2 brlt L11
07C2 .dbline 57
07C2 ; {
07C2 ; dataR[i]=dataI[i]; dataI[i]=0;
07C2 ; }
07C2 ; // FFT算法
07C2 ; for(L=1;L<=4;L++) // 第一层循环
07C2 81E0 ldi R24,1
07C4 90E0 ldi R25,0
07C6 90935100 sts _L+1,R25
07CA 80935000 sts _L,R24
07CE L15:
07CE .dbline 58
07CE ; {
07CE .dbline 59
07CE ; b=1; i=L-1;
07CE 81E0 ldi R24,1
07D0 90E0 ldi R25,0
07D2 90934900 sts _b+1,R25
07D6 80934800 sts _b,R24
07DA .dbline 59
07DA 80915000 lds R24,_L
07DE 90915100 lds R25,_L+1
07E2 0197 sbiw R24,1
07E4 90934F00 sts _i+1,R25
07E8 80934E00 sts _i,R24
07EC 15C0 xjmp L20
07EE L19:
07EE .dbline 61
07EE .dbline 62
07EE 20914800 lds R18,_b
07F2 30914900 lds R19,_b+1
07F6 02E0 ldi R16,2
07F8 10E0 ldi R17,0
07FA 0E940000 xcall empy16s
07FE 10934900 sts _b+1,R17
0802 00934800 sts _b,R16
0806 .dbline 62
0806 80914E00 lds R24,_i
080A 90914F00 lds R25,_i+1
080E 0197 sbiw R24,1
0810 90934F00 sts _i+1,R25
0814 80934E00 sts _i,R24
0818 .dbline 63
0818 L20:
0818 .dbline 60
0818 ; while(i>0)
0818 2224 clr R2
081A 3324 clr R3
081C 40904E00 lds R4,_i
0820 50904F00 lds R5,_i+1
0824 2414 cp R2,R4
0826 3504 cpc R3,R5
0828 14F3 brlt L19
082A .dbline 64
082A ; {
082A ; b=b*2; i--;
082A ; }
082A ; for(j=0;j<=b-1;j++) // 第二层循环
082A 30924D00 sts _j+1,R3
082E 20924C00 sts _j,R2
0832 6BC0 xjmp L25
0834 L22:
0834 .dbline 65
0834 ; {
0834 .dbline 66
0834 ; p=1; i=4-L;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -