📄 fft32.asm
字号:
MAR *0+,AR3 ; ARP=AR3, AR3=xxxxh, AR2=&ipcb[0]+2->ipcb[2]
LAR AR3,#4 ; ARP=AR3, AR3=4
MAR *0+,AR4 ; ARP=AR4, AR4=xxxxh, AR3=&ipcb[0]+4->ipcb[4]
LAR AR4,#6 ; ARP=AR4, AR4=6
MAR *0+,AR3 ; ARP=AR3, AR3->ipcb[4], AR4=&ipcb[0]+6->ipcb[6]
MAR *,AR3 ; ARP=AR3, AR3->ipcb[4]
LAR AR0,#7h ; ARP=AR3, AR3->ipcb[4], AR0=7h
; Increment for data pointer
LAR AR7,#(N/4-1) ; Loop 32 times
STAGE1_2_LP:
COMBO
BANZ STAGE1_2_LP,*-,AR3
;------------------------------------------------------------------
; Stage 3 - Using ZEROI, PBY4I,PBY2I,P3BY4I Macros
;------------------------------------------------------------------
MAR *,AR5 ; ARP=AR5, AR5->T1
SPLK #COS45K,* ; ARP=AR5, AR5->T1, T1=COS45K
LT * ; ARP=AR5, AR5->T1, TREG=COS45K
SBRK #6 ; ARP=AR5, AR5->ipcbptr
LAR AR6,* ; ARP=AR5, AR5->ipcbptr, AR6=ipcbptr->ipcb[0], ---->P
LAR AR2,* ; ARP=AR5, AR5->ipcbptr, AR2=ipcbptr
ADRK #6 ; ARP=AR5, AR5->T1
MAR *,AR2 ; ARP=AR2, AR2=ipcbptr
ADRK #8 ; ARP=AR2, AR2=ipcbptr+8->ipcb[8], ---->Q
LAR AR0,#9h ; Increment for data pointer
LAR AR7,#(N/8-1) ; Loop 16 times
STAGE3_LP: ZEROI
PBY4I
PBY2I
P3BY4I 7,0 ; AR7 at end, Use *0+ modify
BANZ STAGE3_LP,*-,AR2
;--------------------------------------------------------------------
; Stage 4 - Using ZEROI, PBY4I,PBY2I,P3BY4I,BFLY Macros
;--------------------------------------------------------------------
MAR *,AR5 ; ARP=AR5, AR5->T1
SBRK #6 ; ARP=AR5, AR5->ipcbptr
LAR AR6,* ; ARP=AR5, AR5->ipcbptr, AR6=ipcbptr->ipcb[0], ---->P
LAR AR2,* ; ARP=AR5, AR5->ipcbptr, AR2=ipcbptr
ADRK #6 ; ARP=ARP, AR5->T1
MAR *,AR2 ; ARP=AR2, AR2=ipcbptr
ADRK #16 ; ARP=AR2, AR2=ipcbptr+16->ipcb[16], ---->Q
LAR AR0,#(N/8) ; Twiddle Factor increment
LAR AR7,#(N/16-1) ; Loop 8 Times, Group loop counter
STAGE4_LP: ZEROI
LAR AR3,#(TWID+N/16+N/4)
LAR AR4,#(TWID+N/16)
BFLY 2 ; ARP=AR2
MAR *,AR5 ; ARP=AR5, AR5->T1
SPLK #COS45K,* ; ARP=AR5, AR5->T1, T1=COS45K
LT *,AR2 ; ARP=AR2, TREG=COS45K
PBY4I
BFLY 2
PBY2I
BFLY 2
MAR *,AR5 ; ARP=AR5, AR5->T1
SPLK #COS45K,* ; ARP=AR5, AR5->T1, T1=COS45K
LT *,AR2 ; ARP=AR2, TREG=COS45K
P3BY4I 2,
BFLY 6
ADRK #16 ; Data offset
MAR *,AR2
ADRK #16 ; Data offset
MAR *,AR7
BANZ STAGE4_LP,*-,AR2
;--------------------------------------------------------
; Stage 5 to LOG2(N) - Using BFLY Macro
;--------------------------------------------------------
; Initialisation
; 1. Initialise the Butterfly loop(BLC), Group loop(GLC) & Stage loop counter(SLC)
; 2. Initialise the Data offset(DOST) and twiddle factor offset (TOST)
MAR *,AR5 ; ARP=AR5, AR5->T1
ADRK #2 ; ARP=AR5, AR5->GLCB
SPLK #(N/32),* ; ARP=AR5, AR5->GLCB, GLCB=N/8
SBRK #3 ; ARP=AR5, AR5->BLC
SPLK #16,*- ; ARP=AR5, AR5->GLC, BLC=16
SPLK #(N/32),*- ; ARP=AR5, AR5->SLC, GLC=(N/32)
SPLK #(NSTG-4),*- ; ARP=AR5, AR5->TOST, SLC=NSTG-4
SPLK #(N/32),*- ; ARP=AR5, AR5->DOST, TOST=4
SPLK #32,*- ; ARP=AR5, AR5->ipcbptr, DOST=32
SLP: ; Stage loop
LAR AR6,* ; ARP=AR5, AR5->ipcbptr, AR6=ipcbptr ------>P
LAR AR2,*+ ; ARP=AR5, AR5->DOST, AR2=ipcbptr
LAR AR0,*+,AR2 ; ARP=AR2, AR2=ipcbptr, AR5->TOST, AR0=DOST
MAR *0+,AR5 ; ARP=AR5, AR5->TOST, AR2=ipcbptr+DOST -----> Q
LAR AR0,* ; ARP=AR5, AR5->TOST, AR0=TOST
ADRK #3 ; ARP=AR5, AR5->BLC
GLP: ; Group loop
LAR AR3,#(TWID+N/4) ; COS(Angle)
LAR AR4,#(TWID) ; SIN(Angle)
LAR AR7,*+,AR7 ; ARP=AR7, AR7=BLC,AR5->T1
MAR *-,AR2 ; ARP=AR2, AR7=BLC-1
BLP: ; Butterfly loop
BFLY 7
BANZ BLP,*-,AR2
; Operations performed between the group
MAR *,AR5 ; ARP=AR5, AR5->T1
SBRK #5 ; ARP=AR5, AR5->DOST
LAR AR0,*+,AR6 ; ARP=AR6, AR0=DOST, AR5->TOST
MAR *0+,AR2 ; ARP=AR2
MAR *0+,AR5 ; ARP=AR5, AR5->TOST
LAR AR0,* ; ARP=AR5, AR5->TOST, AR0=TOST
ADRK #2 ; ARP=AR5, AR5->GLC
LACL * ; ARP=AR5, AR5->GLC, ACCL=GLC
SUB #1 ; ACCL=GLC-1
SACL *+ ; ARP=AR5, AR5->BLC, GLC=GLC-1
BCND GLP,NEQ
; Operation Performed, between the stage
SBRK #4 ; ARP=AR5, AR5->DOST
LACL * ; ARP=AR5, AR5->DOST, ACCL=DOST
SACL *+,1 ; ARP=AR5, AR5->TOST, DOST=DOST*2
LACL * ; ARP=AR5, AR5->TOST, ACCL=TOST
SFR ; ARP=AR5, AR5->TOST, ACCL=TOST/2
SACL *+ ; ARP=AR5, AR5->SLC, TOST=TOST/2
LACL * ; ARP=AR5, AR5->SLC, ACCL=SLC
SUB #1 ; ACCL=SLC-1
SACL *+ ; ARP=AR5, AR5->GLC, SLC=SLC-1
ADRK #4 ; ARP=AR5, AR5->GLCB
LACL * ; ARP=AR5, AR->GLCB, ACCL=GLCB
SFR ; ARP=AR5, AR5->GLCB, ACCL=GLCB/2
SACL * ; ARP=AR5, AR5->GLCB, GLCB=GLCB/2
SBRK #4 ; ARP=AR5, AR5->GLC
SACL *+ ; ARP=AR5, AR5->BLC, GLC=GLCB/2
LACL * ; ARP=AR5, AR5->BLC, ACCL=BLC
SACL *,1 ; ARP=AR5, AR5->BLC, BLC=BLC*2
SBRK #2 ; ARP=AR5, AR5->SLC
LACL * ; ARP=AR5, AR5->SLC, ACCL=SCL
SBRK #3 ; ARP=AR5, AR5->ipcbptr
BCND SLP,NEQ
MAR *,AR1
SBRK #(__FFT32C_calc_frs+1) ; Clear the local frame
LAR AR0,*- ; Retrive Caller's frame pointer
LAR AR7,*-
LAR AR6,*-
PSHD * ; Push the return address to TOS
RET ; Return to the caller
;第二个函数
;================================================================================
; TWIDDLE FACTOR INITIALISATION
;===============================================================================
; Twiddle factor Initialisation
_FFT32C_init:
POPD *+
LAR AR2,#TWID ; Copy the twiddle factor from ROM to RAM
LACC #TF_LOAD_STRT_ADR
MAR *,AR2
LAR AR3, #(TF_LOAD_END_ADR-TF_LOAD_STRT_ADR-1)
loop1: TBLR *+,AR3
ADD #1
BANZ loop1,*-,AR2
MAR *,AR1
SBRK #1
PSHD * ; Push the return address to TOS
RET
;第三个函数
;========================================================================
; File Name : cfft_br1c.asm
;======================================================================
__FFTC_brev1_frs .set 00002h ; Local frame size for this routine
.def _FFTC_brev1
_FFTC_brev1:
POPD *+ ; Store the Return Address in stack
SAR AR0,*+ ; Store the Caller's Frame Pointer
SAR AR7,*+
SAR AR1,*
LAR AR5,*
LAR AR0,#__FFTC_brev1_frs
LAR AR0,*0+,AR2 ; Create Local frame
LAR AR2,#0FFFCh ; ARP=AR2, AR2=-4
MAR *0+ ; ARP=AR2, AR2->src
LAR AR0,* ; ARP=AR2, AR2->src, AR0=src
LAR AR3,*- ; ARP=AR2, AR2->dst, AR3=src
LAR AR4,*-,AR4 ; ARP=AR4, AR4=dst, AR2->size
CMPR 0 ; Check src==dst
BCND OFFBREV,NTC ; If not equal, jump to off place bit rev
MAR *,AR2 ; ARP=AR2, AR2->size
LACL *+,AR5 ; ARP=AR5, AR5=FP, AR2->dst, ACCL=size
SFR ; ARP=AR5, AR5=FP, ACCL=size/2
SACL * ; ARP=AR5, (FP)=size/2
LAR AR7,*+,AR7 ; ARP=AR7, AR7=size/2, AR5->temp
MAR *-,AR3 ; ARP=AR3, AR3=src, AR7=(size/2)-1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -