📄 c4_6_3.asm
字号:
.WORD 00C9A4H, 0079D4H, 00C23CH, 0035DBH, 0086AFH, 003D3FH
.WORD 00CAABH, 0078CAH, 00C34AH, 0034CAH, 0087C3H, 003C28H
.WORD 00CBC6H, 0077ABH, 00C46BH, 0033A5H, 0088EBH, 003AFDH
.WORD 00CCF4H, 00767AH, 00C5A0H, 00326DH, 008A26H, 0039BEH
.WORD 00CE36H, 007535H, 00C6E8H, 003122H, 008B75H, 00386DH
.WORD 00CF8BH, 0073DDH, 00C843H, 002FC4H, 008CD6H, 003708H
.WORD 00D0F2H, 007273H, 00C9B1H, 002E54H, 008E49H, 003592H
.WORD 00D26BH, 0070F6H, 00CB30H, 002CD1H, 008FCFH, 00340AH
.WORD 00D3F7H, 006F68H, 00CCC1H, 002B3DH, 009166H, 003270H
.WORD 00D593H, 006DC8H, 00CE64H, 002998H, 00930EH, 0030C5H
.WORD 00D741H, 006C18H, 00D017H, 0027E2H, 0094C7H, 002F09H
.WORD 00D900H, 006A57H, 00D1DBH, 00261BH, 009690H, 002D3DH
.WORD 00DACEH, 006885H, 00D3AFH, 002444H, 009869H, 002B61H
.WORD 00DCADH, 0066A4H, 00D593H, 00225EH, 009A52H, 002976H
.WORD 00DE9BH, 0064B4H, 00D785H, 002069H, 009C4AH, 00277CH
.WORD 00E097H, 0062B5H, 00D987H, 001E65H, 009E50H, 002573H
.WORD 00E2A2H, 0060A8H, 00DB96H, 001C54H, 00A064H, 00235DH
.WORD 00E4BAH, 005E8DH, 00DDB3H, 001A34H, 00A285H, 002139H
.WORD 00E6E0H, 005C65H, 00DFDDH, 001808H, 00A4B4H, 001F09H
.WORD 00E913H, 005A31H, 00E214H, 0015CFH, 00A6EEH, 001CCCH
.WORD 00EB51H, 0057F0H, 00E456H, 00138BH, 00A935H, 001A84H
.WORD 00ED9CH, 0055A4H, 00E6A4H, 00113BH, 00AB86H, 001831H
.WORD 00EFF1H, 00534DH, 00E8FDH, 000EE1H, 00ADE2H, 0015D3H
.WORD 00F250H, 0050ECH, 00EB60H, 000C7CH, 00B049H, 00136BH
.WORD 00F4BAH, 004E81H, 00EDCCH, 000A0EH, 00B2B8H, 0010FAH
.WORD 00F72CH, 004C0DH, 00F042H, 000797H, 00B531H, 000E80H
.WORD 00F9A7H, 004990H, 00F2C0H, 000518H, 00B7B1H, 000BFEH
.WORD 00FC2BH, 00470CH, 00F545H, 000291H, 00BA39H, 000975H
.WORD 00FEB5H, 004480H, 00F7D2H, 000003H
data_output .usect "data_out",1024
.text
.asg AR1,FFT_TWID_P
MAIN:
LD #FFT_DP,DP
STM #SYSTEM_STACK,SP
rfft_task:
STM #FFT_ORIGIN,AR3
STM #data_input,AR4
RPT #K_FFT_SIZE*2-1
MVDD *AR4+,*AR3+
CALL bit_rev
CALL fft
CALL unpack
CALLD power
STM #K_ST1,ST1
NOP
STM 19FAH,AR6
NOP
XOR A,A
NOP
;RPT #10
STL A,*AR6+
STL A,*AR6+
STL A,*AR6+
STL A,*AR6+
STL A,*AR6+
STL A,*AR6+
STL A,*AR6+
STL A,*AR6+
STL A,*AR6+
STL A,*AR6+
STL A,*AR6+
;CALL find
loop:
B loop
NOP
NOP
NOP
RET
.asg AR2,REORDERED_DATA
.asg AR3,ORIGINAL_INPUT
.asg AR7,DATA_PROC_BUF
.def bit_rev
bit_rev:
SSBX FRCT
STM #FFT_ORIGIN,ORIGINAL_INPUT
STM #fft_data,DATA_PROC_BUF
MVMM DATA_PROC_BUF,REORDERED_DATA
STM #K_FFT_SIZE-1,BRC
RPTBD bit_rev_end-1
STM #K_FFT_SIZE,AR0
MVDD *ORIGINAL_INPUT+,*REORDERED_DATA+
MVDD *ORIGINAL_INPUT-,*REORDERED_DATA+
MAR *ORIGINAL_INPUT+0B
bit_rev_end:
RET
.asg AR1,GROUP_COUNTER
.asg AR2,PX
.asg AR3,QX
.asg AR4,WR
.asg AR5,WI
.asg AR6,BUTTERFLY_COUNTER
.asg AR7,DATA_PROC_BUF
.asg AR7,STAGE_COUNTER
.def fft
fft:
STM #K_ZERO_BK,BK
LD #-1,ASM
MVMM DATA_PROC_BUF,PX
LD *PX,A
STM #fft_data+K_DATA_IDX_1,QX
STM #K_FFT_SIZE/2-1,BRC
RPTBD stage1end-1
STM #K_DATA_IDX_1+1,AR0
SUB *QX,16,A,B
ADD *QX,16,A
STH A,ASM,*PX+
ST B,*QX+
||LD *PX,A
SUB *QX,16,A,B
ADD *QX,16,A
STH A,ASM,*PX+0
ST B,*QX+0%
||LD *PX,A
stage1end:
MVMM DATA_PROC_BUF,PX
STM #fft_data+K_DATA_IDX_2,QX
STM #K_FFT_SIZE/4-1,BRC
LD *PX,A
RPTBD stage2end-1
STM #K_DATA_IDX_2+1,AR0
SUB *QX,16,A,B
ADD *QX,16,A
STH A,ASM,*PX+
ST B,*QX+
||LD *PX,A
SUB *QX,16,A,B
ADD *QX,16,A
STH A,ASM,*PX+
STH B,ASM,*QX+
MAR *QX+
ADD *PX,*QX,A
SUB *PX,*QX-,B
STH A,ASM,*PX+
SUB *PX,*QX,A
ST B,*QX
||LD *QX+,B
ST A, *PX
||ADD *PX+0%,A
ST A,*QX+0%
||LD *PX,A
stage2end:
STM #K_TWID_TBL_SIZE,BK
ST #K_TWID_IDX_3,d_twid_idx
STM #K_TWID_IDX_3,AR0
STM #cosine,WR
STM #sine,WI
STM #K_LOGN-2-1,STAGE_COUNTER
ST #K_FFT_SIZE/8-1,d_grps_cnt
STM #K_FLY_COUNT_3-1,BUTTERFLY_COUNTER
ST #K_DATA_IDX_3,d_data_idx
stage:
STM #fft_data,PX
LD d_data_idx, A
ADD *(PX),A
STLM A,QX
MVDK d_grps_cnt,GROUP_COUNTER
group:
MVMD BUTTERFLY_COUNTER,BRC
RPTBD butterflyend-1
LD *WR,T
MPY *QX+,A
MACR *WI+0%,*QX-,A
ADD *PX,16,A,B
ST B,*PX
||SUB *PX+,B
ST B,*QX
||MPY *QX+,A
MASR *QX,*WR+0%,A
ADD *PX,16,A,B
ST B,*QX+
||SUB *PX,B
LD *WR,T
ST B,*PX+
||MPY *QX+,A
butterflyend:
PSHM AR0
MVDK d_data_idx,AR0
MAR *PX+0
MAR *QX+0
BANZD group,*GROUP_COUNTER-
POPM AR0
MAR *QX-
LD d_data_idx,A
SUB #1,A,B
STLM B,BUTTERFLY_COUNTER
STL A,1,d_data_idx
LD d_grps_cnt,A
STL A,ASM,d_grps_cnt
LD d_twid_idx,A
STL A,ASM,d_twid_idx
BANZD stage,*STAGE_COUNTER-
MVDK d_twid_idx,AR0
fft_end:
RET
.def unpack
unpack:
.asg AR2,XP_k
.asg AR3,XP_Nminusk
.asg AR6,XM_k
.asg AR7,XM_Nminusk
STM #fft_data+2,XP_k
STM #fft_data+2*K_FFT_SIZE-2,XP_Nminusk
STM #fft_data+2*K_FFT_SIZE+3,XM_Nminusk
STM #fft_data+4*K_FFT_SIZE-1,XM_k
STM #-2+K_FFT_SIZE/2,BRC
RPTBD phase3end-1
STM #3,AR0
ADD *XP_k,*XP_Nminusk,A
SUB *XP_k,*XP_Nminusk,B
STH A,ASM,*XP_k+
STH A,ASM,*XP_Nminusk+
STH B,ASM,*XM_k-
NEG B
STH B,ASM,*XM_Nminusk-
ADD *XP_k,*XP_Nminusk,A
SUB *XP_k,*XP_Nminusk,B
STH A,ASM,*XP_k+
STH A,ASM,*XP_Nminusk-0
STH B,ASM,*XM_k-
NEG B
STH B,ASM,*XM_Nminusk+0
phase3end:
ST #0,*XM_k-
ST #0,*XM_k
; 计算AR[0],AI[0], AR[N], AI[N]
.asg AR2,AX_k
.asg AR4,IP_0
.asg AR5,AX_N
STM #fft_data,AX_k
STM #fft_data+1,IP_0
STM #fft_data+2*K_FFT_SIZE+1,AX_N
ADD *AX_k,*IP_0,A
SUB *AX_k,*IP_0,B
STH A,ASM,*AX_k+
ST #0,*AX_k
MVDD *AX_k+,*AX_N-
STH B,ASM,*AX_N
.asg AR3,AX_2Nminusk
.asg AR4,COS
.asg AR5,SIN
STM #fft_data+4*K_FFT_SIZE-1,AX_2Nminusk
STM #cosine+K_TWID_TBL_SIZE/K_FFT_SIZE,COS
STM #sine+K_TWID_TBL_SIZE/K_FFT_SIZE,SIN
STM #K_FFT_SIZE-2,BRC
RPTBD phase4end-1
STM #K_TWID_TBL_SIZE/K_FFT_SIZE,AR0
LD *AX_k+,16,A
MACR *COS,*AX_k,A
MASR *SIN,*AX_2Nminusk-,A
LD *AX_2Nminusk+,16,B
MASR *SIN+0%,*AX_k-,B
MASR *COS+0%,*AX_2Nminusk,B
STH A,ASM,*AX_k+
STH B,ASM,*AX_k+
NEG B
STH B,ASM,*AX_2Nminusk-
STH A,ASM,*AX_2Nminusk-
phase4end:
RET
.asg AR2,AX
.asg AR3,OUTPUT_BUF
.def power
power:
STM #data_output,OUTPUT_BUF
STM #K_FFT_SIZE*2-1,BRC
RPTBD power_end-1
STM #fft_data,AX
SQUR *AX+,A
SQURA *AX+,A
STH A,*OUTPUT_BUF+
power_end:
RET
.def find
.asg AR2,POWER
.asg AR3,STORE
.asg AR4,INDEX
find:
STM #data_output,POWER
STM #data_find,STORE
STM #data_index,INDEX
LD #0,A
LD #0,B
STL A,*STORE
STM #K_FFT_SIZE*2-1,BRC
RPTB find_end-1
SUB *POWER,*STORE,A
BC next,ALEQ
MVDD *POWER,*STORE
STL B,*INDEX
next:
MAR *POWER+
ADD #1,B
find_end:
RET
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -