Forums

Using ESSI with DMA on a DSP56853

Started by StevenLo_98 February 14, 2005

Hi all,
Can someone offer some help with DSP56853 DSP ESSI with DMA?
My application is used the 56853 to interface a multiple channel audio
codec from Analog device.

My 1st attempt was to code it with interrupt driven routines and that
was ok. I used one of the D/A channel as the signal source, a A/D
channel to sample the signal and D/A out again on a 2nd D/A output.

2nd attempt was to change over to DMA, I had also disabled the Tx & Rx
FIFOs. The 1st D/A was working but the A/D part did not seem to be
working. I set a break point at the interrupt service routine for Rx
DMA complete, it DMA buffer shown that the data points were always
dulplicate once (ie, every data point came as a pair). I'm ended up
double the buffer size and use every second data sample.
I could not figure out why did it happen like that, may be I got one
DMA request for the data receive and anothe DMA request at the end of
the frame? I was setting ESSI in network mode and I checked that the
RLIE bit was cleared.

Regards

Steven




>Hi all,
>Can someone offer some help with DSP56853 DSP ESSI with DMA?
>My application is used the 56853 to interface a multiple channel audio
>codec from Analog device.
>
>My 1st attempt was to code it with interrupt driven routines and that
>was ok. I used one of the D/A channel as the signal source, a A/D
>channel to sample the signal and D/A out again on a 2nd D/A output.
>
>2nd attempt was to change over to DMA, I had also disabled the Tx & Rx
>FIFOs. The 1st D/A was working but the A/D part did not seem to be
>working. I set a break point at the interrupt service routine for Rx
>DMA complete, it DMA buffer shown that the data points were always
>dulplicate once (ie, every data point came as a pair). I'm ended up
>double the buffer size and use every second data sample.
>I could not figure out why did it happen like that, may be I got one
>DMA request for the data receive and anothe DMA request at the end of
>the frame? I was setting ESSI in network mode and I checked that the
>RLIE bit was cleared.

I ran into exactly the same problem interfacing a DSP56858 with a Si3210 SLIC/CODEC (in 16-bit linear mode) and have also had to double the buffer size and drop every second sample. Did you end up finding a solution? Tim


A few years ago, I developed a Codec/ESSI/DMA Driver for the 56858 using the SDK. I never saw what you two are seeing. I just re-ran the loopback test and I didn't see double samples being received.

The Codec used was a Crystal codec that is on the 56858EVM. The ESSI was configured for network mode with two time slots. The clock and frame sync were externally generated. I used DMA Channel 4 for the ESSI0 Receiver. I used DMA Channel 5 for the ESSI0 Transmitter.

While running the application, I stopped the debugger and checked the ESSI0 and DMA registers. Here they are:

ESSI0:
0: 0EB1
1: 0000
2: 0000
3: 4A00
4: F1C8
5: 9B30
6: 009B
7: 0004
8: 3A61
9: 3A61
A: 0000
B: 0000
C: FFFF
D: FFFF
E: FFFF
F: FFFF

DMA4:
0: 7270
1: 0000
2: 2000
3: 2806
4: 0000
5: 23FE
6: 1F00

DMA5:
0: 8870
1: 0000
2: 2000
3: 20FE
4: 1F00
5: E805
6: 0000

Maybe you can compare your configuration with mine and see if anything sticks out.

Jeff
>
>
>>Hi all,
>>Can someone offer some help with DSP56853 DSP ESSI with DMA?
>>My application is used the 56853 to interface a multiple channel audio
>>codec from Analog device.
>>
>>My 1st attempt was to code it with interrupt driven routines and that
>>was ok. I used one of the D/A channel as the signal source, a A/D
>>channel to sample the signal and D/A out again on a 2nd D/A output.
>>
>>2nd attempt was to change over to DMA, I had also disabled the Tx & Rx
>>FIFOs. The 1st D/A was working but the A/D part did not seem to be
>>working. I set a break point at the interrupt service routine for Rx
>>DMA complete, it DMA buffer shown that the data points were always
>>dulplicate once (ie, every data point came as a pair). I'm ended up
>>double the buffer size and use every second data sample.
>>I could not figure out why did it happen like that, may be I got one
>>DMA request for the data receive and anothe DMA request at the end of
>>the frame? I was setting ESSI in network mode and I checked that the
>>RLIE bit was cleared.
>
>I ran into exactly the same problem interfacing a DSP56858 with a Si3210 SLIC/CODEC (in 16-bit linear mode) and have also had to double the buffer size and drop every second sample. Did you end up finding a solution? >Tim >



This leads me to ask for some help.  The codec driver (non-DMA) that came with SDK for DSP56858 is set up to loop the audio back.
 
To be useful, this driver needs to be reworked to separate the left and right audio channels (which the supplied driver doesn't do) so they can be processed separately and then recombined for retranmission.
 
The old assembly language routines for DSP56000/1/2 had easy access to the left and right channel audio.
 
Any suggestions on the best way to separate them for DSP56858?  The C-code is deeply nested and a bit hard to follow.

j...@freescale.com wrote:
A few years ago, I developed a Codec/ESSI/DMA Driver for the 56858 using the SDK.  I never saw what you two are seeing.  I just re-ran the loopback test and I didn't see double samples being received.

The Codec used was a Crystal codec that is on the 56858EVM.  The ESSI was configured for network mode with two time slots.  The clock and frame sync were externally generated.  I used DMA Channel 4 for the ESSI0 Receiver.  I used DMA Channel 5 for the ESSI0 Transmitter.

While running the application, I stopped the debugger and checked the ESSI0 and DMA registers.  Here they are:

ESSI0:
0: 0EB1
1: 0000
2: 0000
3: 4A00
4: F1C8
5: 9B30
6: 009B
7: 0004
8: 3A61
9: 3A61
A: 0000
B: 0000
C: FFFF
D: FFFF
E: FFFF
F: FFFF

DMA4:
0: 7270
1: 0000
2: 2000
3: 2806
4: 0000
5: 23FE
6: 1F00

DMA5:
0: 8870
1: 0000
2: 2000
3: 20FE
4: 1F00
5: E805
6: 0000

Maybe you can compare your configuration with mine and see if anything sticks out.

Jeff

>
>   
>   

>>Hi all,  
>>Can someone offer some help with DSP56853 DSP ESSI with DMA?  
>>My application is used the 56853 to interface a multiple channel audio  
>>codec from Analog device.  
>>  
>>My 1st attempt was to code it with interrupt driven routines and that  
>>was ok. I used one of the D/A channel as the signal source, a A/D  
>>channel to sample the signal and D/A out again on a 2nd D/A output.  
>>  
>>2nd attempt was to change over to DMA, I had also disabled the Tx & Rx  
>>FIFOs. The 1st D/A was working but the A/D part did not seem to be  
>>working. I set a break point at the interrupt service routine for Rx  
>>DMA complete, it DMA buffer shown that the data points were always  
>>dulplicate once (ie, every data point came as a pair). I'm ended up  
>>double the buffer size and use every second data sample.  
>>I could not figure out why did it happen like that, may be I got one  
>>DMA request for the data receive and anothe DMA request at the end of  
>>the frame? I was setting ESSI in network mode and I checked that the  
>>RLIE bit was cleared. 

>I ran into exactly the same problem interfacing a DSP56858 with a Si3210 SLIC/CODEC (in 16-bit linear mode) and have also had to double the buffer size and drop every second sample. Did you end up finding a solution? 


>Tim 






>               

>


NEW!  You can now post a message or access and search the archives of this group on DSPRelated.com:
http://www.dsprelated.com/groups/motoroladsp/1.php

_____________________________________
Note: If you do a simple "reply" with your email client, only the author of this message will receive your answer.  You need to do a "reply all" if you want your answer to be distributed to the entire group.

_____________________________________
About this discussion group:

Archives:  http://www.dsprelated.com/groups/motoroladsp/1.php

To Post:  Send an email to m...@yahoogroups.com

Other DSP Related Groups: http://www.dsprelated.com/groups.php


The codec driver actually uses the ESSI driver. The ESSI driver was developed to be simple and fast. If the data needed to be parsed due to having multiple time slots, then it was left to the application to do it. Another reason for using one buffer is it would have the same result (data is one buffer) as using the DMA driver because the DMA can't distinguish between the different time slots.

If I were to try parsing the samples in the driver, it would have been much more complex. Depending on the implementation, it would have required more configuration parameters, more pointers to buffers, and possibly more API functions. For those customers using one time slot, this would have been overkill.

I recommend looking at the TDC1 driver that was also provided in the SDK. This driver does not use the ESSI driver. It actually parses the data, but it was written specifically for a DAA/Codec on the TDC1 daughter card. There was some specific timing requirements that had to be met in the interrupt service routines, so the driver had to be written this way. This driver is much more complex.

You can modify the ESSI driver to parse the data at a lower level, but I don't think it will buy you anything because it will require the same amount of code and time to do it.

If you want to keep the parsing hidden from the application, you can create a function that parses the data for you. You could pass in the time-slot to read, a pointer to where the data should be stored, and the number of samples to read. The function would then call codecRead(). codecRead() would return the un-parsed samples. The new function would then put the samples in their appropriate time-slot buffers. The new function would then copy the desired number of samples from the select time-slot buffer to the pointer that was passed in.

The same can be done for writing data to the codec, just in the reverse order.

> This leads me to ask for some help. The codec driver (non-DMA) that came with SDK for DSP56858 is set up to loop the audio back.
>
> To be useful, this driver needs to be reworked to separate the left and right audio channels (which the supplied driver doesn't do) so they can be processed separately and then recombined for retranmission.
>
> The old assembly language routines for DSP56000/1/2 had easy access to the left and right channel audio.
>
> Any suggestions on the best way to separate them for DSP56858? The C-code is deeply nested and a bit hard to follow. wrote:
> A few years ago, I developed a Codec/ESSI/DMA Driver for the 56858 using the SDK. I never saw what you two are seeing. I just re-ran the loopback test and I didn't see double samples being received. The Codec used was a Crystal codec that is on the 56858EVM. The ESSI was configured for network mode with two time slots. The clock and frame sync were externally generated. I used DMA Channel 4 for the ESSI0 Receiver. I used DMA Channel 5 for the ESSI0 Transmitter. While running the application, I stopped the debugger and checked the ESSI0 and DMA registers. Here they are: ESSI0: 0: 0EB1 1: 0000 2: 0000 3: 4A00 4: F1C8 5: 9B30 6: 009B 7: 0004 8: 3A61 9: 3A61 A: 0000 B: 0000 C: FFFF D: FFFF E: FFFF F: FFFF DMA4: 0: 7270 1: 0000 2: 2000 3: 2806 4:
>0000 5: 23FE 6: 1F00 DMA5: 0: 8870 1: 0000 2: 2000 3: 20FE 4: 1F00 5: E805 6: 0000 Maybe you can compare your configuration with mine and see if anything sticks out. Jeff > > > > > >>Hi all, >>Can someone offer some help with DSP56853 DSP ESSI with DMA? >>My application is used the 56853 to interface a multiple channel audio >>codec from Analog device. >> >>My 1st attempt was to code it with interrupt driven routines and that >>was ok. I used one of the D/A channel as the signal source, a A/D >>channel to sample the signal and D/A out again on a 2nd D/A output. >> >>2nd attempt was to change over to DMA, I had also disabled the Tx & Rx
> >>FIFOs. The 1st D/A was working but the A/D part did not seem to be >>working. I set a break point at the interrupt service routine for Rx >>DMA complete, it DMA buffer shown that the data points were always >>dulplicate once (ie, every data point came as a pair). I'm ended up >>double the buffer size and use every second data sample. >>I could not figure out why did it happen like that, may be I got one >>DMA request for the data receive and anothe DMA request at the end of >>the frame? I was setting ESSI in network mode and I checked that the >>RLIE bit was cleared. > >I ran into exactly the same problem interfacing a DSP56858 with a Si3210 SLIC/CODEC (in 16-bit linear mode) and have also had to double the buffer size and drop every second sample. Did you end up finding a
>solution? > > >Tim > > > > > > > > > NEW! You can now post a message or access and search the archives of this group on DSPRelated.com: http://www.dsprelated.com/groups/motoroladsp/1.php _____________________________________ Note: If you do a simple "reply" with your email client, only the author of this message will receive your answer. You need to do a "reply all" if you want your answer to be distributed to the entire group. _____________________________________ About this discussion group: Archives: http://www.dsprelated.com/groups/motoroladsp/1.php To
>Post: Send an email to Other DSP Related Groups: http://www.dsprelated.com/groups.php



Have any of you tried to implement a bootloader for
56364 or any similar DSP? Serial host interface of
56364 only supports SPI and I2C.

Regards

Jose
___________________________________________________________
250MB gratis, Antivirus y Antispam
Correo Yahoo!, el mejor correo web del mundo
http://correo.yahoo.com.ar



Jose,

The 56364 has 4 built-in bootsrtap modes (5 if you count the useless
boot from PROM that contains no code). If you're looking to create a
secondary bootloader at a higher core speed you can simply use the
bootstrap ROM to load your secondary bootloader, program the PLL or do
whatever else you want, then jump back to the bootstrap ROM code to
finish loading the code. If you need to load to XRAM or YRAM you can
simply copy what's in the bootstrap ROM and change the memory area it's
moving to...

--
dB

--- Jose Fuentes <> wrote:
> Have any of you tried to implement a bootloader for
> 56364 or any similar DSP? Serial host interface of
> 56364 only supports SPI and I2C.
>
> Regards
>
> Jose >
> ___________________________________________________________
> 250MB gratis, Antivirus y Antispam
> Correo Yahoo!, el mejor correo web del mundo
> http://correo.yahoo.com.ar
>

__________________________________
Celebrate Yahoo!'s 10th Birthday!
Yahoo! Netrospective: 100 Moments of the Web
http://birthday.yahoo.com/netrospective/



Now I need to create the memory image. Does any of
you have the srec.exe program to convert the .cld file
to s-record format? Below is the link to a program to create a memory
image from a s-record file:

http://www.freescale.com/files/archives/software_tools/code_translation/M68000BFP.txt

Regards

Jose

--- dbaudiopro <> wrote:
> Jose,
>
> The 56364 has 4 built-in bootsrtap modes (5 if you
> count the useless
> boot from PROM that contains no code). If you're
> looking to create a
> secondary bootloader at a higher core speed you can
> simply use the
> bootstrap ROM to load your secondary bootloader,
> program the PLL or do
> whatever else you want, then jump back to the
> bootstrap ROM code to
> finish loading the code. If you need to load to XRAM
> or YRAM you can
> simply copy what's in the bootstrap ROM and change
> the memory area it's
> moving to...
>
> --
> dB
>
> --- Jose Fuentes <>
> wrote:
> > Have any of you tried to implement a bootloader
> for
> > 56364 or any similar DSP? Serial host interface
> of
> > 56364 only supports SPI and I2C.
> >
> > Regards
> >
> > Jose
> >
> >
> >
> >
> >
> >
> >
>
___________________________________________________________
>
> > 250MB gratis, Antivirus y Antispam
> > Correo Yahoo!, el mejor correo web del mundo
> > http://correo.yahoo.com.ar
> >
>
> __________________________________
> Celebrate Yahoo!'s 10th Birthday!
> Yahoo! Netrospective: 100 Moments of the Web
> http://birthday.yahoo.com/netrospective/
>
___________________________________________________________
250MB gratis, Antivirus y Antispam
Correo Yahoo!, el mejor correo web del mundo
http://correo.yahoo.com.ar