📄 test4.asm
字号:
.title "test4"
.mmregs
stack .usect "stack",50
xn .usect "xn",400 ;自定义数据空间
y_out .usect "y_out",1
aa0 .usect "aa0",1 ;自定义数据空间
fir_data .usect "fir_dat",41
fir_out .usect "fir_out",1
h0 .usect "h0",41
d_input .usect "d_input",64
buffir .usect "buffer",1
frame .usect "frame",1
flag .usect "flag",1
currbuff .usect "curbuff",1
length .set 04FFh
len .set 0190h ;延时的时间设置,延时240(ms)个采样数据,后来改成400个(50ms)
A1 .set 4000h ;0.25的小数表示2000h,0.5的小数表示4000H,1的小数表示7FFFh
AA0 .set 0000h
.global buffer,frame,flag,stack
.global currbuff
.def _c_int00
.ref _init_5402
.ref _init_AD50
.include "reg.h"
.data
COEF: .word 89*32768/10000
.word 215*32768/10000
.word 12*32768/10000
.word -95*32768/10000
.word 110*32768/10000
.word -76*32768/10000
.word 2*32768/10000
.word 93*32768/10000
.word -167*32768/10000
.word 178*32768/10000
.word -95*32768/10000
.word -70*32768/10000
.word 262*32768/10000
.word -390*32768/10000
.word 360*32768/10000
.word -114*32768/10000
.word -346*32768/10000
.word 938*32768/10000
.word -1527*32768/10000
.word 1961*32768/10000
.word 7880*32768/10000
.word 1961*32768/10000
.word -1527*32768/10000
.word 938*32768/10000
.word -346*32768/10000
.word -114*32768/10000
.word 360*32768/10000
.word -390*32768/10000
.word 262*32768/10000
.word -70*32768/10000
.word -95*32768/10000
.word 178*32768/10000
.word -167*32768/10000
.word 93*32768/10000
.word 2*32768/10000
.word -76*32768/10000
.word 110*32768/10000
.word -95*32768/10000
.word 12*32768/10000
.word 215*32768/10000
.word 89*32768/10000
.text
_c_int00:
RSBX XF ;test2的改进程序,加入混响效果,其实就是将采样值延时30ms再相加
RSBX XF
SSBX XF
SSBX FRCT ;设置小数运算
SSBX INTM ;关闭所有可屏蔽中断
STM #stack+50,SP ;初始化堆栈指针
NOP
NOP
CALL _init_5402 ;初始化5402dsp
NOP
NOP
; ***init McBSP,初始化多缓冲串行口McBSP1***
STM SPCR1,MCBSP1_SPSA ;SPCR1=0000h接受复位
STM #0000h,MCBSP1_SPSD ;0021h
STM SPCR2,MCBSP1_SPSA ;SPCR2=0001h发送复位
STM #0000h,MCBSP1_SPSD ;0201h
STM RCR1,MCBSP1_SPSA ;RCR1=0002h,设置DSP串口1工作在每帧一个字,每个字16位(还有种是15+M/S的模式)
STM #0040h,MCBSP1_SPSD ;16bits
STM RCR2,MCBSP1_SPSA ;RCR2=0003h
STM #0000h,MCBSP1_SPSD
STM XCR1,MCBSP1_SPSA ;XCR1=0004h,设置DSP串口1工作在每帧一个字,每个字16位
STM #0040h,MCBSP1_SPSD
STM XCR2,MCBSP1_SPSA ;XCR2=0005h
STM #0000h,MCBSP1_SPSD
STM SRGR1,MCBSP1_SPSA ;SRGR1=0006,抽样率生成器1初始化
STM #0000000000000000b,MCBSP1_SPSD ;设置串口工作频率
STM SRGR2,MCBSP1_SPSA ;SRGR2=0007,抽样率生成器2初始化
STM #0000000000000000b,MCBSP1_SPSD ;设置采样率发生器时钟
STM PCR,MCBSP1_SPSA ;PCR=000e,管脚控制寄存器初始化
STM #000ch,MCBSP1_SPSD
NOP
NOP
STM SPCR1,MCBSP1_SPSA ;接受使能
STM #0001h,MCBSP1_SPSD;0021h
STM SPCR2,MCBSP1_SPSA ;发送使能
STM #0001h,MCBSP1_SPSD;0201h
CALL _init_AD50 ;初始化ad50
NOP
NOP
STM #h0,AR1
rpt #40
MVPD COEF,*AR1+
;LOOP以下的程序段用来接受一个数据,紧接着转发这个数据。
LOOP: STM SPCR1,MCBSP1_SPSA ;设置子地址,使其访问串口控制寄存器1
LOOPR: BITF *(MCBSP1_SPSD), #0x0002 ;TC= *(MCBSP1_SPSD)&0x0002h测试由立即数规定的位域,这里访问MCBSP1_SPSD对应基本数据寄存器1
BC LOOPR, NTC ;如果TC=0,转移到LOOPR,继续等待。TC=1表示16bit已经传完,则不在等待,操作下一条语句
NOP
NOP
LDM MCBSP1_DRR1, A ;将MMR加载到累加器A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -