📄 zhy_212.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 212 *
* lvlishan *
* 2009 04 18 *
***************************************************************
.title "IIR2.ASM"
.mmregs
.def _c_int00
x2 .usect "x",1
x1 .usect "x",1
x0 .usect "x",1
x_i .usect "x",1
COEF .usect "COEF",5
y_out .usect "y_out",200
PA0 .set 0
PA1 .set 1
.data
table: .word 0 ;x(n-2)
.word 0 ;x(n-0)
.word 676*32768/10000 ;B2
.word 1352*32768/10000 ;B1
.word 676*32768/10000 ;B0
.word -4142*32768/10000 ;A2
.word 707*32768/10000 ;A1/2
_c_int00:
SSBX FRCT ;设置有符号小数乘法
LD #x_i,DP
STM #y_out,AR5 ;
STM #x2,AR1 ;传送初始化数据
RPT #1
MVPD #table,*AR1+
STM #COEF,AR1 ;传送滤波器系数
RPT #4
MVPD #table+2,*AR1+
STM #x2,AR3 ;AR3作为数据指针
STM #COEF+4,AR4 ;AR4作为系数指针
MVMM AR4,AR1 ;保存系数指针值在AR1中
STM #3,BK ;设置循环缓冲区的长度
STM #-1,AR0 ;设置变址寻址步长
IIR2: NOP
NOP ;add a input toggle probe point here 在此处增加输入探针
LD @x_i,A
STL A,*AR3
NOP
;PORTR PA1,*AR3 ;从PA1端口输入数据x(n)
LD *AR3+0%,16,A ;x(n)*1 --> A
MAC *AR3,*AR4,A ;A + x(n-1)*A1/2 --> A
MAC *AR3+0%,*AR4-,A ;A + x(n-1)*A1/2 --> A
MAC *AR3+0%,*AR4-,A ;A + x(n-2)*A2 --> A
STH A,*AR3 ;更新x0,此处的x0表示反馈通道所求的和
MPY *AR3+0%,*AR4-,A ;x0 * B0 --> A
MAC *AR3+0%,*AR4-,A ;A + x(n-1)*B1 --> A
MAC *AR3,*AR4-,A ;A + x(n-2)*B2 --> A
STH A,*AR3 ;保存x(n-2)的单元暂存滤波器的输出结果
STH A,*AR5+
MVMM AR1,AR4 ;重新设置系数指针
NOP ;add a output toggle probe point here 在此处增加输出探针
NOP
B IIR2
;BD IIR2
;PORTW *AR3,PA0 ;这里使用的是循环缓冲区
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -