Good day Sirs,|
I need your help on setting up SHARC (ADSP-21160M) DMA chaining for
interrupting the DSP core when a whole block of data has arrrived,
not only sample based.
I use a AD1881 AC'97 CODEC attached to SPORT1. BTW, ADDS-21160M EzKit
Lite (the old one by SpectrumSignal). I have the system set up in
such a way that although it already fires an interrupt when 5 TDM
timeslots arrive from the CODEC, I need it to fire the interrupt
every 5*BLOCKSIZE TDM timeslots arrive. It's because the AC'97 codec
sends also some side information wich actually doesn't contain any
audio information. So, what I want to do is to get the 5*BLOCKSIZE
timeslots in the DMA receive buffer, and once this buffer is full,
fire up a DMA interrupt and move the valid audio data (slot 3 for
left channel and slot 4 for right channel) to other buffers to start
processing my blocks if audio data.
What I did was changing the DMA receive buffer from length 5 to
length 5*BLOCKSIZE, as well as the counter parameter in the TCB,
within a routine which fired up the interrupt everytime the 5
timeslots buffer was ready (3 first slots are useless side info, the
other two are the left and right channel audio info). It was supposed
to work (my "reconfiguration") and it almost did, but I found that
say every 10 - 12 audio samples I get ALWAYS zero valued samples,
which is absolutely wrong.
What else should I take care of? Am I missing something else? Still
better, I would thank well commented "drivers" for performing block
processing in either C or ASM language on SHARCS using this kind of
CODECs: AD1819 and AD1881 families.
I've already had a look to Mr. Tomorakos docs on interfacing SHARCs
(both ADSP-21165L and ADSP-21161N) to this kind of CODECs, but from
what I read my approach should work. So, if have other resources to
point to, better for me.
Thanks a lot in advance,