📄 wdf_ex2_asm.s43
字号:
/******************************************************************************
; Lattice Wave Digital Filter to perform High Pass filtering
;
; Description: This code implements a 11th order Lattice Wave Digital Filter on
; the MSP430FG439. The filter response is Low Pass with the
; following specifications.
; Sampling frequency = 8000 Hz
; Pass-band edge frequency = 1100 Hz
; Stop-band edge frequency = 600 Hz
; Pass-band ripple = 1 dB
; Stop-band attenuation = 50 dB
; Filter type = Butterworth
;
; K. Venkat
; Texas Instruments Inc.
; August 2006
; Built with IAR Embedded Workbench Version: 3.41A
;*******************************************************************************/
public wdf_ex2
RSEG CODE
EXTERN delay0,delay1,delay2,delay3,delay4,delay5,delay6,delay7,delay8,
EXTERN output, delay9,delay10
wdf_ex2
; Adaptor 0 Type 1 Alpha0=0.418147516
mov.w R12, R11 ; R11=Input sample
sub.w &delay0,R12 ; R12=P10
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
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
sub.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 &delay0,R13
mov.w R13, &delay0 ; delay0 updated with OUTP20
sub.w R12,R13
mov.w R13,R15 ; R15=OUTP10
; Adaptor 4 Type 1 Alpha4=0.130624215
mov.w &delay3,R12
sub.w &delay4,R12 ; R12=P14
mov.w R12,R13
inv.w R13
add.w #1, 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
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
rra.w R13 ; Final output=X3*2^-3
add.w &delay4,R13
mov.w R13, &delay4 ; delay0 updated with OUTP24
sub.w R12, R13 ; R13=OUTP14
mov.w R13, R14 ; R14=OUTP14
; Adaptor 3 Type 3 Alpha3=0.412721971
mov.w R15,R12
sub.w R14,R12 ; R12=P13
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
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
sub.w R12,R13 ; X5=X4*2^-2-X
rra.w R13
rra.w R13
add.w R12,R13 ; X6=X5*2^-2+X
rra.w R13 ; Final output=X6*2^-1
mov.w R13,R12
sub.w R15,R13 ; R13=OUTP23
mov.w R13, &delay3 ; delay3 updated with OUTP23
sub.w R14,R12 ; R12=OUTP13
mov.w R12,R15 ; R15=OUTP13
; Adaptor 8 Type 1 Alpha8=0.130624215
mov.w &delay7, R12
sub.w &delay8, R12 ; R12=P18
mov.w R12,R13
inv.w R13
add.w #1, 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
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
rra.w R13 ; Final output=X3*2^-3
add.w &delay8, R13
mov.w R13, &delay8 ; delay8 updated with OUTP28
sub.w R12, R13
mov.w R13, R14
; Adaptor 7 Type 4 Alpha7=0.340631744
sub.w R15,R13 ; R13=P17
mov.w R13, R12
inv.w R13
add.w #1, 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
add.w R12,R13 ; X3=X2*2^-2+X
rra.w R13
rra.w R13
sub.w R12,R13 ; X4=X3*2^-2-X
rra.w R13
rra.w R13
rra.w R13
sub.w R12,R13 ; X5=X4*2^-3-X
rra.w R13
rra.w R13
sub.w R12,R13 ; X6=X5*2^-2-X
rra.w R13
rra.w R13
add.w R12,R13 ; X7=X6*2^-2+X
rra.w R13 ; Final output=X7*2^-1
sub.w R14, 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.130624215
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
rra.w R13
sub.w R12,R13 ; X1=-X*2^-3-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
rra.w R13 ; Final output=X3*2^-3
add.w &delay2, R13 ; R13=OUTP22
mov.w R13, &delay2 ; delay2 updated with OUTP22
sub.w R12, R13 ; R13=OUTP12
; Adaptor 1 Type 3 Alpha1=0.356727908
mov.w R11, R12
mov.w R13, R14
sub.w R13, R12 ; R12=P11
mov.w R12, R13
rra.w R13
rra.w R13
rra.w R13
add.w R12,R13 ; X1=X*2^-3+X
rra.w R13
rra.w R13
add.w R12,R13 ; X2=X1*2^-2+X
rra.w R13
rra.w R13
sub.w R12,R13 ; X3=X2*2^-2-X
rra.w R13
rra.w R13
sub.w R12,R13 ; X4=X3*2^-2-X
rra.w R13
rra.w R13
rra.w R13
sub.w R12,R13 ; X5=X4*2^-3-X
rra.w R13
rra.w R13
add.w R12,R13 ; X6=X5*2^-2+X
rra.w R13 ; Final output=X6*2^-1
mov.w R13, R12
sub.w R11, R13 ; R13=OUTP21
mov.w R13, &delay1 ; delay1 updated with OUTP21
sub.w R14, R12 ; R12=OUTP11
mov.w R12, R14 ; R14=OUTP11
; Adaptor 6 Type 1 Alpha6=0.130624215
mov.w &delay5, R13
mov.w &delay6, R12
sub.w R12, R13 ; R13=P16
mov.w R13, R12
inv.w R13
add.w #1, 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
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
rra.w R13 ; Final output=X3*2^-3
add.w &delay6, R13 ; R13=OUTP26
mov.w R13, &delay6 ; delay6 updated with OUTP26
sub.w R12, R13 ; R13=OUTP16
mov.w R13,R15 ; R15=OUTP16
; Adaptor 5 Type 4 Alpha5=0.488969979
sub.w R14, R13 ; R13=P15
mov.w R13, R12
rra.w R13
rra.w R13
sub.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
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
sub.w R12,R13 ; X5=X4*2^-2-X
rra.w R13
rra.w R13
rra.w R13
rra.w R13
rra.w R13
add.w R12,R13 ; X6=X5*2^-5+X
rra.w R13 ; Final output=X6*2^-1
sub.w R15, R13 ; R13=OUTP25
mov.w R13, &delay5 ; delay5 updated with OUTP25
sub.w R12, R13 ; R13=OUTP15
mov.w R13, R14 ; R14=OUTP15
; Adaptor 10 Type 1 Alpha10=0.130624215
mov.w &delay9, R13
mov.w &delay10, R12
sub.w R12, R13 ; R13=P110
mov.w R13, R12
inv.w R13
add.w #1, 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
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
rra.w R13 ; Final output=X3*2^-3
add.w &delay10, R13 ; R13=OUTP210
mov.w R13, &delay10 ; delay10 updated with OUTP210
sub.w R12, R13 ; R13=OUTP110
mov.w R13,R15 ; R15=OUTP110
; Adaptor 9 Type 4 Alpha9=0.131408852
sub.w R14, R13 ; R13=P19
mov.w R13, R12
rra.w R13
rra.w R13
rra.w R13
add.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
rra.w R13
rra.w R13
add.w R12,R13 ; X4=X3*2^-4+X
rra.w R13
rra.w R13
rra.w R13 ; Final output=X3*2^-3
sub.w R15, R13 ; R13=OUTP29
mov.w R13, &delay9 ; delay9 updated with OUTP29
sub.w R12, R13 ; R13=OUTP19
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 + -