DSPRelated.com
Forums

Data transfer on Blackfin

Started by sriram2480 August 12, 2003
Hi all
May be a simple question.I want to know how to "non-dma" the data
parallelely from the internal mem-ext.mem on blackfin(which interface
to use,and the registers).
Thank U
sriram




Maybe like this

- Read int mem, put result in one register. Increment
a pointer.
- Write the value (from the register) to ext. mem.
Increment a pointer.

Too dumb? Too slow...

JaaC

--- sriram2480 <> wrote:
> Hi all
> May be a simple question.I want to know how to
> "non-dma" the data
> parallelely from the internal mem-ext.mem on
> blackfin(which interface
> to use,and the registers).
> Thank U
> sriram >
>
> _____________________________________
> 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:
>
> To Join: Send an email to > To Post: Send an email to
>
> To Leave: Send an email to > Archives: http://groups.yahoo.com/group/adsp
>
> Other Groups: http://www.dsprelated.com/groups.php3 > ">http://docs.yahoo.com/info/terms/


=====

Jaime Andr Aranguren Cardona

__________________________________


--- In , "sriram2480" <sriram2480@y...> wrote:
> Hi all
> May be a simple question.I want to know how to "non-dma" the data
> parallelely from the internal mem-ext.mem on blackfin(which
interface
> to use,and the registers).
> Thank U
> sriram

All Blackfin resources are mapped into a flat 32 bit address space,
including configuration registers. The information on how to
read/write to the different chunks in this memory space is found in
Chapter 6 of the hardware reference manual, which you can download
from www.analog.com.

The instructions to read/write memory are the same regardless of
what memory is being addressed. Basically, you put the desired
address into a pointer register of your choice, then read/write
indirect to/from the data register of your choice using the pointer:

P1.h = 0xa000; //set hi address
P1.l = 0x55aa; //set lo address
R3 = [ P1 ++ ]; // read 32 bit word at 0xa00055aa into R3 and
increment P1 by 4 bytes
[ P1 -- ] = R3; //write 32 bit value in R3 to $a00055ae and
decrement P1 by 4 bytes.

There are also 16 bit and 8 bit reads and writes. The software
manual gives more detail. Only indirect read/writes through the
pointer registers are possible in general, though you can add a
constant to the pointer to index into an array of memory values.

Though the instruction syntax is easy, what the processor does with
the instruction depends on a lot of things. For example, only
reads/writes to external memory will activate the external processor
buss, which are lines desribed in the External Buss Unit chapter 18.

You nave to worry about several things: Setting the right wait
states for the memory range you activate, watching byte alignment,
making sure your data is little-endian, and making sure you have
permissions set to access the memory chunk. If you have cache
enabled you have to worry about a bunch of other things. A lot of
work just to get stuff in/out, but that's the way things are these
days. The EZ kit boot loader sets up a couple of memory chunks for
you, so you might want to look at that code.

Hope this helps.
Glenn Dixon