home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / drdobbs / 1991 / 05 / bittman / fir.s < prev    next >
Text File  |  1991-02-10  |  4KB  |  101 lines

  1.  
  2. /********* Generated by DspHq from BittWare Research Systems **********/
  3.  
  4. /********** To create executable: d3make -Q -m6 <filename>.s **********/
  5.  
  6. /******************* FILTER PARAMETERS *******************/
  7. /*                                                       */
  8. /*                     Type = Lo Pass                    */
  9. /*                   Length = 35                         */
  10. /*                   Window = Blackman                   */
  11. /*              Corner (Hz) = 5000.0000                  */
  12. /*              Sample Rate = 50000.0000                 */
  13. /*                                                       */
  14. /*********************************************************/
  15.  
  16. .global fircoef, isamp, adc1, static1, numtaps
  17. .global begin, input, _fir, output
  18.  
  19. #include <dspregs.h>
  20. #define FIRLENGTH 35
  21.  
  22. begin:
  23.      r5 = 0x0000                     /* SETUP CONTROL REGISTERS */
  24.      pcw = r5
  25.      ioc=0x30CC0                    /* SET-UP A/D-D/A INTERFACE */
  26.      r5e = isamp         /* r5 POINTS TO INPUT (FLOATING POINT) */
  27.      r8e=adc1                    /* ADDRESS TO STORE INPUT DATA */
  28.      r7e=numtaps                       /* NUMBER OF FILTER TAPS */
  29.      r1 = *r7                  /* r1 = LENGTH OF THE FIR FILTER */
  30.      r3e = static1             /* r3 POINTS TO STATIC VARIABLES */
  31.      r1 = r1 - 3
  32.  
  33. input:
  34.      if (ibe) goto input               /* WAIT FOR INPUT SAMPLE */
  35.      r2e = fircoef                 /* r2 POINTS TO COEFFICIENTS */
  36.      *r8=ibufe                              /* STORE INPUT DATA */
  37.  
  38. _fir:
  39.      r4e = static1             /* r4 POINTS TO STATIC VARIABLES */
  40.      *r5=a0=float(*r8)         /* CONVERT INPUT SAMPLE TO FLOAT */
  41.      a1 = *r4++ * *r2++                     /* CALCULATE FILTER */
  42.      do 0, r1
  43.        a1 = a1 + (*r3++ = *r4++) * *r2++    
  44.      a0 = a1 + (*r3 = *r5) * *r2
  45.      *r8=a1=int(a0)                      /* STORE FILTER OUTPUT */
  46.  
  47. output:
  48.      if (obf) goto output              /* WAIT TO OUTPUT RESULT */
  49.      r3e = static1              /* r3 POINTS TO STATIC VARIABLE */
  50.      goto input                               /* REPEAT FOREVER */
  51.      obufe = *r8                               /* OUTPUT SAMPLE */
  52.  
  53. adc1:    int 0                             /* TEMP DATA STORAGE */
  54. adc2:    int 0                             /* TEMP DATA STORAGE */
  55. numtaps: int FIRLENGTH
  56. .align 4                                    /* ALIGN FOR FLOATS */
  57. isamp: float 0.0
  58.  
  59.                        /* FILTER COEFFICIENTS, IN REVERSE ORDER */
  60. fircoef:
  61. float  2.41339171584499e-0022
  62. float -3.63815116361828e-0005
  63. float -3.54841321262760e-0019
  64. float  4.08280941759535e-0004
  65. float  1.34778056162632e-0003
  66. float  2.44176628595806e-0003
  67. float  2.53296567345739e-0003
  68. float  5.92525344561383e-0018
  69. float -6.13739120789658e-0003
  70. float -1.46633790561929e-0002
  71. float -2.11398625436992e-0002
  72. float -1.85432189080892e-0002
  73. float -1.92621160758614e-0017
  74. float  3.72739122727084e-0002
  75. float  8.88784651858499e-0002
  76. float  1.43094263118753e-0001
  77. float  1.84494264387537e-0001
  78. float  2.00000000000000e-0001
  79. float  1.84494264387537e-0001
  80. float  1.43094263118753e-0001
  81. float  8.88784651858499e-0002
  82. float  3.72739122727084e-0002
  83. float -1.92621160758614e-0017
  84. float -1.85432189080892e-0002
  85. float -2.11398625436992e-0002
  86. float -1.46633790561929e-0002
  87. float -6.13739120789658e-0003
  88. float  5.92525344561383e-0018
  89. float  2.53296567345739e-0003
  90. float  2.44176628595806e-0003
  91. float  1.34778056162632e-0003
  92. float  4.08280941759535e-0004
  93. float -3.54841321262760e-0019
  94. float -3.63815116361828e-0005
  95. float  2.41339171584499e-0022
  96.  
  97. .rsect ".ram1"   /* LESS WAITS IF STATICS IN DIFFERENT RAM BANK */
  98. static1:
  99.      (FIRLENGTH-1)*float 0.0                /* STATIC VARIABLES */
  100.  
  101.