DSPRelated.com
Forums

Re: Data Acquisition using AD9954, DMA, and ways to optimize TMS320C6713 usage while data collection is in progress

Started by Andrew Elder January 29, 2008
We have had success using EDMA "chaining" (TI calls it linking?) in conjunction with a ping-pong buffer. One set of EDMA parameters sends data to the "ping" buffer and on completion automatically kicks off the EDMA to the "pong" buffer.

Using this method you have almost the entire duration of the buffer collection to service the interrupt because the EDMA is now running on the "other" buffer.

Don't forget to make the source and destination of the EDMA internal SRAM. When the EDMA subsystem and the CPU both request access to the external bus, the CPU always wins. This can cause EDMA events to be missed.

- Andrew E.

----- Original Message ----
From: Adolf Klemenz
To: William C Bonner ; DSPgroup
Sent: Tuesday, January 29, 2008 3:43:39 AM
Subject: Re: [c6x] Data Acquisition using AD9954, DMA, and ways to optimize TMS320C6713 usage while data collection is in progress

William,

At 13:41 28.01.2008 -0800, William C Bonner wrote:
>When I tried to work so that the next set of ramp data was being
>collected while I processed the previous set, the result that I saw on
>an oscilloscope was sort of a stuttering set of ramps. I believe that
>the stuttering was caused by interrupts not being able to be serviced
>during some of the signal processing that I was doing.

This is quite likely on a C6x: most, if not all, of TI's optimized
signal
processing functions from dsplib and imglib turn off interrupts during
execution. These functions make excessive use of software pipelining,
and
any interrupt would mess-up the SW-pipeline.

Small looped calculations like average, RMS, etc. may disable
interrupts
too: if optimized, the code often fits into the 5 delay slots of the
loop's
branch instruction. Branch and its delay slots are not interuptable,
hence
the entire loop will block interrupts.

You should use the -mi compiler switch (must iterate) to define a
threshold
how many cycles the code is allowed to block interrupts. If using
dsplib/imglib functions try processing smaller sets of data to minimize
the
blocking time.
>What I'm wondering is if there's a way I can program the DMA
controller
>to string together a series of ramps without having to service
anything
>in the main execution thread of the processor.

This depends on the size and arrangement of your data. It is possible
to
perform automatic sorting using the IDX field, but the "jump width" is
limited to +/-32k Bytes. Chaining can be used to start another EDMA
once
the current process is finished. Please look at the examples in
spru234c.pdf

Best Regards,
Adolf Klemenz, D.SignT

Check Out Industry's First Single-Chip, Multi-Format, Real-Time HD
Video Transcoding Solution for Commercial & Consumer End Equipment:
www.ti.com/dm6467

____________________________________________________________________________________
Looking for last minute shopping deals?
Find them fast with Yahoo! Search. http://tools.search.yahoo.com/newsearch/category.php?category=shopping
Check Out Industry's First Single-Chip, Multi-Format, Real-Time HD Video Transcoding Solution for Commercial & Consumer End Equipment: www.ti.com/dm6467