?? df2.pas
字號(hào):
unit df2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Button2: TButton;
SaveDialog1: TSaveDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,n,m:integer;
sin1:real;
// Filename:string;
f:textfile;
begin
m:=strtoint(Edit1.Text);
n:=1;
for i:=1 to m do n:=2*n;
if SaveDialog1.Execute then
begin
// Filename:=ExtractFilePath(Application.ExeName)+'2-DIT-FFT.ASM';
Assignfile(f,SaveDialog1.FileName);
Rewrite(f);
Writeln(f,'*');
Writeln(f,'* TITL COMPLEX, RADIX-2, FFT');
Writeln(f,'*');
Writeln(f,'* GENERIC PROGRAM TO DO A RADIX-2 COMPLEX FFT COMPUTATION IN TMS320C30');
Writeln(f,'*');
Writeln(f,'* THE COMPLEX DATA RESIDE IN INTERNAL MEMORY. THE COMPUTATION IS DONE');
Writeln(f,'* IN-PLACE,BUT THE RESULT IS MOVED TO ANOTHER MEMORY SECTION TO DEMONSTRATE');
Writeln(f,'* THE BIT-REVERSED ADDRESSING.');
Writeln(f,'*');
Writeln(f,'* THE TWIDDLE FACTORS ARE SUPPLIED IN A TABLE PUT IN A .DATA SECTION.');
Writeln(f,'* THIS DATA IS INCLUDED IN A SEPARATE FILE TO PRESERVE THE GENERIC');
Writeln(f,'* NATURE OF THE PROGRAM. FOR THE SAME PURPOSE,THE SIZE OF THE FFT N');
Writeln(f,'* AND LOG2(N) ARE DEFINED IN A .GLOBL DIRECTIVE AND SPECIFIED DURING LINKING.');
Writeln(f,'*');
Writeln(f,'*');
Writeln(f,' .globl FFT ; Entry point for execution');
Writeln(f,' .globl N ; FFT size');
Writeln(f,' .globl M ; LOG2(N)');
Writeln(f,' .globl SINE ; Address of sine table');
Writeln(f);
Writeln(f,'INP .usect "IN",',n*8,' ; Memory with input data');
Writeln(f,' .BSS OUTP,',n*8,' ; Memory with output data');
Writeln(f);
Writeln(f,' .text');
Writeln(f);
Writeln(f,'* INITIALIZE');
Writeln(f);
Writeln(f,'FFTSIZ .word N');
Writeln(f,'LOGFFT .word M');
Writeln(f,'SINTAB .word SINE');
Writeln(f,'INPUT .word INP');
Writeln(f,'OUTPUT .word OUTP');
Writeln(f);
Writeln(f,'FFT: LDP FFTSIZ ; Command to load data page pointer');
Writeln(f,' LDI @FFTSIZ,IR1');
Writeln(f,' LSH -2,IR1 ;');
Writeln(f,' LDI 0,AR6');
Writeln(f,' LDI @FFTSIZ,IR0');
Writeln(f,' LSH 1,IR0');
Writeln(f,' LDI @FFTSIZ,R7');
Writeln(f,' LDI 1,AR7');
Writeln(f,' LDI 1,AR5');
Writeln(f);
Writeln(f,'* OUTER LOOP');
Writeln(f);
Writeln(f,'LOOP: NOP *++AR6(1) ; Current FFT stage');
Writeln(f,' LDI @INPUT,AR0 ; AR0 points to X(I)');
Writeln(f,' ADDI R7,AR0,AR2 ; AR2 points to X(L)');
Writeln(f,' LDI AR7,RC');
Writeln(f,' SUBI 1,RC ; RC should be one less than desired #');
Writeln(f);
Writeln(f,'* FIRST LOOP');
Writeln(f);
Writeln(f,' RPTB BLK1');
Writeln(f,' ADDF *AR0,*AR2,R0 ; R0=X(I)+X(L)');
Writeln(f,' SUBF *AR2++,*AR0++,R1');
Writeln(f,' ADDF *AR2,*AR0,R2');
Writeln(f,' SUBF *AR2,*AR0,R3');
Writeln(f,' STF R2,*AR0--');
Writeln(f,'|| STF R3,*AR2--');
Writeln(f,'BLK1 STF R0,*AR0++(IR0)');
Writeln(f,'|| STF R1,*AR2++(IR0)');
Writeln(f);
Writeln(f,'*');
Writeln(f);
Writeln(f);
Writeln(f,' CMPI @LOGFFT,AR6');
Writeln(f,' BZD END');
Writeln(f);
Writeln(f,'* MAIN INNER LOOP');
Writeln(f);
Writeln(f,' LDI 2,AR1');
Writeln(f,' LDI @SINTAB,AR4');
Writeln(f,'INLOP: ADDI AR5,AR4');
Writeln(f,' LDI AR1,AR0');
Writeln(f,' ADDI 2,AR1');
Writeln(f,' ADDI @INPUT,AR0');
Writeln(f,' ADDI R7,AR0,AR2');
Writeln(f,' LDI AR7,RC');
Writeln(f,' SUBI 1,RC');
Writeln(f,' LDF *AR4,R6');
Writeln(f);
Writeln(f,'* SECOND LOOP');
Writeln(f);
Writeln(f,' RPTB BLK2');
Writeln(f,' SUBF *AR2,*AR0,R2');
Writeln(f,' SUBF *+AR2,*+AR0,R1');
Writeln(f,'*');
Writeln(f,' MPYF R2,R6,R0');
Writeln(f,'|| ADDF *+AR2,*+AR0,R3');
Writeln(f,'*');
Writeln(f,' MPYF R1,*+AR4(IR1),R3');
Writeln(f,'|| STF R3,*+AR0');
Writeln(f,' SUBF R0,R3,R4');
Writeln(f,' MPYF R1,R6,R0');
Writeln(f,'|| ADDF *AR2,*AR0,R3');
Writeln(f,' MPYF R2,*+AR4(IR1),R3');
Writeln(f,'|| STF R3,*AR0++(IR0)');
Writeln(f,'*');
Writeln(f,' ADDF R0,R3,R5');
Writeln(f,'BLK2 STF R5,*AR2++(IR0)');
Writeln(f,' STF R4,*+AR2');
Writeln(f);
Writeln(f,' CMPI R7,AR1');
Writeln(f,' BNE INLOP');
Writeln(f);
Writeln(f,' LSH 1,AR7');
Writeln(f);
Writeln(f,' BRD LOOP');
Writeln(f,' LSH 1,AR5');
Writeln(f,' LDI R1,IR0');
Writeln(f,' LSH -1,R7');
Writeln(f,'* STORE RESULT OUT USING BIT-REVERSED ADDRESSING');
Writeln(f);
Writeln(f,'END: LDI @FFTSIZ,RC');
Writeln(f,' SUBI 1,RC');
Writeln(f,' LDI @FFTSIZ,IR0');
Writeln(f,' LDI 2,IR1');
Writeln(f,' LDI @INPUT,AR0');
Writeln(f,' LDI @OUTPUT,AR1');
Writeln(f,' RPTB BITRV');
Writeln(f,' LDF *+AR0(1),R0');
Writeln(f,'|| LDF *AR0++(IR0)B,R1');
Writeln(f,'BITRV STF R0,*+AR1(1)');
Writeln(f,'|| STF R1,*AR1++(IR1)');
Writeln(f);
Writeln(f,'SELF BR SELF');
Writeln(f,' .end');
Writeln(f,'*');
Writeln(f,'*TITL TABLE WITH TWIDDLE FACTORS FOR A ',n,'-POINT FFT');
Writeln(f,'*');
Writeln(f,'* FILE TO BE LINKED WITH THE SOURCE CODE FOR A ',n,'-POINT,RADIX-2 FFT.');
for i:=0 to 2 do Writeln(f);
Writeln(f,' .globl SINE');
Writeln(f,' .globl N');
Writeln(f,' .globl M');
Writeln(f);
Writeln(f,'N .set ',n);
Writeln(f,'M .set ',m);
Writeln(f);
Writeln(f,' .data');
Writeln(f);
Writeln(f,'SINE');
j:=round(n/4-1);
for i:=0 to j do
begin
sin1:=sin(2*i*pi/n);
Writeln(f,' .float ',sin1:1:6);
end;
Writeln(f,'COSINE');
for i:=j to n-1 do
begin
sin1:=sin(2*i*pi/n);
Writeln(f,' .float ',sin1:1:6);
end;
Closefile(f);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
end.
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -