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.

    Coding Example.
               #
               #      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 ----


---END---

Return to Clarkspur HOME PAGE .