📄 zhy_209.asm
字号:
***************************************************************
* IIR滤波器的DSP的实现 *
* 2阶IIR滤波器的单操作数指令实现方法 *
* IIR滤波器可用较少的阶数获得较好的选择性,所用的存储单元少, *
* 运算次数少.但是在有限精度的运算中,可能出现不稳定现象.而且 *
* 选则性好,相位的非线性失真越严重.在线性相位要求不敏感的场合 *
* (如语音通信)选用IIR滤波器较为合适 *
* 对于2阶标准形式IIR滤波器由反馈通道和前向通道组成 *
* 反馈通道: x0 = w(n) = x(n) + A1*x1 + A2*x2 *
* 前向通道: y(n) = B0*x0 + B1*x1 + B2*x2 *
*-------------------------------------------------------------*
* 程序来源:DSP技术与应用实例(赵红怡) Page 208 *
* lvlishan *
* 2009 04 18 *
***************************************************************
.title "IIR1,ASM"
.mmregs
.def _c_int00
x0 .usect "x",1
x1 .usect "x",1
x2 .usect "x",1
y0 .usect "x",1
B2 .usect "COEF",1
B1 .usect "COEF",1
B0 .usect "COEF",1
A2 .usect "COEF",1
A1 .usect "COEF",1
y_out .usect "y_out",200
PA0 .set 0
PA1 .set 1
.data
table: .word 0 ;x(n-1)
.word 0 ;x(n-2)
.word 1*32768/10 ;B2
.word 2*32768/10 ;B1
.word 3*32768/10 ;B0
.word 5*32768/10 ;A2
.word -4*32768/10 ;A1
.text
_c_int00:
LD #x0,DP ;设置DP指针
SSBX FRCT ;设置又符号小数乘法
STM #x1,AR1 ;传送两个初始化数据x(n-1),x(n-2)
RPT #1
MVPD #table,*AR1+
STM #B2,AR1 ;传送系数B2,B1,B0,A2,A1
RPT #4
MVPD #table+2,*AR1+
NOP
STM #y_out,AR2
NOP
IIR1: ;PORTR PA1,@x0 ;输入数据x(n),此处的x0表示输入的新数据
NOP ;add a input toggle probe point here 在此处增加输入探针
NOP
NOP
NOP
LD #x0,DP ;设置DP指针 ;计算反馈通道
LD @x0,16,A ;x0*1 -->
LD @x1,T
MAC @A1,A ;A + x1*A1 --> A
LD @x2,T
MAC @A2,A ;A + x2*A2 --> A
STH A,@x0 ;更新x0 ,此处的x0表示反馈通道所求的和
;计算前向通道
MPY @B2,A ;x2*B2 --> A
LTD @x1 ;同时更新数据
MAC @B1,A ;A + x1*B1 --> A
LTD @x0 ;同时更新数据
MAC @B0,A ;A + x0*B0 --> A
STM #x1,AR3
;STH A,@x0 ;更新x0 ,此处的x0表示滤波器的输出数据
STH A,@y0
STH A,*AR2+
NOP ;add a output toggle probe point here 在此处增加输出探针
BD IIR1
NOP
NOP
;PORTW @x0,PA0 ;输出滤波器的结果
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -