In case anyone wants to know, I got my answer from TI that the DSP can only be
a slave when using the CE API and answers to a few
other questions I asked:
-------------------------------------------------------------------------------------------------------------------
Hi Andy,
Here is the response I got back from our software support team
"From a CE point of view the DSP is the server. There is not a task that I know
of that is running on the DSP that has callback to the ARM.
Multi-threaded applications must either serialize access to a shared Engine
instance or create a separate Engine instance for each thread. Note: Be aware
that Engine handles are not thread-protected. Each thread that uses an Engine
instance should perform its own Engine_open call and use its own Engine handle.
This protects each Engine instance from access by other threads in a
multi-threaded environment."
In conclusion, the answer to your first question is that no DSP task calls on
the ARM; after thinking about it a bit more, even if you passed an ARM function
pointer into the DSP, in order for the DSP to call this ARM function, it would
have to do it via the RPC mechanism via which the ARM and the DSP communicate.
Unfortunately, this RPC mechanism appears to be unidirectional (ARM to DSP) and
to change it, you would need codec engine source code which we do not give out.
The answer to your second question is pretty clear from the explanation above.
Unfortunately, this is probably not what you wanted to hear but hopefully these
answers will help you make the right decisions. Let us know if there is
anything else we can assist you with.
Best Regards,
Juan Gonzales
DSP Applications
Texas Instruments
Semiconductor Technical Support
http://www-k.ext.ti.com/sc/technical_support/pic/americas.htm
If you have further questions please reply to this email. And see the DSP
Knowledge Base located at
http://www-k.ext.ti.com/sc/technical-support/knowledgebase.asp?dsp
Also try the DSP Discussion Groups: A Place to Exchange Ideas with Fellow DSP
Developers located at
http://focus.ti.com/dsp/docs/dspsupporto.tsp?sectionId=3&tabId=413
TI assumes no liability for applications assistance or customer product design.
Customer is fully responsible for all design decisions and engineering with
regard to its products, including decisions relating to application of TI
products. By providing technical information, TI does not intend to offer or
provide engineering services or advice concerning Customer's design. If
Customer desires engineering services, the Customer should rely on its retained
employees and consultants and/or procure engineering services from a licensed
professional engineer (LPE).
-----Original Message-----
Juan,
Thanks for your response. I understood what you are saying in answering
question #3. I understand the basic idea behind the codec framework and
xDAIS/xDM compliant DSP algorithms. The VISA / Code Engine API looks like a
client-server API where the ARM (the client, master) asks the DSP (the server,
slave) to process (encode/decode) data and return the processed data to the
ARM. However, what I was trying to ask is: If we use the VISA / CE API, is
there also a way for the DSP to act as the master initiator and tells the ARM
side (now a slave) to do something? For example, I want to have a task that
runs under the DSP/BIOS within the CE Server on the DSP side and want it to
command the ARM side to do something. So basically, I want to use the VISA /
CE API method but also want to expand it to make the DSP act as a master
requesting the ARM to process data also. If the VISA / CE API doesnt allow
that, does that mean I have to abandon VISA / CE API method and come up
with my own xDAIS/xDM algorithm to do what I want (I rather not because the
VISA / CE API method is readily available for use)? Please advise. Thank you.
I would like to ask another question: When I create an instance of a codec,
(lets use the sphenc_copy codec as an example, it has the SPHENCCOPY_TI_process
and SPHENCCOPY_TI_control functions), can different threads on the ARM side
call the different support functions of that instance at the same time? For
example, on the ARM application, thread 1 calls SPHENCCOPY_TI_process but gets
interrupted by thread 2, which calls SPHENCCOPY_TI_control. Will this cause a
reentrant issue? Lets say those 2 functions dont access come data on the DSP
side.
Thanks!
----- Original Message ----
From: Andy Ngo <[EMAIL PROTECTED]>
To: "Ring, Chris" <[EMAIL PROTECTED]>; Jean-Michel Mercier <[EMAIL PROTECTED]>;
[email protected]
Sent: Monday, January 15, 2007 1:23:54 PM
Subject: Can the DSP be a master besides being a slave in the CE API
I figured out the smallest unit on the C64+ is a byte and data can be aligned
to non-even boundaries; I was asking because I was using the C5510 last year
and it was 16-bit aligned only.
On a different topic, (Chris/Jean-Michel, sorry for addressing you directly,
but you guys seem to be the most experienced), can we do much stuff on the DSP
side other than it only being a encode/decode "slave" server to the ARM side
via the CE API? For example, can I implement a "master" process/task under the
DSP/BIOS OS on the DSP side and have it initiate a intercommunication operation
(across shared memory) where the ARM (now a slave) is waiting for data? If so,
where do I find the documentation on how to do this? Thanks.
Regards,
Andy Ngo
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source