📄 fftasm2.asm
字号:
//extern void fftasm2(int ,complex_fract16 x_fft[],complex_fract16 h_fft[],complex_fract16 yr_fft[]);
//P1,P4 -> x_fft P2,P5 -> h_fft, P0,P3->yr_fft
/*for(i=0;i<N;i++)
{
yr_fft[i] = cmlt_fr16(x_fft[i],h_fft[i]);
yr_fft[i].re <<=8;
yr_fft[i].im <<=8;
}*/
/*
typedef struct
{
fract16 re;
fract16 im;
} complex_fract16;
*/
.section program;
.global _fftasm2;
.align 8;
_fftasm2:
[--SP] = (R7:4,P5:3);
LC0 = R0; //FOR INITIALIZE LCn
P0 = [SP+40];
R3 = [SP+40];
P1 = R1; //ADDRESS OF x_fft
R1 +=2;
R3+=2;
P2 = R2; //H_FFT
R2 +=2;
P3 = R3;
P4 = R1;
P5 = R2;
nop;nop;
LSETUP(_FFT_ASM2_START,_FFT_ASM2_END) LC0;
_FFT_ASM2_START:
R0.L = W[P1];
P1+=4;
//R0.L = R0.L<<4;//
R1.L = W[P2];
P2+=4;
// R1.L = R1.L<<4;//
R3.L = R0.L*R1.L;
R0.H = W[P4];
P4+=4;
// R0.H = R0.H<<4;
R4.H = R0.H*R1.L;
R1.H = W[P5];
// R1.H = R1.H<<4;
P5+=4;
R3.H = R0.H*R1.H;
R4.L = R0.L*R1.H;
R5.L = R3.L-R3.H(S);
R5.H = R4.L+R4.H(S);
R5.L=R5.L<<4;
R5.H=R5.H<<4;
W[P0]= R5.L;
P0+=4;
W[P3] = R5.H;
P3+=4;
_FFT_ASM2_END:
NOP;
(R7:4,P5:3)=[SP++];
RTS;
._fftasm2.end:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -