?? fft.asm
字號(hào):
.title "FFT.asm"
.mmregs
.global _MFFT
.text
sine1: .sect "sine1"
.word 0 ,201 ,402 ,603
.word 804 ,1005 ,1205 ,1407
.word 1607 ,1808 ,2009 ,2210
.word 2410 ,2611 ,2811 ,3011
.word 3211 ,3411 ,3611 ,3811
.word 4011 ,4210 ,4409 ,4609
.word 4808 ,5006 ,5205 ,5403
.word 5602 ,5800 ,5997 ,6195
.word 6392 ,6589 ,6786 ,6983
.word 7179 ,7375 ,7571 ,7766
.word 7961 ,8156 ,8351 ,8545
.word 8739 ,8933 ,9126 ,9319
.word 9512 ,9704 ,9896 ,10087
.word 10278,10469,10659,10849
.word 11039,11228,11416,11605
.word 11793,11980,12167,12353
.word 12539,12725,12910,13094
.word 13278,13462,13645,13828
.word 14010,14191,14372,14552
.word 14732,14912,15090,15269
.word 15446,15623,15800,15976
.word 16151,16325,16499,16673
.word 16846,17018,17189,17360
.word 17530,17700,17869,18037
.word 18204,18371,18537,18703
.word 18868,19032,19195,19358
.word 19519,19681,19841,20001
.word 20159,20318,20475,20631
.word 20787,20942,21097,21250
.word 21403,21555,21706,21856
.word 22005,22154,22301,22448
.word 22594,22740,22884,23027
.word 23170,23312,23453,23593
.word 23732,23870,24007,24144
.word 24279,24414,24547,24680
.word 24812,24943,25073,25201
.word 25330,25457,25583,25708
.word 25832,25955,26077,26199
.word 26319,26438,26557,26674
.word 26790,26905,27020,27133
.word 27245,27356,27466,27576
.word 27684,27791,27897,28002
.word 28511,28609,28707,28803
.word 28898,28993,29086,29178
.word 29269,29359,29447,29535
.word 29621,29707,29791,29874
.word 29956,30037,30117,30196
.word 30273,30350,30425,30499
.word 30572,30644,30714,30784
.word 30852,30919,30985,31050
.word 31114,31176,31237,31298
.word 31357,31414,31471,31526
.word 31581,31634,31685,31736
.word 31785,31834,31881,31927
.word 31971,32015,32057,32098
.word 32138,32176,32214,32250
.word 32285,32319,32351,32383
.word 32413,32442,32469,32496
.word 32521,32545,32568,32589
.word 32610,32629,32647,32663
.word 32679,32693,32706,32718
.word 32728,32737,32745,32752
.word 32758,32762,32765,32767
.word 32767,32767,32765,32762
.word 32758,32752,32745,32737
.word 32728,32718,32706,32693
.word 32679,32663,32647,32629
.word 32610,32589,32568,32545
.word 32521,32496,32469,32442
.word 32413,32383,32351,32319
.word 32285,32250,32214,32176
.word 32138,32098,32057,32015
.word 31971,31927,31881,31834
.word 31785,31736,31685,31634
.word 31581,31526,31471,31414
.word 31357,31298,31237,31176
.word 31114,31050,30985,30919
.word 30852,30784,30714,30644
.word 30572,30499,30425,30350
.word 30273,30196,30117,30037
.word 29956,29178,29086,28993
.word 28898,28803,28707,28609
.word 28511,28002,27897,27791
.word 27684,27576,27466,27356
.word 27245,27133,27020,26905
.word 26790,26674,26557,26438
.word 26319,26199,26077,25955
.word 25832,25708,25583,25457
.word 25330,25201,25073,24943
.word 24812,24680,24547,24414
.word 24279,24144,24007,23870
.word 23732,23593,23453,23312
.word 23170,23027,22884,22740
.word 22594,22448,22301,22154
.word 22005,21856,21706,21555
.word 21403,21250,21097,20942
.word 20787,20631,20475,20318
.word 20159,20001,19841,19681
.word 19519,19358,19195,19032
.word 18868,18703,18537,18371
.word 18204,18037,17869,17700
.word 17530,17360,17189,17018
.word 16846,16673,16499,16325
.word 16151,15976,15800,15623
.word 15446,15269,15090,14912
.word 14732,14552,14372,14191
.word 14010,13828,13645,13462
.word 13278,13094,12910,12725
.word 12539,12353,12167,11980
.word 11793,11605,11416,11228
.word 11039,10849,10659,10469
.word 10278,10087,9896 ,9704
.word 9512 ,9319 ,9126 ,8933
.word 8739 ,8545 ,8351 ,8156
.word 7961 ,7766 ,7571 ,7375
.word 7179 ,6983 ,6786 ,6589
.word 6392 ,6195 ,5997 ,5800
.word 5602 ,5403 ,5205 ,5006
.word 4808 ,4609 ,4409 ,4210
.word 4011 ,3811 ,3611 ,3411
.word 3211 ,3011 ,2811 ,2611
.word 2410 ,2210 ,2009 ,1808
.word 1607 ,1407 ,1205 ,1005
.word 804 ,603 ,402 ,201
cosine1 .sect "cosine1"
.word 32767,32767,32765,32762
.word 32758,32752,32745,32737
.word 32728,32718,32706,32693
.word 32679,32663,32647,32629
.word 32610,32589,32568,32545
.word 32521,32496,32469,32442
.word 32413,32383,32351,32319
.word 32285,32250,32214,32176
.word 32138,32098,32057,32015
.word 31971,31927,31881,31834
.word 31785,31736,31685,31634
.word 31581,31526,31471,31414
.word 31357,31298,31237,31176
.word 31114,31050,30985,30919
.word 30852,30784,30714,30644
.word 30572,30499,30425,30350
.word 30273,30196,30117,30037
.word 29956,29178,29086,28993
.word 28898,28803,28707,28609
.word 28511,28002,27897,27791
.word 27684,27576,27466,27356
.word 27245,27133,27020,26905
.word 26790,26674,26557,26438
.word 26319,26199,26077,25955
.word 25832,25708,25583,25457
.word 25330,25201,25073,24943
.word 24812,24680,24547,24414
.word 24279,24144,24007,23870
.word 23732,23593,23453,23312
.word 23170,23027,22884,22740
.word 22594,22448,22301,22154
.word 22005,21856,21706,21555
.word 21403,21250,21097,20942
.word 20787,20631,20475,20318
.word 20159,20001,19841,19681
.word 19519,19358,19195,19032
.word 18868,18703,18537,18371
.word 18204,18037,17869,17700
.word 17530,17360,17189,17018
.word 16846,16673,16499,16325
.word 16151,15976,15800,15623
.word 15446,15269,15090,14912
.word 14732,14552,14372,14191
.word 14010,13828,13645,13462
.word 13278,13094,12910,12725
.word 12539,12353,12167,11980
.word 11793,11605,11416,11228
.word 11039,10849,10659,10469
.word 10278,10087,9896 ,9704
.word 9512 ,9319 ,9126 ,8933
.word 8739 ,8545 ,8351 ,8156
.word 7961 ,7766 ,7571 ,7375
.word 7179 ,6983 ,6786 ,6589
.word 6392 ,6195 ,5997 ,5800
.word 5602 ,5403 ,5205 ,5006
.word 4808 ,4609 ,4409 ,4210
.word 4011 ,3811 ,3611 ,3411
.word 3211 ,3011 ,2811 ,2611
.word 2410 ,2210 ,2009 ,1808
.word 1607 ,1407 ,1205 ,1005
.word 804 ,603 ,402 ,201
.word 0 ,-201 ,-402 ,-603
.word -804 ,-1005 ,-1205 ,-1407
.word -1607 ,-1808 ,-2009 ,-2210
.word -2410 ,-2611 ,-2811 ,-3011
.word -3211 ,-3411 ,-3611 ,-3811
.word -4011 ,-4210 ,-4409 ,-4609
.word -4808 ,-5006 ,-5205 ,-5403
.word -5602 ,-5800 ,-5997 ,-6195
.word -6392 ,-6589 ,-6786 ,-6983
.word -7179 ,-7375 ,-7571 ,-7766
.word -7961 ,-8156 ,-8351 ,-8545
.word -8739 ,-8933 ,-9126 ,-9319
.word -9512 ,-9704 ,-9896 ,-10087
.word -10278,-10469,-10659,-10849
.word -11039,-11228,-11416,-11605
.word -11793,-11980,-12167,-12353
.word -12539,-12725,-12910,-13094
.word -13278,-13462,-13645,-13828
.word -14010,-14191,-14372,-14552
.word -14732,-14912,-15090,-15269
.word -15446,-15623,-15800,-15976
.word -16151,-16325,-16499,-16673
.word -16846,-17018,-17189,-17360
.word -17530,-17700,-17869,-18037
.word -18204,-18371,-18537,-18703
.word -18868,-19032,-19195,-19358
.word -19519,-19681,-19841,-20001
.word -20159,-20318,-20475,-20631
.word -20787,-20942,-21097,-21250
.word -21403,-21555,-21706,-21856
.word -22005,-22154,-22301,-22448
.word -22594,-22740,-22884,-23027
.word -23170,-23312,-23453,-23593
.word -23732,-23870,-24007,-24144
.word -24279,-24414,-24547,-24680
.word -24812,-24943,-25073,-25201
.word -25330,-25457,-25583,-25708
.word -25832,-25955,-26077,-26199
.word -26319,-26438,-26557,-26674
.word -26790,-26905,-27020,-27133
.word -27245,-27356,-27466,-27576
.word -27684,-27791,-27897,-28002
.word -28511,-28609,-28707,-28803
.word -28898,-28993,-29086,-29178
.word -29269,-29359,-29447,-29535
.word -29621,-29707,-29791,-29874
.word -29956,-30037,-30117,-30196
.word -30273,-30350,-30425,-30499
.word -30572,-30644,-30714,-30784
.word -30852,-30919,-30985,-31050
.word -31114,-31176,-31237,-31298
.word -31357,-31414,-31471,-31526
.word -31581,-31634,-31685,-31736
.word -31785,-31834,-31881,-31927
.word -31971,-32015,-32057,-32098
.word -32138,-32176,-32214,-32250
.word -32285,-32319,-32351,-32383
.word -32413,-32442,-32469,-32496
.word -32521,-32545,-32568,-32589
.word -32610,-32629,-32647,-32663
.word -32679,-32693,-32706,-32718
.word -32728,-32737,-32745,-32752
.word -32758,-32762,-32765,-32767
sine .usect "sine",512
cosine .usect "cosine",512
fft_data .usect "fft_data",2048
d_input .usect "d_input",2048
;fft_out .usect "fft_out"64
K_DATA_IDX_1 .set 2
K_DATA_IDX_2 .set 4
K_DATA_IDX_3 .set 8
K_TWID_TBL_SIZE .set 512
K_TWID_IDX_3 .set 128
K_FLY_COUNT_3 .set 4
K_FFT_SIZE .set 32 ;N
K_LOGN .set 5 ;LOG(N)
.bss d_twid_idx,1
.bss d_data_idx,1
.bss d_grps_cnt,1
.bss input_ptr,1
.bss output_ptr,1
_MFFT:
PSHM AR1
PSHM AR6
PSHM AR7
SSBX OVM
SSBX FRCT
SSBX SXM
STM #sine1,AR2
STM #sine,AR3
RPT #511
MVDD *AR2+,*AR3+
STM #cosine1,AR2
STM #cosine,AR3
RPT #511
MVDD *AR2+,*AR3+
STM #fft_data,AR2
NOP
RPTZ B,#2048-1
STL B,*AR2+
STM #d_input,AR2
NOP
RPTZ B,#2048-1
STL B,*AR2+
STLM A,AR2
STM #d_input,AR3
STL A,*(input_ptr)
LD 04h,A
STL A,*(output_ptr)
RPT #2*K_FFT_SIZE-1
MVDD *AR2+,*AR3+
.asg AR2,REORDERED
.asg AR3,ORIGINAL_INPUT
.asg AR7,DATA_PROC_BUF
STM #d_input,ORIGINAL_INPUT
STM #fft_data,DATA_PROC_BUF
MVMM DATA_PROC_BUF,REORDERED
STM #K_FFT_SIZE-1,BRC
RPTBD bit_rev_end-1
STM #K_FFT_SIZE,AR0
NOP
MVDD *ORIGINAL_INPUT+,*REORDERED+
MVDD *ORIGINAL_INPUT-,*REORDERED+
MAR *ORIGINAL_INPUT+0B
NOP
bit_rev_end:
;FFT Code
.asg AR1,GROUP_COUNTER
.asg AR2,PX
.asg AR3,QX
.asg AR4,WR
.asg AR5,WI
.asg AR6,BUTTERFLY_COUNTER
.asg AR7,STAGE_COUNTER
; stage 1
STM #0,BK
LD #-1,ASM
STM #fft_data,PX
LD *PX,16,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:
; stage 2
STM #fft_data,PX
STM #fft_data+K_DATA_IDX_2,QX
STM #K_FFT_SIZE/4-1,BRC
LD *PX,16,A
RPTBD stage2end-1
STM #K_DATA_IDX_2+1,AR0
; 1st bufferfly
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 A,ASM,*QX+
; 2st bufferfly
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:
; stage 3 through stage logN
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
RPTB bufferflyend-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
bufferflyend:
; Update pointers for next group
PSHM AR0
MVDK d_data_idx,AR0
MAR *PX+0
MAR *QX+0
BANZD group,*GROUP_COUNTER-
POPM AR0
MAR *QX-
; Update counters and indices for next stage
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:
STM #fft_data,AR2
MVDM *(input_ptr),AR3
MVDM *(output_ptr),AR4
STM #K_FFT_SIZE-1,BRC
NOP
RPTB power_end-1
MVDD *AR2,*AR3+
SQUR *AR2+,A
MVDD *AR2,*AR3+
SQURA *AR2+,A
STH A,*AR4+
NOP
power_end:
RSBX SXM
RSBX OVM
RSBX FRCT
POPM AR7
POPM AR6
POPM AR1
RET
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -