?? fft.asm
字號:
**************************************
*基2,時域抽取法,已知實信號的FFT程序*
**************************************
.mmregs
.global reset,start,sav_sin,sav_idx,sav_grp
.def start,_c_int00
DATA .usect "DATA",1024 ;
.copy "mdata1.inc" ;已知信號的數據存在mdata1.inc文件中
N .set 128 ;FFT的長度
LOGN .set 7 ;2的7次方為128,基2算法
sav_grp .usect "tempv",3
sav_sin .set sav_grp+1
sav_idx .set sav_grp+2
BOS .usect "stack",0Fh
TOS .usect "stack",1
TWI1: .sect "twiddle1" ;正弦表
.int 0,201,402,603
.int 804,1005,1206,1407
.int 1607,1808,2009,2210
.int 2410,2611,2811,3011
.int 3211,3411,3611,3811
.int 4011,4210,4409,4609
.int 4808,5006,5205,5403
.int 5602,5800,5997,6195
.int 6392,6589,6786,6983
.int 7179,7375,7571,7766
.int 7961,8156,8351,8545
.int 8739,8933,9126,9319
.int 9512,9704,9896,10087
.int 10278,10469,10659,10849
.int 11039,11228,11416,11605
.int 11793,11980,12167,12353
.int 12539,12725,12910,13094
.int 13278,13462,13645,13828
.int 14010,14191,14372,14552
.int 14732,14912,15090,15269
.int 15446,15623,15800,15976
.int 16151,16325,16499,16673
.int 16846,17018,17189,17360
.int 17530,17700,17869,18037
.int 18204,18371,18537,18703
.int 18868,19032,19195,19358
.int 19519,19681,19841,20001
.int 20159,20318,20475,20631
.int 20787,20942,21097,21250
.int 21403,21555,21706,21856
.int 22005,22154,22301,22448
.int 22594,22740,22884,23027
.int 23170,23312,23453,23593
.int 23732,23870,24007,24144
.int 24279,24414,24547,24680
.int 24812,24943,25073,25201
.int 25330,25457,25583,25708
.int 25832,25955,26077,26199
.int 26319,26438,26557,26674
.int 26790,26905,27020,27133
.int 27245,27356,27466,27576
.int 27684,27791,27897,28002
.int 28106,28208,28310,28411
.int 28511,28609,28707,28803
.int 28898,28993,29086,29178
.int 29269,29359,29447,29535
.int 29621,29707,29791,29874
.int 29956,30037,30117,30196
.int 30273,30350,30425,30499
.int 30572,30644,30714,30784
.int 30852,30919,30985,31050
.int 31114,31176,31237,31298
.int 31357,31414,31471,31526
.int 31581,31634,31685,31736
.int 31785,31834,31881,31927
.int 31971,32015,32057,32098
.int 32138,32176,32214,32250
.int 32285,32319,32351,32383
.int 32413,32442,32469,32496
.int 32521,32545,32568,32589
.int 32610,32629,32647,32663
.int 32679,32693,32706,32718
.int 32728,32737,32745,32752
.int 32758,32762,32765,32767
.int 32767,32767,32765,32762
.int 32758,32752,32745,32737
.int 32728,32718,32706,32693
.int 32679,32663,32647,32629
.int 32610,32589,32568,32545
.int 32521,32496,32469,32442
.int 32413,32383,32351,32319
.int 32285,32250,32214,32176
.int 32138,32098,32057,32015
.int 31971,31927,31881,31834
.int 31785,31736,31685,31634
.int 31581,31526,31471,31414
.int 31357,31298,31237,31176
.int 31114,31050,30985,30919
.int 30852,30784,30714,30644
.int 30572,30499,30425,30350
.int 30273,30196,30117,30037
.int 29956,29874,29791,29707
.int 29621,29535,29447,29359
.int 29269,29178,29086,28993
.int 28898,28803,28707,28609
.int 28511,28411,28310,28208
.int 28106,28002,27897,27791
.int 27684,27576,27466,27356
.int 27245,27133,27020,26905
.int 26790,26674,26557,26438
.int 26319,26199,26077,25955
.int 25832,25708,25583,25457
.int 25330,25201,25073,24943
.int 24812,24680,24547,24414
.int 24279,24144,24007,23870
.int 23732,23593,23453,23312
.int 23170,23027,22884,22740
.int 22594,22448,22301,22154
.int 22005,21856,21706,21555
.int 21403,21250,21097,20942
.int 20787,20631,20475,20318
.int 20159,20001,19841,19681
.int 19519,19358,19195,19032
.int 18868,18703,18537,18371
.int 18204,18037,17869,17700
.int 17530,17360,17189,17018
.int 16846,16673,16499,16325
.int 16151,15976,15800,15623
.int 15446,15269,15090,14912
.int 14732,14552,14372,14191
.int 14010,13828,13645,13462
.int 13278,13094,12910,12725
.int 12539,12353,12167,11980
.int 11793,11605,11416,11228
.int 11039,10849,10659,10469
.int 10278,10087,9896,9704
.int 9512,9319,9126,8933
.int 8739,8545,8351,8156
.int 7961,7766,7571,7375
.int 7179,6983,6786,6589
.int 6392,6195,5997,5800
.int 5602,5403,5205,5006
.int 4808,4609,4409,4210
.int 4011,3811,3611,3411
.int 3211,3011,2811,2611
.int 2410,2210,2009,1808
.int 1607,1407,1206,1005
.int 804,603,402,201
TWI2: .sect "twiddle2" ;余弦表
.int 32767,32767,32765,32762
.int 32758,32752,32745,32737
.int 32728,32718,32706,32693
.int 32679,32663,32647,32629
.int 32610,32589,32568,32545
.int 32521,32496,32469,32442
.int 32413,32383,32351,32319
.int 32285,32250,32214,32176
.int 32138,32098,32057,32015
.int 31971,31927,31881,31834
.int 31785,31736,31685,31634
.int 31581,31526,31471,31414
.int 31357,31298,31237,31176
.int 31114,31050,30985,30919
.int 30852,30784,30714,30644
.int 30572,30499,30425,30350
.int 30273,30196,30117,30037
.int 29956,29874,29791,29707
.int 29621,29535,29447,29359
.int 29269,29178,29086,28993
.int 28898,28803,28707,28609
.int 28511,28411,28310,28208
.int 28106,28002,27897,27791
.int 27684,27576,27466,27356
.int 27245,27133,27020,26905
.int 26790,26674,26557,26438
.int 26319,26199,26077,25955
.int 25832,25708,25583,25457
.int 25330,25201,25073,24943
.int 24812,24680,24547,24414
.int 24279,24144,24007,23870
.int 23732,23593,23453,23312
.int 23170,23027,22884,22740
.int 22594,22448,22301,22154
.int 22005,21856,21706,21555
.int 21403,21250,21097,20942
.int 20787,20631,20475,20318
.int 20159,20001,19841,19681
.int 19519,19358,19195,19032
.int 18868,18703,18537,18371
.int 18204,18037,17869,17700
.int 17530,17360,17189,17018
.int 16846,16673,16499,16325
.int 16151,15976,15800,15623
.int 15446,15269,15090,14912
.int 14732,14552,14372,14191
.int 14010,13828,13645,13462
.int 13278,13094,12910,12725
.int 12539,12353,12167,11980
.int 11793,11605,11416,11228
.int 11039,10849,10659,10469
.int 10278,10087,9896,9704
.int 9512,9319,9126,8933
.int 8739,8545,8351,8156
.int 7961,7766,7571,7375
.int 7179,6983,6786,6589
.int 6392,6195,5997,5800
.int 5602,5403,5205,5006
.int 4808,4609,4409,4210
.int 4011,3811,3611,3411
.int 3211,3011,2811,2611
.int 2410,2210,2009,1808
.int 1607,1407,1206,1005
.int 804,603,402,201
.int 0,201,-402,-603
.int -804,-1005,-1206,-1407
.int -1607,-1808,-2009,-2210
.int -2410,-2611,-2811,-3011
.int -3211,-3411,-3611,-3811
.int -4011,-4210,-4409,-4609
.int -4808,-5006,-5205,-5403
.int -5602,-5800,-5997,-6195
.int -6392,-6589,-6786,-6983
.int -7179,-7375,-7571,-7766
.int -7961,-8156,-8351,-8545
.int -8739,-8933,-9126,-9319
.int -9512,-9704,-9896,-10087
.int -10278,-10469,-10659,-10849
.int -11039,-11228,-11416,-11605
.int -11793,-11980,-12167,-12353
.int -12539,-12725,-12910,-13094
.int -13278,-13462,-13645,-13828
.int -14010,-14191,-14372,-14552
.int -14732,-14912,-15090,-15269
.int -15446,-15623,-15800,-15976
.int -16151,-16325,-16499,-16673
.int -16846,-17018,-17189,-17360
.int -17530,-17700,-17869,-18037
.int -18204,-18371,-18537,-18703
.int -18868,-19032,-19195,-19358
.int -19519,-19681,-19841,-20001
.int -20159,-20318,-20475,-20631
.int -20787,-20942,-21097,-21250
.int -21403,-21555,-21706,-21856
.int -22005,-22154,-22301,-22448
.int -22594,-22740,-22884,-23027
.int -23170,-23312,-23453,-23593
.int -23732,-23870,-24007,-24144
.int -24279,-24414,-24547,-24680
.int -24812,-24943,-25073,-25201
.int -25330,-25457,-25583,-25708
.int -25832,-25955,-26077,-26199
.int -26319,-26438,-26557,-26674
.int -26790,-26905,-27020,-27133
.int -27245,-27356,-27466,-27576
.int -27684,-27791,-27897,-28002
.int -28106,-28208,-28310,-28411
.int -28511,-28609,-28707,-28803
.int -28898,-28993,-29086,-29178
.int -29269,-29359,-29447,-29535
.int -29621,-29707,-29791,-29874
.int -29956,-30037,-30117,-30196
.int -30273,-30350,-30425,-30499
.int -30572,-30644,-30714,-30784
.int -30852,-30919,-30985,-31050
.int -31114,-31176,-31237,-31298
.int -31357,-31414,-31471,-31526
.int -31581,-31634,-31685,-31736
.int -31785,-31834,-31881,-31927
.int -31971,-32015,-32057,-32098
.int -32138,-32176,-32214,-32250
.int -32285,-32319,-32351,-32383
.int -32413,-32442,-32469,-32496
.int -32521,-32545,-32568,-32589
.int -32610,-32629,-32647,-32663
.int -32679,-32693,-32706,-32718
.int -32728,-32737,-32745,-32752
.int -32758,-32762,-32765,-32767
.text
_c_int00
b start
nop
nop
start: SSBX INTM
LD #0,DP
STM #TOS,SP
STM #56DBh,SWWSR
STM #1028h,PMST ;
STM #0,CLKMD
teststa:
LDM CLKMD,A
AND #01h,A
BC teststa,ANEQ
STM #01097h,CLKMD
RPT #0fffh
NOP
STM #0,IMR
RSBX OVM
SSBX SXM
SSBX FRCT
STM #2*N,BK
STM #INPUT,AR3 ;已知信號在程序存儲器中的首地址
STM #DATA,AR7 ;存放已知信號的數據存儲器的首地址
MVMM AR7,AR2 ;FFT運算后DATA塊中存放的是已知信號的頻譜
STM #N-1,BRC
RPTBD plend-1 ;把存放在程序存儲器中的已知信號搬到數據存儲器
STM #N,AR0
LDM AR3,A
READA *AR2+
ADD #1,A
READA *AR2+
MAR *AR3+0B
plend: ;基2FFT運算
STM #0,BK
LD #-1,ASM
MVMM AR7,AR2
STM #DATA+2,AR3
STM #N/2-1,BRC
LD *AR2,16,A
RPTBD s1end-1
STM #3,AR0
SUB *AR3,16,A,B
ADD *AR3,16,A
STH A,ASM,*AR2+
ST B,*AR3+
||LD *AR2,A
SUB *AR3,16,A,B
ADD *AR3,16,A
STH A,ASM,*AR2+0
ST B,*AR3+0%
||LD *AR2,A
s1end:
MVMM AR7,AR2
STM #DATA+4,AR3
STM #N/4-1,BRC
LD *AR2,16,A
RPTBD s2end-1
STM #5,AR0
SUB *AR3,16,A,B
ADD *AR3,16,A
STH A,ASM,*AR2+
ST B,*AR3+
||LD *AR2,A
SUB *AR3,16,A,B
ADD *AR3,16,A
STH A,ASM,*AR2+
STH B,ASM,*AR3+
MAR *AR3+
ADD *AR2,*AR3,A
SUB *AR2,*AR3-,B
STH A,ASM,*AR2+
SUB *AR2,*AR3,A
ST B,*AR3
||LD *AR3+,B
ST A,*AR2
||ADD *AR2+0%,A
ST A,*AR3+0%
||LD *AR2,A
s2end:
STM #512,BK
ST #128,@sav_sin
STM #128,AR0
STM #TWI2,AR4
STM #TWI1,AR5
STM #-3+LOGN,AR7
ST #-1+N/8,@sav_grp
STM #3,AR6
ST #8,@sav_idx
stage:
STM #DATA,AR2
LD @sav_idx,A
ADD *(AR2),A
STLM A,AR3
MVDK @sav_grp,AR1
group:
MVMD AR6,BRC
RPTBD bend-1
LD *AR4,T
MPY *AR3+,A
MACR *AR5+0%,*AR3-,A
ADD *AR2,16,A,B
ST B,*AR2
||SUB *AR2+,B
ST B,*AR3
||MPY *AR3+,A
MASR *AR3,*AR4+0%,A
ADD *AR2,16,A,B
ST B,*AR3+
||SUB *AR2,B
LD *AR4,T
ST B,*AR2+
||MPY *AR3+,A
bend:
PSHM AR0
MVDK sav_idx,AR0
MAR *AR2+0
MAR *AR3+0
BANZD group,*AR1-
POPM AR0
MAR *AR3-
LD sav_idx,A
SUB #1,A,B
STLM B,AR6
STL A,1,sav_idx
LD sav_grp,A
STL A,ASM,sav_grp
LD sav_sin,A
STL A,ASM,sav_sin
BANZD stage,*AR7-
MVDK sav_sin,AR0
;
STM #DATA+2,AR2
STM #DATA+2*N-2,AR3
STM #DATA+2*N+3,AR7
STM #DATA+4*N-1,AR6
STM #-2+N/2,BRC
RPTBD p3end-1
STM #3,AR0
;
ADD *AR2,*AR3,A
SUB *AR2,*AR3,B
STH A,ASM,*AR2+
STH A,ASM,*AR3+
STH B,ASM,*AR6-
NEG B
STH B,ASM,*AR7-
ADD *AR2,*AR3,A
SUB *AR2,*AR3,B
STH A,ASM,*AR2+
STH A,ASM,*AR3-0
STH B,ASM,*AR6-
NEG B
STH B,ASM,*AR7+0
p3end:
ST #0,*AR6-
ST #0,*AR6
p3test:
STM #DATA,AR2
STM #DATA+1,AR4
STM #DATA+2*N+1,AR5
ADD *AR2,*AR4,A
SUB *AR2,*AR4,B
STH A,ASM,*AR2+
ST #0,*AR2
MVDD *AR2+,*AR5-
STH B,ASM,*AR5
;
STM #DATA+4*N-1,AR3
STM #TWI2+512/N,AR4
STM #TWI1+512/N,AR5
STM #N-2,BRC
RPTBD p4end-1
STM #512/N,AR0
LD *AR2+,16,A
MACR *AR4,*AR2,A
MASR *AR5,*AR3-,A
LD *AR3+,16,B
MASR *AR5+0%,*AR2-,B
MASR *AR4+0%,*AR3,B
STH A,ASM,*AR2+
STH B,ASM,*AR2+
NEG B
STH B,ASM,*AR3-
STH A,ASM,*AR3-
p4end: rsbx xf ;運算結束后使XF端輸出一信號作為結束標志
nop
nop
nop
nop
nop
nop
ssbx xf
nop
nop
nop
nop
nop
nop
B p4end
.end
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -