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

  1.  
  2. /********* Generated by DspHq from BittWare Research Systems **********/
  3.  
  4. /********** To create executable: d3make -Q -m6 <filename>.s **********/
  5.  
  6. PARMS
  7.  
  8. .global fircoef, isamp, adc1, static1, numtaps
  9. .global begin, input, _fir, output
  10.  
  11. #include <dspregs.h>
  12. FIRLENGTH
  13.  
  14. begin:
  15.      r5 = 0x0000                     /* SETUP CONTROL REGISTERS */
  16.      pcw = r5
  17.      ioc=0x30CC0                    /* SET-UP A/D-D/A INTERFACE */
  18.      r5e = isamp         /* r5 POINTS TO INPUT (FLOATING POINT) */
  19.      r8e=adc1                    /* ADDRESS TO STORE INPUT DATA */
  20.      r7e=numtaps                       /* NUMBER OF FILTER TAPS */
  21.      r1 = *r7                  /* r1 = LENGTH OF THE FIR FILTER */
  22.      r3e = static1             /* r3 POINTS TO STATIC VARIABLES */
  23.      r1 = r1 - 3
  24.  
  25. input:
  26.      if (ibe) goto input               /* WAIT FOR INPUT SAMPLE */
  27.      r2e = fircoef                 /* r2 POINTS TO COEFFICIENTS */
  28.      *r8=ibufe                              /* STORE INPUT DATA */
  29.  
  30. _fir:
  31.      r4e = static1             /* r4 POINTS TO STATIC VARIABLES */
  32.      *r5=a0=float(*r8)         /* CONVERT INPUT SAMPLE TO FLOAT */
  33.      a1 = *r4++ * *r2++                     /* CALCULATE FILTER */
  34.      do 0, r1
  35.        a1 = a1 + (*r3++ = *r4++) * *r2++    
  36.      a0 = a1 + (*r3 = *r5) * *r2
  37.      *r8=a1=int(a0)                      /* STORE FILTER OUTPUT */
  38.  
  39. output:
  40.      if (obf) goto output              /* WAIT TO OUTPUT RESULT */
  41.      r3e = static1              /* r3 POINTS TO STATIC VARIABLE */
  42.      goto input                               /* REPEAT FOREVER */
  43.      obufe = *r8                               /* OUTPUT SAMPLE */
  44.  
  45. adc1:    int 0                             /* TEMP DATA STORAGE */
  46. adc2:    int 0                             /* TEMP DATA STORAGE */
  47. numtaps: int FIRLENGTH
  48. .align 4                                    /* ALIGN FOR FLOATS */
  49. isamp: float 0.0
  50.  
  51.                        /* FILTER COEFFICIENTS, IN REVERSE ORDER */
  52. fircoef:
  53. COEFF
  54.  
  55. .rsect ".ram1"   /* LESS WAITS IF STATICS IN DIFFERENT RAM BANK */
  56. static1:
  57.      (FIRLENGTH-1)*float 0.0                /* STATIC VARIABLES */
  58.  
  59.