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 |
|
Data transfer on Blackfin
Started by ●August 12, 2003
Reply by ●August 13, 20032003-08-13
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 __________________________________ |
Reply by ●August 27, 20032003-08-27
--- 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 |