📄 wdf_ex1_asm.s43
字号:
/******************************************************************************
; Lattice Wave Digital Filter to perform Low Pass filtering
;
; Description: This code implements a 9th order Lattice Wave Digital Filter on
; the MSP430FG439. The filter response is Low Pass with the
; following specifications.
; Sampling frequency = 16000 Hz
; Pass-band edge frequency = 3400 Hz
; Stop-band edge frequency = 4500 Hz
; Pass-band ripple = 0.5 dB
; Stop-band attenuation = 50 dB
; Filter type = Chebyshev
;
; K. Venkat
; Texas Instruments Inc.
; August 2006
; Built with IAR Embedded Workbench Version: 3.41A
;*******************************************************************************/
public wdf_ex1
RSEG CODE
EXTERN delay0,delay1,delay2,delay3,delay4,delay5,delay6,delay7,delay8,output
wdf_ex1
; Adaptor 0 Type 1 Alpha0=0.33228647
mov.w R12, R11 ; R11=Input sample
sub.w &delay0,R12 ; R12=P10
mov.w R12,R13
rra.w R13
rra.w R13
rra.w R13
rra.w R13
add.w R12,R13 ; X1=X*2^-4+X
rra.w R13
rra.w R13
add.w R12,R13 ; X2=X1*2^-2+X
rra.w R13
rra.w R13
add.w R12,R13 ; X3=X2*2^-2+X
rra.w R13
rra.w R13
add.w R12,R13 ; X4=X3*2^-2+X
rra.w R13
rra.w R13 ; Final output=X4*2^-2
add.w &delay0,R13 ; Design equation implementation
mov.w R13, &delay0 ; delay0 updated with OUTP20
sub.w R12,R13 ; R13=OUTP10
mov.w R13,R15 ; R15=OUTP10
; Adaptor 4 Type 1 Alpha4=0.457358479
mov.w &delay3,R12
sub.w &delay4,R12 ; R12=P14
mov.w R12,R13
rra.w R13
rra.w R13
add.w R12, R13 ; X1=X*2^-2+X
rra.w R13
rra.w R13
add.w R12, R13 ; X2=X1*2^-2+X
rra.w R13
rra.w R13
rra.w R13
rra.w R13
add.w R12, R13 ; X3=X2*2^-4+X
rra.w R13
rra.w R13
add.w R12, R13 ; X4=X3*2^-2+X
rra.w R13
rra.w R13
sub.w R12,R13 ; X5=X4*2^-2-X
rra.w R13
rra.w R13
rra.w R13
add.w R12, R13 ; X6=X5*2^-3+X
rra.w R13 ; Final output=X6*2^-1
add.w &delay4,R13 ; Design equation implementation
mov.w R13, &delay4 ; Delay4 updated with OUTP24
sub.w R12, R13 ; R13=OUTP14
mov.w R13, R14 ; R14=OUTP14
; Adaptor 3 Type 4 Alpha3=0.381164832
sub.w R15, R13 ; R13=P13
mov.w R13, R12 ; R12=P13
rra.w R13
rra.w R13
add.w R12, R13 ; X1=X*2^-2+X
rra.w R13
rra.w R13
rra.w R13
sub.w R12,R13 ; X2=X1*2^-3-X
rra.w R13
rra.w R13
add.w R12, R13 ; X3=X2*2^-2+X
rra.w R13
rra.w R13
rra.w R13
rra.w R13
sub.w R12, R13 ; X4=X3*2^-4-X
rra.w R13
rra.w R13
add.w R12, R13 ; X5=X4*2^-2+X
rra.w R13 ; Final output=X5*2^-1
sub.w R14,R13 ; R13=OUTP23
mov.w R13, &delay3 ; Delay3 updated with OUTP23
sub.w R12, R13 ; R13=OUTP13
mov.w R13, R14 ; R14=OUTP13
; Adaptor 8 Type 2 Alpha8=0.217705053
mov.w &delay7, R13
mov.w &delay8, R12
sub.w R13, R12 ; R12=P18
mov.w R12, R13
inv.w R13
add.w #1,R13
rra.w R13
rra.w R13
sub.w R12, R13 ; X1=-X*2^-2-X
rra.w R13
rra.w R13
rra.w R13
rra.w R13
sub.w R12, R13 ; X2=X1*2^-4-X
rra.w R13
rra.w R13
rra.w R13
rra.w R13
rra.w R13
sub.w R12, R13 ; X3=X2*2^-5-X
rra.w R13
rra.w R13
rra.w R13
add.w R12, R13 ; X4=X3*2^-3+X
rra.w R13
rra.w R13 ; Final output=X5*2^-2
mov.w R13,R12
add.w &delay7, R13 ; R13=OUTP28
add.w &delay8, R12 ; R12=OUTP18
mov.w R13,&delay8 ; Delay8 updated with OUTP28
mov.w R12,R15 ; R15=OUTP18
; Adaptor 7 Type 4 Alpha7=0.080855796
sub.w R14,R12 ; R12=P17
mov.w R12,R13
rra.w R13
rra.w R13
rra.w R13
sub.w R12, R13 ; X1=X*2^-3-X
rra.w R13
rra.w R13
sub.w R12, R13 ; X2=X1*2^-2-X
rra.w R13
rra.w R13
add.w R12, R13 ; X3=X2*2^-2+X
rra.w R13
rra.w R13
add.w R12, R13 ; X4=X3*2^-2+X
rra.w R13
rra.w R13
add.w R12, R13 ; X5=X4*2^-2+X
rra.w R13
rra.w R13
rra.w R13
rra.w R13 ; Final output=X5*2^-4
sub.w R15, R13 ; R13=OUTP27
mov.w R13, &delay7 ; Delay7 updated with OUTP27
sub.w R12, R13 ; R13=OUTP17
rra.w R13 ; Divided by 2 as part of WDF algo
mov.w R13, &output ; Top section sample stored in Output
; Adaptor 2 Type 1 Alpha2=0.202082263
sub.w &delay2, &delay1
mov.w &delay1, R12 ;R12=P12
mov.w R12, R13
inv.w R13
add.w #1,R13
rra.w R13
rra.w R13
sub.w R12, R13 ; X1=-X*2^-2-X
rra.w R13
rra.w R13
rra.w R13
rra.w R13
sub.w R12, R13 ; X2=X1*2^-4-X
rra.w R13
rra.w R13
rra.w R13
rra.w R13
add.w R12, R13 ; X3=X2*2^-4+X
rra.w R13
rra.w R13
sub.w R12, R13 ; X4=X3*2^-2-X
rra.w R13
rra.w R13
add.w R12, R13 ; X5=X4*2^-2+X
rra.w R13
rra.w R13 ; Final output=X5*2^-2
add.w &delay2, R13 ; R13=OUTP22
mov.w R13, &delay2 ; Delay2 updated by OUTP22
sub.w R12, R13 ; R13=OUTP12
; Adaptor 1 Type 3 Alpha1=0.49630558
mov.w R11, R12
mov.w R13, R14
sub.w R13, R12 ; R12=P11
mov.w R12, R13
rra.w R13
rra.w R13
sub.w R12, R13 ; X1=X*2^-2-X
rra.w R13
rra.w R13
add.w R12, R13 ; X2=X1*2^-2+X
rra.w R13
rra.w R13
rra.w R13
rra.w R13
sub.w R12, R13 ; X3=X2*2^-4-X
rra.w R13
rra.w R13
rra.w R13
rra.w R13
rra.w R13
rra.w R13
rra.w R13
add.w R12, R13 ; X4=X3*2^-7+X
rra.w R13 ; Final output=X4*2^-1
mov.w R13, R12
sub.w R11, R13 ; R13=OUTP21
mov.w R13, &delay1 ; Delay1 updated by OUTP21
sub.w R14, R12 ; R12=OUTP11
mov.w R12, R14 ; R14=OUTP11
; Adaptor 6 Type 2 Alpha6=0.328193215
mov.w &delay5, R13
mov.w &delay6, R12
sub.w R13, R12 ; R12=P16
mov.w R12, R13
rra.w R13
rra.w R13
rra.w R13
rra.w R13
rra.w R13
rra.w R13
rra.w R13
rra.w R13
add.w R12, R13 ; X1=X*2^-8+X
rra.w R13
rra.w R13
add.w R12, R13 ; X2=X1*2^-2+X
rra.w R13
rra.w R13
add.w R12, R13 ; X3=X2*2^-2+X
rra.w R13
rra.w R13 ; Final output=X3*2^-2
mov.w R13,R12
add.w &delay5, R13 ; R13=OUTP26
add.w &delay6, R12 ; R12=OUTP16
mov.w R13,&delay6 ; Delay6 updated by OUTP26
mov.w R12,R15 ; R15=OUTP16
; Adaptor 5 Type 4 Alpha5=0.233713416
sub.w R14, R12 ; R12=P15
mov.w R12, R13
rra.w R13
rra.w R13
add.w R12,R13 ; X1=X*2^-2+X
rra.w R13
rra.w R13
sub.w R12,R13 ; X2=X1*2^-2-X
rra.w R13
rra.w R13
rra.w R13
rra.w R13
sub.w R12,R13 ; X3=X2*2^-4-X
rra.w R13
rra.w R13
rra.w R13
rra.w R13
add.w R12,R13 ; X4=X3*2^-4+X
rra.w R13
rra.w R13 ; Final output=X4*2^-2
sub.w R15, R13 ; R13=OUTP25
mov.w R13, &delay5 ; Delay5 updated by OUTP25
sub.w R12, R13 ; R13=OUTP15
rra.w R13 ; Divided by 2 as part of WDF algo
add.w R13, &output ; Enable this line for LPF, disable otherwise
;sub.w R13, &output ; Enable this line if HPF is desired, disable
; otherwise
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -