DSPRelated.com
Forums

PCM3003 - no stereo output

Started by Truth Master October 13, 2002
Hello group,

I am using the C6711 DSK with the PCM3003 daughter card. Ever since I
changed operating systems (win98--->winXP), my PCM3003 doesn't seem to want
to output both a right and left channel in interrupt-driven mode. I have
gotten it to work sporadically in polling mode, but this is not my preferred
setup. The code (which seemingly couldn't get much simpler) is posted
below; note that whichever channel I output to _last_ is the one that
actually gets output (in this case, right): //////////////////////////////
float Fs = 16000.0;

interrupt void c_int11() //interrupt service routine
{
output_left_sample(input_left_sample()); //output sample
output_right_sample(input_right_sample()); //output sample
}

void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); //drop to idle loop
}
///////////////////////////// TIA,
Strangled Goat



Truth Master-

What does changing host OS have to do with interrupts on the C6711 processor?

Are you using a Visual Studio program via C DLLs to talk to the C6711 HPI while
it's
running? Some other host interaction? Otherwise, there's no connection.
Something
else is the problem.

Jeff Brower
DSP sw/hw engineer
Signalogic Truth Master wrote:
>
> Hello group,
>
> I am using the C6711 DSK with the PCM3003 daughter card. Ever since I
> changed operating systems (win98--->winXP), my PCM3003 doesn't seem to want
> to output both a right and left channel in interrupt-driven mode. I have
> gotten it to work sporadically in polling mode, but this is not my preferred
> setup. The code (which seemingly couldn't get much simpler) is posted
> below; note that whichever channel I output to _last_ is the one that
> actually gets output (in this case, right):
>
> //////////////////////////////
> float Fs = 16000.0;
>
> interrupt void c_int11() //interrupt service routine
> {
> output_left_sample(input_left_sample()); //output sample
> output_right_sample(input_right_sample()); //output sample
> }
>
> void main()
> {
> comm_intr(); //init DSK, codec, McBSP
> while(1); //drop to idle loop
> }
> /////////////////////////////
>
> TIA,
> Strangled Goat



Truth Master

> I was mistaken into believing that my code snippet was working under
> Win98, when in actuality it wasn't. I didn't realize that the
> output_sample() function could be used with the PCM3003 (as it can be
> with the C6711) to output both the right and left channels
> simultaneously; my convoluted thinking was stuck on using both the
> left and right output functions individually...I'm still not sure why
> this doesn't work the way I envisioned it...some digging into the
> function prototypes may answer this puzzle. In any case, I am up and
> running using the single output_sample(input_sample()).

If you're saying that output_sample() and input_sample() work on a 2-integer
array,
and thus can be used to do stereo I/O, then it may be that the individual sample
routines are not working due to timing-related problems.

Since the PCM3003 is using a McBSP (serial port) interface, then the typical
method
is to handle different channels with 2 successive interrupts. What might be
happening is that the second write to the serial port is bouncing off, because
the
port is not ready to accept 2 words, or the 2nd word is mis-interpreted as a
control
word, etc.

Another common -- and faster -- method for interrupt-driven, multichannel McBSP
interfaces is to treat the data as buffers containing interleaved channel data,
and
use EDMA with the McBSP.

Jeff Brower
DSP sw/hw engineer
Signalogic > --- In c6x@y..., Jeff Brower <jbrower@s...> wrote:
> > Truth Master-
> >
> > What does changing host OS have to do with interrupts on the C6711
> processor?
> >
> > Are you using a Visual Studio program via C DLLs to talk to the
> C6711 HPI while it's
> > running? Some other host interaction? Otherwise, there's no
> connection. Something
> > else is the problem.
> >
> > Jeff Brower
> > DSP sw/hw engineer
> > Signalogic
> >
> >
> > Truth Master wrote:
> > >
> > > Hello group,
> > >
> > > I am using the C6711 DSK with the PCM3003 daughter card. Ever
> since I
> > > changed operating systems (win98--->winXP), my PCM3003 doesn't
> seem to want
> > > to output both a right and left channel in interrupt-driven
> mode. I have
> > > gotten it to work sporadically in polling mode, but this is not
> my preferred
> > > setup. The code (which seemingly couldn't get much simpler) is
> posted
> > > below; note that whichever channel I output to _last_ is the one
> that
> > > actually gets output (in this case, right):
> > >
> > > //////////////////////////////
> > > float Fs = 16000.0;
> > >
> > > interrupt void c_int11() //interrupt service routine
> > > {
> > > output_left_sample(input_left_sample()); //output sample
> > > output_right_sample(input_right_sample()); //output sample
> > > }
> > >
> > > void main()
> > > {
> > > comm_intr(); //init DSK, codec, McBSP
> > > while(1); //drop to idle loop
> > > }
> > > /////////////////////////////
> > >
> > > TIA,
> > > Strangled Goat