📄 ffts.asm
字号:
rete
nop
nop
INT1 B SINT1
rete
nop
nop
INT2 rsbx intm
rete
nop
nop
TINT: rete
nop
nop
nop
RINT0: rete
nop
nop
nop
XINT0: rete
nop
nop
nop
SINT6 .space 4*16
SINT7 .space 4*16
INT3: rete
nop
nop
nop
HPINT: rete
nop
nop
nop
RINT1: B RECIV
nop
nop
nop
XINT1: rete
nop
nop
nop
;*************************
start: LD #0,DP
STM #TOS,SP
STM #56DBh,SWWSR
STM #1020h,PMST
STM #0,CLKMD
teststa:
LDM CLKMD,A
AND #01h,A
BC teststa,ANEQ
STM #01097h,CLKMD
RPT #0fffh
NOP
STM #DATA,AR2 ;存放信号的数据存储器块清零
STM #512,AR3
LD #0,A
LOOPD: STL A,*AR2+
BANZ LOOPD,*AR3-
LD #INPUT,A ;存放信号的程序存储器块清零
STM #0,AR1
STM #256,AR3
LOOPS: WRITA AR1
ADD #1,A,A
BANZ LOOPS,*AR3-
LD #0AH,A ;A/D转换器初始化
STL A,TMP
PORTW TMP,7H ;选通A/D
CALL ADCBSP
STM #INPUT,AR2
STM #128,AR3
ST #0,*(flag)
SSBX INTM
LOOP: STM #0002H,IMR ;开INT1
RSBX INTM ;EINT
LOOP2: CMPM *(flag),#1
BC START1,TC ;通过INT1找到信号采样的起始位置
B LOOP2
START1: STM #3FFFH,IFR
SSBX INTM
STM #0400H,IMR ;开串口1的接收中断
RSBX INTM
WAIT: BANZ WAIT,*AR3 ;采样128个点
SSBX INTM ;FFT运算,结果存入中DATA块
STM #0,IMR
RSBX OVM
SSBX SXM
SSBX FRCT
STM #2*N,BK
STM #INPUT,AR3
STM #DATA,AR7
MVMM AR7,AR2
STM #N-1,BRC
RPTBD plend-1
STM #N,AR0
LDM AR3,A
READA *AR2+
ADD #1,A
READA *AR2+
MAR *AR3+0B
plend:
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: nop
nop
LOP B LOP
;*************************
ADCBSP STM #SPCR11,SPSA1 ;串口1的初始化程序
;A/D转换器的初始化程序
STM #0000h,McBSP1 ;RESET R
NOP
NOP
STM #SPCR21,SPSA1
STM #0000h,McBSP1 ;RESET X
NOP
NOP
STM #SPCR11,SPSA1
STM #AK_SPCR11,McBSP1 ;ENBLE R
NOP
NOP
LD #02H,A
STL A,TMP
PORTW TMP,7H
STM #SPCR21,SPSA1
STM #AK_SPCR21,McBSP1 ;ENBLE X
NOP
NOP
STM #RCR11,SPSA1
STM #AK_RCR11,McBSP1
NOP
NOP
STM #XCR11,SPSA1
STM #AK_XCR11,McBSP1
NOP
NOP
STM #PCR1,SPSA1
STM #AK_PCR1,McBSP1
NOP
NOP
STM SRGR11,SPSA1
STM #AK_SRGR11,McBSP1
NOP
NOP
STM SRGR21,SPSA1
STM #AK_SRGR21,McBSP1
NOP
NOP
STM #RCR21,SPSA1
STM #AK_RCR21,McBSP1
NOP
NOP
STM #XCR21,SPSA1
STM #AK_XCR21,McBSP1
NOP
NOP
RET
;***********************************
RECIV: LDM DRR11,A ;串口1的中断服务程序
STL A,6,DXNEW
LDM AR2,A
WRITA DXNEW
ADD #2,A ;信号分为实部和虚部,虚部为0
STL A,AR2
BANZ LOOPR,*AR3-
SSBX INTM
LOOPR: RETE
;*****************************
SINT1: ST #1,*(flag) ;外中断1(INT1)的中断服务程序
RETE
;****************************
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -