|
Filter Program Example
This page will give you an example of filter programs using CD245x series DSP. The program is designed to accept interrupt signal and the input data every 125uS (8KHz sample). RAM0 address 00FE is used for the switch to select one of the 6 different types of filters. (Two IIR filters, Four FIR filters.). A fourteen (14) cycle biquad filter routine and one cycle per tap FIR filter is exampled.
#
# Filter Demo Program (CD245x Version)
#
# Clarkspur Design 5/24/90 H.Yagi
# Rev. CD245x 5/11/96 H.Yagi
#
8000 org 'h8000
stp00:
8000 0840 0000 ldi st,'h0
8002 7CFF ldsi r3,'h0ff #Stack Pointer
8003 08C0 3000 ldi ext4,'h3000
8005 08D0 0121 ldi ext5,'h0121
8007 0840 0001 ldi st,'h0001 # No loop
8009 06EF ld a,'h0ef
800A B80F ansi a,'h0f
800B 9000 mod ls1
800C 8870 800F addi a,@vtop
800E 0051 ld pc,ah
vtop:
800F 4C00 8058 bra @init0
8011 4C00 8096 bra @init1
8013 4C00 80C5 bra @init2
8015 4C00 810B bra @init3
8017 4C00 8146 bra @init4
8019 4C00 8181 bra @init5
801B 4C00 81BC bra @init6
801D 4C00 81C0 bra @init7
801F 4C00 81C4 bra @init8
8021 4C00 81C8 bra @init9
8023 4C00 81CC bra @init10
8025 4C00 81D0 bra @init11
8027 4C00 81D4 bra @init12
8029 4C00 81D8 bra @init13
802B 4C00 81DC bra @init14
802D 4C00 81E0 bra @init15
intin:
802F 0001 ld al,ah
8030 06EF ld a,'hef # Store SW at RAM0(00EF)
8031 B80F ansi a,'h00f
8032 9000 mod ls1
8033 8870 8038 addi a,@vtopint
8035 0021 ld x,ah
8036 0010 ld ah,al
8037 0052 ld pc,x
vtopint:
8038 4C00 8084 bra @prog0
803A 4C00 80B3 bra @prog1
803C 4C00 80D6 bra @prog2
803E 4C00 811C bra @prog3
8040 4C00 8157 bra @prog4
8042 4C00 8192 bra @prog5
8044 4C00 81BF bra @prog6
8046 4C00 81C3 bra @prog7
8048 4C00 81C7 bra @prog8
804A 4C00 81CB bra @prog9
804C 4C00 81CF bra @prog10
804E 4C00 81D3 bra @prog11
8050 4C00 81D7 bra @prog12
8052 4C00 81DB bra @prog13
8054 4C00 81DF bra @prog14
8056 4C00 81E3 bra @prog15
#
#
# Application program #0 here
#
#
# IIR FILTER Low pass 6th order
# Elliptic - Cascade rep.
#
# Three Bi-quad Filters are cascaded.
#
init0:
#
# Coefficient loading
#
0010 coef0:equ 10
0000 dat0:equ 0
0010 widat0:equ 10
000F size0:equ 0f
8058 0808 0010 ldi r0,@coef0
805A 080A 8075 ldi r2,@tablp0 # R2: Prog Mem. Table Ptr.
805C 0810 000F ldi ah,@size0
lp11:
805E 0A26 ld x,(r2+!)p
805F 2E10 dec ah
8060 4224 ld (r0+!),x
8061 4C05 805E bra @lp11,nz
8063 54B0 modf ie3
8064 4C00 81E4 bra @idle
biquad:
#
# Subroutine Bi-quad
#
# +-----+ +-----+
# Xin ---*----| b10 |---->( + )-----| X 2 |---*---> Yo
# | +-----+ ^ +-----+ |
# | | w11 |
# | +-----+ |
# V | Z-1 | V
# | +-----+ |
# | ^ |
# | | |
# | +-----+ | +-----+ |
# *----| b11 |---->( + )<----|-a11 |---*
# | +-----+ ^ +-----+ |
# | | w12 |
# | +-----+ |
# V | Z-1 | V
# | +-----+ |
# | ^ |
# | | |
# | +-----+ | +-----+ |
# +----| b12 |---->( + )<----|-a12 |---+
# +-----+ +-----+
#
#
#
# Sequence of the calculation
#
# 1) w11 + b10*Xin ---> 0.5*Yo
# 2) w12 + b11*Xin - a11*Yo ---> w11
# 3) b12*Xin - a12*Yo ---> w12
#
#
#
#
# Xin <--- r4(start) r0(start) ---> b10
# Yo <--- r4(end) b11
# -a11
# -a12
# w11 <--- r5(start) b12
# w12 r0(end) ---> ***
# *** <--- r5(end)
#
8066 B60C mld (r4),(r0+) # A <-- 0, X*b10 --> P
8067 031D ld ah,(r5+) # A <-- w11
8068 96CC mpya (r4+),(r0+) # w11 + X*b10 --> A, X*b11 --> P
8069 9000 mod ls1 # A * 2 --> A
806A 4310 ld (r4),ah # Y <-- A
806B 0319 ld ah,(r5-) # A <-- w12
806C 960C mpya (r4),(r0+) # A <-- w12 + X*b11, Y*(-a11) --> P
806D 568C mset (r4-),(r0+) # (Early) Y*(-a12) --> P
806E 9470 dadd # A <-- w12 + X*b11 + Y*(-a11)
806F 431D ld (r5+),ah # w11 <-- w12 + X*b11 + Y*(-a11)
8070 B6CC mld (r4+),(r0+) # A <-- 0, X*b12 --> P'
8071 9470 dadd # A <-- Y*(-a12)
8072 9470 dadd # A <-- X*b12 + Y*(-a12)
8073 431D ld (r5+),ah # w12 <-- A
8074 0257 ret
#
# Coefficient Table
#
tablp0:
8075 0186 dw 'h0186 #b10
8076 FE23 dw 'hfe23 #b11
8077 7265 dw 'h7265 #a11
8078 CC6B dw 'hcc6b #a12
8079 0186 dw 'h0186 #b12
807A 113C dw 'h113c #b20
807B DC82 dw 'hdc82 #b21
807C 76B6 dw 'h76b6 #a21
807D C64D dw 'hc64d #a22
807E 133C dw 'h133c #b22
807F 2794 dw 'h2794 #b30
8080 B4E0 dw 'hb4e0 #b31
8081 7A39 dw 'h7a39 #a31
8082 C1A5 dw 'hc1a5 #a32
8083 2794 dw 'h2794 #b32
prog0:
8084 48F0 81E6 call @io
8086 0808 0010 ldi r0,@coef0
8088 0908 0000 ldi r4,@dat0
808A 0909 0010 ldi r5,@widat0
808C 4310 ld (r4),ah
808D 48F0 8066 call @biquad
808F 48F0 8066 call @biquad
8091 48F0 8066 call @biquad
8093 0310 ld ah,(r4)
8094 54B0 modf ie3
8095 0257 ret
#
#
# Application program #1 here
#
#
# IIR FILTER band pass 6th order
# Elliptic - Cascade rep.
#
# Three Bi-quad Filters are cascaded.
#
init1:
#
# Coefficient loading
#
0010 coef1:equ 10
0000 dat1:equ 0
0010 widat1:equ 10
000F size1:equ 0f
8096 0808 0010 ldi r0,@coef1
8098 080A 80A4 ldi r2,@tablp1
809A 0810 000F ldi ah,@size1
lp111:
809C 2E10 dec ah
809D 0A26 ld x,(r2+!)p
809E 4224 ld (r0+!),x
809F 4C05 809C bra @lp111,nz
80A1 54B0 modf ie3
80A2 4C00 81E4 bra @idle
#
# Coefficient Table
#
tablp1:
80A4 0190 dw 'h0190 #b10
80A5 0000 dw 'h0000 #b11
80A6 758F dw 'h758f #a11
80A7 C31E dw 'hc31e #a12
80A8 FE70 dw 'hfe70 #b12
80A9 0A41 dw 'h0a41 #b20
80AA EDE8 dw 'hede8 #b21
80AB 7562 dw 'h7562 #a21
80AC C195 dw 'hc195 #a22
80AD 0A41 dw 'h0a41 #b22
80AE 20DD dw 'h20dd #b30
80AF C028 dw 'hc028 #b31
80B0 7899 dw 'h7899 #a31
80B1 C14F dw 'hc14f #a32
80B2 20DD dw 'h20dd #b32
prog1:
80B3 48F0 81E6 call @io
80B5 0808 0010 ldi r0,@coef1
80B7 0908 0000 ldi r4,@dat1
80B9 0909 0010 ldi r5,@widat1
80BB 4310 ld (r4),ah
80BC 48F0 8066 call @biquad
80BE 48F0 8066 call @biquad
80C0 48F0 8066 call @biquad
80C2 0310 ld ah,(r4)
80C3 54B0 modf ie3
80C4 0257 ret
#
#
# Application program #2 here
#
#
# DEMO 2 (FIR Filter)
#
# 63 Taps FIR filter
#
# fc= 500Hz, Parks-McClellan Equi-ripple
#
#
init2:
0080 datatop2:equ 80
0080 coeffir2:equ 80
80C5 0808 0080 ldi r0,@datatop2
80C7 0908 0080 ldi r4,@coeffir2
80C9 0840 0006 ldi st,0006
80CB 090A 80EA ldi r6,@coftop2
80CD 1820 ldsi a,'h20
demolp2:
80CE 2E10 dec ah
80CF 0B26 ld x,(r6+!)p
80D0 4324 ld (r4+!),x
80D1 4C05 80CE bra @demolp2,nz
80D3 54B0 modf ie3
80D4 4C00 81E4 bra @idle
prog2:
80D6 0908 0080 ldi r4,@coeffir2
80D8 48F0 80DF call @sigma
80DA 48F0 81E6 call @io
80DC 4210 ld (r0),ah
80DD 54B0 modf ie3
80DE 0257 ret
#
# Sigma ai*bi + acc -> acc
#
sigma:
80DF B6CC mld (r4+),(r0+)
80E0 56CC mset (r4+),(r0+)
80E1 0890 001C ldi ext1,'h001C
80E3 96CC mpya (r4+),(r0+)
80E4 0890 001F ldi ext1,'h001F
80E6 968C mpya (r4-),(r0+)
80E7 9470 dadd
80E8 9470 dadd
80E9 0257 ret
#
# Filter Coefficients table
#
# Parks-McClellan LPF 500Hz/10KHz sample
#
coftop2:
80EA 0028 DW 'H0028
80EB FF66 DW 'HFF66
80EC FF79 DW 'HFF79
80ED FF68 DW 'HFF68
80EE FF5F DW 'HFF5F
80EF FF6B DW 'HFF6B
80F0 FF93 DW 'HFF93
80F1 FFD7 DW 'HFFD7
80F2 0031 DW 'H0031
80F3 0096 DW 'H0096
80F4 00F5 DW 'H00F5
80F5 013B DW 'H013B
80F6 0157 DW 'H0157
80F7 0138 DW 'H0138
80F8 00D9 DW 'H00D9
80F9 003D DW 'H003D
80FA FF74 DW 'HFF74
80FB FE95 DW 'HFE95
80FC FDC7 DW 'HFDC7
80FD FD30 DW 'HFD30
80FE FCFA DW 'HFCFA
80FF FD46 DW 'HFD46
8100 FE2C DW 'HFE2C
8101 FFB0 DW 'HFFB0
8102 01C4 DW 'H01C4
8103 0448 DW 'H0448
8104 070A DW 'H070A
8105 09CC DW 'H09CC
8106 0C4C DW 'H0C4C
8107 0E4A DW 'H0E4A
8108 0F93 DW 'H0F93
8109 1004 DW 'H1004
endcof2:
810A 0000 DW 'H0000
#
#
# Application program #3 here
#
init3:
0080 datatop3:equ 80
0080 coeffir3:equ 80
810B 0808 0080 ldi r0,@datatop3
810D 0908 0080 ldi r4,@coeffir3
810F 0840 0006 ldi st,0006
8111 090A 8125 ldi r6,@coftop3
8113 1820 ldsi a,'h20
demolp3:
8114 2E10 dec ah
8115 0B26 ld x,(r6+!)p
8116 4324 ld (r4+!),x
8117 4C05 8114 bra @demolp3,nz
8119 54B0 modf ie3
811A 4C00 81E4 bra @idle
prog3:
811C 0908 0080 ldi r4,@coeffir3
811E 48F0 80DF call @sigma
8120 48F0 81E6 call @io
8122 4210 ld (r0),ah
8123 54B0 modf ie3
8124 0257 ret
#
# Filter Coefficients table
#
# Kaiser Window LPF 500Hz/10KHz sample
#
coftop3:
8125 0004 DW 'H0004
8126 FFEE DW 'HFFEE
8127 FFCF DW 'HFFCF
8128 FFB1 DW 'HFFB1
8129 FF98 DW 'HFF98
812A FF8F DW 'HFF8F
812B FF9D DW 'HFF9D
812C FFC5 DW 'HFFC5
812D 0005 DW 'H0005
812E 005A DW 'H005A
812F 00B3 DW 'H00B3
8130 0101 DW 'H0101
8131 0130 DW 'H0130
8132 012D DW 'H012D
8133 00EC DW 'H00EC
8134 006B DW 'H006B
8135 FFB4 DW 'HFFB4
8136 FEDC DW 'HFEDC
8137 FE05 DW 'HFE05
8138 FD59 DW 'HFD59
8139 FD05 DW 'HFD05
813A FD31 DW 'HFD31
813B FDFB DW 'HFDFB
813C FF6D DW 'HFF6D
813D 017E DW 'H017E
813E 0410 DW 'H0410
813F 06ED DW 'H06ED
8140 09D4 DW 'H09D4
8141 0C7B DW 'H0C7B
8142 0E9D DW 'H0E9D
8143 0FFE DW 'H0FFE
8144 1079 DW 'H1079
endcof3:
8145 0000 DW 'H0000
#
#
# Application program #4 here
#
init4:
0080 datatop4:equ 80
0080 coeffir4:equ 80
8146 0808 0080 ldi r0,@datatop4
8148 0908 0080 ldi r4,@coeffir4
814A 0840 0006 ldi st,0006
814C 090A 8160 ldi r6,@coftop4
814E 1820 ldsi a,'h20
demolp4:
814F 2E10 dec ah
8150 0B26 ld x,(r6+!)p
8151 4324 ld (r4+!),x
8152 4C05 814F bra @demolp4,nz
8154 54B0 modf ie3
8155 4C00 81E4 bra @idle
prog4:
8157 0908 0080 ldi r4,@coeffir4
8159 48F0 80DF call @sigma
815B 48F0 81E6 call @io
815D 4210 ld (r0),ah
815E 54B0 modf ie3
815F 0257 ret
#
# Filter Coefficients table
#
# Kaiser Window Band Stop 400Hz-1100Hz/10KHz sample
#
coftop4:
8160 FFE5 DW 'HFFE5
8161 0000 DW 'H0000
8162 002D DW 'H002D
8163 0061 DW 'H0061
8164 0088 DW 'H0088
8165 0090 DW 'H0090
8166 006F DW 'H006F
8167 002F DW 'H002F
8168 FFEB DW 'HFFEB
8169 FFC0 DW 'HFFC0
816A FFC7 DW 'HFFC7
816B 0000 DW 'H0000
816C 004B DW 'H004B
816D 0070 DW 'H0070
816E 0032 DW 'H0032
816F FF6F DW 'HFF6F
8170 FE3A DW 'HFE3A
8171 FCE7 DW 'HFCE7
8172 FBFB DW 'HFBFB
8173 FC02 DW 'HFC02
8174 FD5A DW 'HFD5A
8175 0000 DW 'H0000
8176 037D DW 'H037D
8177 06F2 DW 'H06F2
8178 0954 DW 'H0954
8179 09BE DW 'H09BE
817A 07BF DW 'H07BF
817B 0393 DW 'H0393
817C FE1D DW 'HFE1D
817D F8B2 DW 'HF8B2
817E F4BB DW 'HF4BB
817F 7289 DW 'H7289
endcof4:
8180 0000 DW 'H0000
#
#
# Application program #5 here
#
init5:
0080 datatop5:equ 80
0080 coeffir5:equ 80
8181 0808 0080 ldi r0,@datatop5
8183 0908 0080 ldi r4,@coeffir5
8185 0840 0006 ldi st,0006
8187 090A 819B ldi r6,@coftop5
8189 1820 ldsi a,'h20
demolp5:
818A 2E10 dec ah
818B 0B26 ld x,(r6+!)p
818C 4324 ld (r4+!),x
818D 4C05 818A bra @demolp5,nz
818F 54B0 modf ie3
8190 4C00 81E4 bra @idle
prog5:
8192 0908 0080 ldi r4,@coeffir5
8194 48F0 80DF call @sigma
8196 48F0 81E6 call @io
8198 4210 ld (r0),ah
8199 54B0 modf ie3
819A 0257 ret
#
# Filter Coefficients table
#
# Kaiser Window HPF 500Hz/10KHz sample
#
coftop5:
819B FFFE DW 'HFFFE
819C 000C DW 'H000C
819D 0021 DW 'H0021
819E 0039 DW 'H0039
819F 004D DW 'H004D
81A0 0057 DW 'H0057
81A1 004E DW 'H004E
81A2 0030 DW 'H0030
81A3 FFFC DW 'HFFFC
81A4 FFB4 DW 'HFFB4
81A5 FF66 DW 'HFF66
81A6 FF1F DW 'HFF1F
81A7 FEF2 DW 'HFEF2
81A8 FEF1 DW 'HFEF1
81A9 FF28 DW 'HFF28
81AA FF9D DW 'HFF9D
81AB 0047 DW 'H0047
81AC 0114 DW 'H0114
81AD 01E3 DW 'H01E3
81AE 028C DW 'H028C
81AF 02E2 DW 'H02E2
81B0 02BC DW 'H02BC
81B1 01FA DW 'H01FA
81B2 0090 DW 'H0090
81B3 FE86 DW 'HFE86
81B4 FBF7 DW 'HFBF7
81B5 F919 DW 'HF919
81B6 F62D DW 'HF62D
81B7 F380 DW 'HF380
81B8 F157 DW 'HF157
81B9 EFF1 DW 'HEFF1
81BA 6EB8 DW 'H6EB8
endcof5:
81BB 0000 DW 'H0000
#
#
# Application program #6 here
#
init6:
81BC 54B0 modf ie3
81BD 4C00 81E4 bra @idle
prog6:
81BF 0257 ret
#
#
# Application program #7 here
#
init7:
81C0 54B0 modf ie3
81C1 4C00 81E4 bra @idle
prog7:
81C3 0257 ret
#
#
# Application program #8 here
#
init8:
81C4 54B0 modf ie3
81C5 4C00 81E4 bra @idle
prog8:
81C7 0257 ret
#
#
# Application program #9 here
#
init9:
81C8 54B0 modf ie3
81C9 4C00 81E4 bra @idle
prog9:
81CB 0257 ret
#
#
# Application program #10 here
#
init10:
81CC 54B0 modf ie3
81CD 4C00 81E4 bra @idle
prog10:
81CF 0257 ret
#
#
# Application program #11 here
#
init11:
81D0 54B0 modf ie3
81D1 4C00 81E4 bra @idle
prog11:
81D3 0257 ret
#
#
# Application program #12 here
#
init12:
81D4 54B0 modf ie3
81D5 4C00 81E4 bra @idle
prog12:
81D7 0257 ret
#
#
# Application program #13 here
#
init13:
81D8 54B0 modf ie3
81D9 4C00 81E4 bra @idle
prog13:
81DB 0257 ret
#
#
# Application program #14 here
#
init14:
81DC 54B0 modf ie3
81DD 4C00 81E4 bra @idle
prog14:
81DF 0257 ret
#
#
# Application program #15 here
#
init15:
81E0 54B0 modf ie3
81E1 4C00 81E4 bra @idle
prog15:
81E3 0257 ret
idle:
81E4 4C00 81E4 bra @idle
#
# IO routine
#
io:
81E6 0890 00FF ldi ext1,'h00ff
81E8 0000 nop
81E9 90B0 mod rs4
81EA 00E1 ld ext6,ah
81EB 001E ld ah,ext6
81EC 9030 mod ls4
81ED 0257 ret
#
# Interrupt vector
#
FFFC ORG 'HFFFC
FFFC 8000 dw @stp00
FFFD 802F dw @intin
FFFE 802F dw @intin
FFFF 802F dw @intin
Fatal Errors: 0
Wornings : 0
Notes : 0
---- ASM2450 completed ----
|

Return to Clarkspur HOME PAGE .