程序的功能:用上一次的滤波输出,作为下一次的输入
问题:在多次调用同一个子程序是在配置输入是出了问题,具体我写在出错的程序哪儿了
.mmregs
.global start
.def start,_c_int00
INDEX .set 1
KS .set 256 ;模拟输入数据缓冲区大小
N .set 17
COFF_FIR .sect "COFF_FIR" ;FIR滤波器系数
.word 0
.word 158
.word 264
.word -290
.word -1406
.word -951
.word 3187
.word 9287
.word 12272
.word 9287
.word 3187
.word -951
.word -1406
.word -290
.word 260
.word 158
.word 0
.data
INPUT .copy "firinput.txt" ;模拟输入在数据存储区0x2400
OUTPUT .space 32*16 ;输出数据在数据区0x2500
OUTPUT1 .space 17*16
;FIR_DP .usect "FIR_VARS",0
;D_FIN .usect "FIR_VARS",1
;D_FOUT .usect "FIR_VARS",1
COFFTAB .usect "FIR_COFF",N
DATABUF .usect "FIR_BFR",N
BOS .usect "STACK",0Fh
TOS .usect "STACK",1
.text
.asg AR0,INDEX_P
.asg AR4,DATA_P ;输入数据x(n)循环缓冲区指针
.asg AR5,COFF_P ;FIR系数表指针
.asg AR6,INBUF_P ;模拟输入数据指针
.asg AR7,OUTBUF_P ;FIR滤波器输出数据指针
_c_int00
b start
nop
nop
start: SSBX FRCT
STM #COFFTAB,COFF_P
RPT #N-1 ;将FIR系数从程序存储器移动
MVPD #COFF_FIR,*COFF_P+ ;到数据存储器
STM #INDEX,INDEX_P
STM #DATABUF,DATA_P
RPTZ A,#N-1
STL A,*DATA_P+ ;将数据循环缓冲区清零
STM #(DATABUF+N-1),DATA_P ;数据缓冲区指针指向x[n-(N-1)]
STM #COFFTAB,COFF_P
STM #INPUT,INBUF_P
STM #OUTPUT,OUTBUF_P
CALL FIR_TASK
STM #OUTPUT,INBUF_P
STM #OUTPUT1,OUTBUF_P
CALL FIR_TASK
;这样调用没有问题,我现在就是想把上一次的输出作为下一次的输入,是了几次都没有成功
;请教大虾抽时间帮帮忙
EEND B EEND
FIR_TASK:
STM #N,BK ;FIR循环缓冲区大小
LD *INBUF_P+,A ;装载输入数据
FIR_FILTER:
STL A,*DATA_P+%
RPTZ A,N-1
MAC *DATA_P+0%,*COFF_P+0%,A
STH A,*OUTBUF_P+%
RET
.end
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |