首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

滤波

滤波

程序的功能:用上一次的滤波输出,作为下一次的输入
问题:在多次调用同一个子程序是在配置输入是出了问题,具体我写在出错的程序哪儿了



   .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

返回列表