DSPRelated.com
Forums

ADSP-218x SPORT0 Tx trouble

Started by Jaime Andres Aranguren Cardona June 9, 2004
Hello,

I have a setup where an ADSP-2188N is connected to an audio codec 
which acts as master (the codec), generating bclk0, tfs0, rfs0, and 
of course dr0. These signals seem to be ok with an o'scope.

I configured SPORT0 as follows:
- multichannel disabled.
- tfs and rfs required.
- tfs and rfs external.
- 16 bit data.
- external clock.
- normal framing.
- non-inverted framing.

I set IMASK to 0x020 to enable SPORT0 Rx interrupts and SYSCON = 
SYSCON | 0x1000 to enable SPORT0.

I also set an ISR for SPORT0 Rx interrupt servicing. On it, I just do 
this:

toggle fl1;
ax0 = rx0;
tx0 = ax0;
rti;

So, this is a very simple talktrough program. With an o'scope, I can 
see the fl1 pin toggling at the same rate as the rfs0 signal as 
expected, which indicates that the interrupt is being serviced. tfs0 
is the same signal as rfs0, and is being generated by the codec. 
however, I see no data at all coming out the dt0 pin, still see data 
in the dr0 pin...

I also changd to:

toggle fl1;
ax0 = rx0;
tx0 = 0x7F;
rti;

expecting to see some signals out the dt0 pin, but still the same: 
nothing.

Something weird is the fact that while the program is not runnig, the 
framing signals rise upto 3.3V as normal, but when the program runs, 
that signal preserves its shape and timing but with amplitude of 
around 0.8V. Why?

Has anyone experienced problems like mine? Any hints are very 
appreciated.

Regards,

JaaC
Thank you everybody,

Well, it was my fault... I was writting 0x240 to the SPORT0 Control
Register... I don't know why, maybe I was a bit distracted. I changed
to 0x281F and worked without problems.

I've got another question. Suppose all the signals, except DT0 are
generated externally, SPORT0 acting as a slave in some sense. When
using SPORT0 in Multichannel mode, it can only be 24 or 32 words per
frame, there is no way to change that, right? Well, let's suppose I
set things up to receive (and send) 24 words, but just need channels 0
and 1. What happens if the timing between RFS0s is longer than the
time for 384 (= 16 x 24) bit clocks? In other words, what happens if
the SPORT0 is configured for 24 words, but the framing time allows for
more than 24 words? I'd expect the SPORT to receive the 2 first words
(channels 0 and 1 are active), then wait for 22 more words (352 bit
clocks) then do nothing, just wait for the next assertion of RFS0. Am
I right?

And what happens if the time between frames (the time between
assertions of RFS0) is SHORTER than the time for 24 words, SHORTER
than 384 bit clocks? What would happen if at bit clock 250 or 272 I
receive RFS0 again, before the whole frame of 24 words (384 bit
clocks) has been received? That would mean that I just received 15.625
or 17 words in the frame, instead of the 24 words that were expected.
In that case what happens: does the SPORT0 stops receiveing the 24
word frame and restarts receiveing a new one (channles 0 and 1
successfuly aquired), or does the SPORT still wait for the remaining
frames, then waits for the next RFS0??

All of your help is very welcome.

Regards,

JaaC


jaime.aranguren@ieee.org (Jaime Andres Aranguren Cardona) wrote in message news:<14a86f87.0406090726.7d3153ee@posting.google.com>...
> Hello, > > I have a setup where an ADSP-2188N is connected to an audio codec > which acts as master (the codec), generating bclk0, tfs0, rfs0, and > of course dr0. These signals seem to be ok with an o'scope. > > I configured SPORT0 as follows: > - multichannel disabled. > - tfs and rfs required. > - tfs and rfs external. > - 16 bit data. > - external clock. > - normal framing. > - non-inverted framing. > > I set IMASK to 0x020 to enable SPORT0 Rx interrupts and SYSCON = > SYSCON | 0x1000 to enable SPORT0. > > I also set an ISR for SPORT0 Rx interrupt servicing. On it, I just do > this: > > toggle fl1; > ax0 = rx0; > tx0 = ax0; > rti; > > So, this is a very simple talktrough program. With an o'scope, I can > see the fl1 pin toggling at the same rate as the rfs0 signal as > expected, which indicates that the interrupt is being serviced. tfs0 > is the same signal as rfs0, and is being generated by the codec. > however, I see no data at all coming out the dt0 pin, still see data > in the dr0 pin... > > I also changd to: > > toggle fl1; > ax0 = rx0; > tx0 = 0x7F; > rti; > > expecting to see some signals out the dt0 pin, but still the same: > nothing. > > Something weird is the fact that while the program is not runnig, the > framing signals rise upto 3.3V as normal, but when the program runs, > that signal preserves its shape and timing but with amplitude of > around 0.8V. Why? > > Has anyone experienced problems like mine? Any hints are very > appreciated. > > Regards, > > JaaC