⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fir.c.txt

📁 用C54X汇编语言实现的FIR滤波器程序
💻 TXT
字号:
;------------------------------------------------------------------
;使用MAC指令实现FIR滤波器
;-----------------------------------------------------------------
           .mmergs
           .include "main.inc"
;16个FIR系数
COFF_FIR_START  .sect "coff_fir"       ;滤波器系数
           .word 6Fh
           .word 0F3h
           .word 269h
           .word 50Dh
           .word 8A9h
           .word 0C99h
           .word 0FF8h
           .word 11EBh
           .word 11EBh
           .word 0EF8h
           .word 0C99h
           .word 8A9h
           .word 50Dh
           .word 269h
           .word 0F3h
           .word 6Fh
COFF_FIR_END
FIR_DP          .usect "fir_vars",0
d_filin         .usect "fir_vars",1
d_filout        .usect "fir_vars",1
fir_coff_table  .usect "fir_coff",20
d_data_buffer   .usect "fir_bfr",40     ;滤波器缓冲区大小
           .def fir_init                ;初始化FIR滤波器
           .def fir_task                ;执行FIR滤波
;------------------------------------------------------
;下面的程序段的功能是为数据和系数初始化循环缓冲区
;------------------------------------------------------
                .asg AR0,FIR_INDEX_P
                .asg AR4,FIR_DATA_P
                .asg AR5,FIR_COFF_P
                .sect "fir_prog"
fir_init:
           STM  #fir_coff_table,FIR_COFF_P
           RPT  #K_FIR_BFFR-1                     ;将FIR系数从程序区移到数据区
           MVPD #COFF_FIR_START,*FIR_COFF_P+
           STM  #K_FIR_INDEX,FIR_INDEX_P
           STM  #d_data_buffer,FIR_DATA_P         ;将最近的采样加载到cir_bfr地址
           RPTZ A,#K_FIR_BFFR
           STL  A,*FIR_DATA_P+                    ;复位缓冲区
           STM  #(d_data_buffer+KFIR_BFFR-1),FIR_DATA_P
           RETD
           STM  #fir_coff_table,FIR_COFF_P
;-----------------------------------------------------
;下面的子程序的功能为使用MAC指令执行FIR滤波
;累加器A(滤波器输出)=h(n)*x(n-i),i=0,1,2,3.....15
;------------------------------------------------------  
          .asg  AR6,INBUF_P
          .asg  AR7,OUTBUF_P
          .asg  AR4,FIR_DATA_P
          .asg  AR5,FIR_COFF_P
          .sect "fir_porg"
fir_task:
          LD  #FIR_DP,DP
          STM #K_FPAME_SIZE-1,BRC                  ;重复256次
          RPTBD  fir_filter_loop-1   
          STM #K_FIR_BFFR,BK                       ;FIR循环缓冲区大小
          LD  *INBUF_P+,A                          ;加载输入值
fir_filter:
         STL A,*FIR_DATA_P+%                        ;
         RPTZ A,(K_FIR_BFFR-1)
         MAC *FIR_DATA_P+0%,FIR_COFF_P+0%,A         ;
         STH A,*OUTBUF_P+                           ;
fir_filter_loop
    RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -