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
Re: Data Acquisition using AD9954, DMA, and ways to optimize TMS320C6713 usage while data collection is in progress
Started by ●January 29, 2008