📄 iir.asm
字号:
/* w[n]=x[n]+a[0]*w[0]+...+a[n-1]*w[n-1]
y[n]=b[0]*w[0]+...+b[n]*w[n]
Algorithm:
w[n]=x[n]; {Update w[n] for each x[n]}
for(i=0; i<n; i++)
w[n]=w[n]+a[i]*w[i];
y[n]=0; {Compute y[n] and update w[i]}
for(i=0; i<=n; i++) {
y[n]=y[n]+b[i]*w[i];
w[i]=w[i+1]; {Update w[i]}
}
F0=y[n]; {return value}
Registers and stack for passing paramters:
F4: x[n]
R8: &a[] coefficients
F12: &b[] coefficients
stack: &w[]
stack: taps
Registers for return value
F0: y[n]
Registers altered
R10
R11
#include <trans.h> <Header>
float iir( float sample, \ <Prototype>
float pm a_coeffs[], float pm b_coeffs[], \
float state[], int taps);*/
//#include <trans.h>
#include <E:\VisualDSP\21k\lib\src\libc_src\lib_glob.h>
.GLOBAL _my_iir;
//.extern sine;
.precision=40;
.round_zero;
.segment/dm seg_dmda;
.var _inc=0.5;
.var t1;
.endseg;
.segment /pm seg_pmco;
/* a_coeff, b_coeff, state */
/*r8=&_a, r2=&_w, r12=taps, r1=&_b*/
_my_iir: put(R10); /*R1: &b[0]*///r8=_a;
//call sine;
R0=MODE1;
dm(t1)=r0;
BIT CLR MODE1 65536; /*Set 40-BIT mode */
pm_pm_dm_iir:
R0=PASS R12, pm_ptr=R8; /*Save taps. Addr. of a_coeff*/
R8=R8-R8, dm_ptr=R2; /*Addr. of delay line w[0]*/
F12=PASS F4, R10=R2; /*F12: sample.R10: ptr to delay line*//*f4=x[n]*/
F4=DM(dm_ptr, dm_1), F2=PM(pm_ptr, pm_1);
/*1st ele in delay line w[0]. 1st ele in a[0]*/
LCNTR=r0, DO ppdpole_loop UNTIL LCE;
ppdpole_loop: F8=F2*F4, F12=F8+F12, F4=DM(dm_ptr,dm_1), F2=PM(pm_ptr,pm_1);//
F12=F8+F12, pm_ptr=R1;/*F12: delay line w(n). Addr of b[0]*/
R8=R8-R8, DM(dm_M1,dm_ptr)=F12; /*Save w(n)*/
#ifdef _ADI_SWFA
NOP;
#endif
R12=R12-R12, dm_ptr=R10;/*dm_ptr pt to w[0] again*/
//r4=_w;
//dm_ptr=r4;
//r12=r12-r12;
F4=DM(dm_ptr,dm_1), F2=PM(pm_ptr,pm_1);
LCNTR=r0, DO ppdzero_loop UNTIL LCE;
F8=F2*F4, F12=F8+F12, F4=DM(dm_ptr,dm_1), F2=PM(pm_ptr,pm_1);
ppdzero_loop: DM(-2,dm_ptr)=f4; /*Update w[]*/
F8=F2*F4, F12=F8+F12;
F0=F8+F12; /*Return value y[n]*/
//f0=f4;//////
restore_state:
r4=dm(t1);
MODE1=R4; /*Restore old mode*/
outpop(r10);
rts;
.ENDSEG;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -