Path: utzoo!utgpu!news-server.csri.toronto.edu!rutgers!tut.cis.ohio-state.edu!n8emr!uncle!celebr!jbm From: jbm@celebr.uucp (John B. Milton) Newsgroups: comp.dsp Subject: Re: FIR Chip Info Needed Message-ID: <1990May25.143948.25398@celebr.uucp> Date: 25 May 90 14:39:48 GMT References: <56424@bbn.BBN.COM> Distribution: usa Organization: Celebrezze Committee Lines: 70 In article <56424@bbn.BBN.COM> moyarzun@BBN.COM (Miguel Oyarzun) writes: >Greetings DSPeople, > >I'm trying to pick a FIR filter chip to implement a FIR with the following >rough specs: > > - 12 KHz sampling rate > - 127 tap FIR > - 12 or 16 bits of input > - 12, 16 or more bits of coefficient > - 16 bits of output > >I have looked at the Motorola DSP56200, but it seems like an overkill for >my application. I would prefer a device that requires minimal 'glue'. >If anyone out there in DSPland has recently looked at FIR chips, any info >you could send my way would be greatly appreciated. How about the Analog Devices ADSP210[15]. They have not yet been released, but will prices of about $55 for the 2101 and, get this, $9.90 for the 2105. Both parts are code and pin-for-pin compatible. The 2105 has half the on-chip memory and 1 instead of two serial ports. With a 10MHz clock, they're 10 MIPS. Below is the source to an FIR example on the 2101 simulator demo disk. John --- {******************************************************************************} {This is the ADSP-2100 assembly subroutine that executes the core of an FIR } {filter. This routine is called from a main program (MAIN.DSP) upon an } {interrupt from the input A/D converter. This routine takes its input from an } {A/D and send its output to a D/A converter. } {******************************************************************************} .module/ram/boot=0 FIR_ROUTINE; {Relocatable FIR interrupt module} {The following are some variable, I/O port and subroutine declarations} .include ; {Include constant declaration file} .port AD_SAMPLE; {Declare memory mapped A/D} .port DA_DATA; {Declare memory mapped D/A} .entry FIR; {Entry point to the FIR routine} .external DATA_BUFFER,COEFF,INPUT_DATA,OUTPUT_DATA,COEFP; {The following is the main body of the program} FIR: AY0=TAPS; AR=AY0-1; CNTR=AR; {Set counter to the # of taps minus 1} SI=DM(AD_SAMPLE); {Read new sample from A/D} DM(I1,M1)=SI; {Write sample to memory for} {later display purposes} DM(I0,M0)=SI; {Write sample to circ. buffer} {******The following section executes the convolution for the FIR filter******} MR=0,MX0=DM(I0,M0),MY0=PM(I4,M4); DO TAPLOOP UNTIL CE; TAPLOOP: MR=MR+MX0*MY0 (ss), MX0=DM(I0,M0),MY0=PM(I4,M4); MR=MR+MX0*MY0 (RND); {Filtered output sample} IF MV SAT MR; {If overflow occurred, saturate} {the output} DM(DA_DATA)=MR1; {Write result to D/A} DM(I2,M2)=MR1; {Write result to memory for} {later display purposes} RTI; .endmod; -- John Bly Milton IV, jbm@uncle.UUCP, n8emr!uncle!jbm@osu-cis.cis.ohio-state.edu (614) h:252-8544, w:469-1990; N8KSN, AMPR: 44.70.0.52; Don't FLAME, inform!