biquad iir 过滤
c166 家族 和 信号 处理 能力
半导体 组 8 的 9 ap1601 03.97
;****************************************************************
;* *
;* 中断 task "带宽_通过_过滤" 和 中断 号码 028h *
;* 它 calculates 这 区别 等式 : *
;* 它 calculates 这 区别 等式 : *
;* yn = b0*xn + b1*xn_1 + b2*xn_2 + a1*yn_1 + a2*yn_2 *
;* *
;****************************************************************
_带宽_通过_过滤 proc task bpf_task intno bpf_inum = 028h
MOV dpp3:bpf_rb,r0 ;initialize 寄存器 r0 的 寄存器
;bank bpf_rb 和 用户 堆栈 pointer
SCXT cp,#dpp3:bpf_rb ;保存 寄存器 影响 用 这
;中断 routine
SCXT mdc,#00h
SCXT dpp0,#pag _yn
推 MDL
推 MDH
MOV r1,_xn ;_xn 包含 这 ad 转换 结果
;提供 用 addat 寄存器
; 计算 的 这 过滤 eqation
; yn = b0*xn + b1*xn_1 + b2*xn_2 + a1*yn_1 + a2*yn_2;
SHL r1,#05h ; prescaling 的 _xn 用 2^5
; 同时发生地 这个 有 这 效应 那 这
; 频道 号码 提供 在 结合体 和
; 这 ad 转换 结果 是 masked 输出
MUL r12,r1 ; b0*xn
MOV r4,mdl ; 寄存器 r4 和 r5 是 containing 这 32 位
; 结果
MOV r5,mdh ; 为 这 第一 时间 这 previous 内容 的 r4
; 和 r5 将 是 overwritten
MUL r13,r2 ; b1*xn_1
增加 r4,mdl ; 这 multiplication 结果 是 增加 至 这
ADDC r5,mdh ; 寄存器 一双 r4 和 r5
MUL r14,r3 ; b2*xn_2
增加 r4,mdl ; 这 multiplication 结果 是 增加 至 这
ADDC r5,mdh ; 寄存器 一双 r4 和 r5
MUL r10,r6 ; a1*yn_1
增加 r4,mdl ; 这 multiplication 结果 是 增加 至 这
ADDC r5,mdh ; 寄存器 一双 r4 和 r5
MUL r11,r7 ; a2*yn_2
增加 r4,mdl ; 这 multiplication 结果 是 增加 至 这
ADDC r5,mdh ; 寄存器 一双 r4 和 r5
MOV r7,r6 ;yn_2 = yn_1, 更新 的 这 状态 能变的 yn_2
增加 r4,r4 ;一个 位 变换 left 至 调整 这 radix 要点
ADDC r5,r5 ;在 位 30 和 31
MOV r6,r5 ;yn_1 = yn, 预定的 至 这 值 范围 的 -1,1
;仅有的 这 msw 是 贮存 至 yn_1
ASHR r5,#05h ;postscaling 的 过滤 输出 用 2^5
MOV _yn,r5 ;预定的 至 这 值 范围 的 -1,1
;仅有的 这 msw 是 贮存
MOV r3,r2 ;xn_2 = xn_1, 更新 的 这 状态 能变的 xn_2
MOV r2,r1 ;xn_1 = xn, 更新 的 这 状态 能变的 xn_1
流行音乐 MDH ;restore saved 寄存器
流行音乐 MDL
流行音乐 DPP0
流行音乐 MDC
流行音乐 CP ; 转变 至 old context
RETI ; 返回 从 中断