嵌入式开发者社区

标题: EDMA3中源地址和目的地址设置问题 [打印本页]

作者: fanxuchao    时间: 2016-9-27 08:47
标题: EDMA3中源地址和目的地址设置问题
/ N# E$ m, ]8 j, V& q6 ]1 K
    用的创龙TL138-A3开发板,裸机,例程是EDMA3。
- o) J5 m  Q/ `0 \
  n( Q8 I  L6 ]7 E, w    例程中可以看到数据的传输,但是貌似没有找到在哪里配置的SRC和DST。 ) }9 [4 Y" U) V6 @
' C. ^7 P4 E4 p
    看了工程编译后的map文件,发现编译完后就已经分配好了,如下:
/ H1 b3 r3 ?8 n% g. i5 v.bss       0    c000c500    000002ec     UNINITIALIZED- f6 q5 R  ~! l
                  c000c500    00000194     system_config.lib : interrupt.obj (.bss:fnRAMVectors)! `, B) S. d2 P
                  c000c694    00000080     (.common:cb_Fxn)0 n& v8 e# j8 d" C  @2 R
                  c000c714    00000064     (.common:_dstBuff)6 @' y( p$ C8 k. {! u
                  c000c778    00000064     (.common:_srcBuff): S* K8 r) k/ M0 o
                  c000c7dc    00000004     (.common:dstBuff): l4 }) W1 d+ T5 E6 v* d
                  c000c7e0    00000004     (.common:irqRaised)* z9 a) H. D. {" w4 b( n0 h
                  c000c7e4    00000004     (.common:regionId)$ i- C, e% P8 \0 u6 U+ S
                  c000c7e8    00000004     (.common:srcBuff)
5 t% K2 u( A4 F' e% [2 L6 y* N! C9 e9 _0 b3 @! D  p
* n/ G1 }6 j- I! u
     如果我想人为的设置源地址和目的地址应该怎么做?2 I  l4 f4 Z) f
  2 }8 G  K  F, m( p3 q' I
    .init:{system_config.lib<init.obj> (.text)} > 0xC0000000
' M4 T4 S6 a9 a5 v    .bss                >  DDR2   RUN_START(bss_start), RUN_END(bss_end)
& f- I2 P) e3 k  f6 x9 Z9 L2 e1 O    .far                        >  DDR2
  y7 O3 i# n8 W8 b" R9 w' N/ ~. C# {/ n* ?. a" h3 X3 ^2 n+ J9 c# T
    还有一个问题就是想请问一下cmd文件中.bss里在DDR2后面的RUN_START(bss_start), RUN_END(bss_end)是什么意思?   , b0 l% V2 Z1 ~7 R/ F5 p6 j; @

: C! f7 Q: P# T$ H( B
作者: human    时间: 2016-9-29 09:42
默认的自动分配地址,你想人为的设置源地址和目的地址,在定义时指定地址就好
- d6 Y& e2 q: P6 q& e9 j" i; evolatile char   _srcBuff[MAX_BUFFER_SIZE];1 O( a: X" o- D- v# M
volatile char   _dstBuff[MAX_BUFFER_SIZE];- R/ U, W1 y/ h* ]: _

2 r+ w) o/ x% {* gvolatile char *srcBuff;  b/ ^6 q/ d  {. L3 f+ y$ e( d
volatile char *dstBuff;
作者: human    时间: 2016-9-29 10:17
CMD文件的相关介绍,请关注http://51dsp.net/forum.php?mod=v ... &extra=page%3D1
作者: fanxuchao    时间: 2016-9-29 13:48
标题: RE: human
请问human,
: X4 ]( [1 L' K1 Z4 C$ F4 ~地址在定义时如何具体指定? 9 \$ ]- z: ~) {" u8 d+ _! T8 G
我这样写是错的。。。$ ]- D+ n- M9 T- T; v' [3 G
volatile char   _srcBuff[MAX_BUFFER_SIZE] = (char*)0xc000c878;
& ^& u/ N+ ?9 T3 _$ d$ m' r* L5 s9 m# W/ m0 o& \: n2 K

作者: liyulin    时间: 2016-9-29 14:18
如果数组地址的话,可以用#pragma DATA_SECTION来指定 ,放到CMD中定义的字段中。
: ?0 R$ l2 e  U如果是配置EDMA的目的和原地址 在EMDA 参数RAM里面配置。
作者: fanxuchao    时间: 2016-9-29 16:11
标题: RE: liyulin
5 e% n8 |3 K8 }7 S
( U) k, W5 T: y4 f+ z
     嗯,我刚才试了一下,用#pragma DATA_SECTION,然后在cmd文件中来指定数组地址是可以实现的。; y( O# T: X2 {8 U" d) G
   
; a, A4 d- a2 ^! m& o6 ~4 L     然而我真正的意图是你说的第二种,我看了参数RAM的配置,程序如下:# ]; c* S' ?6 f7 \" n' s+ f$ W
        
7 U( y; Q0 E( x! h$ m: [        // 给参数 RAM 赋值
8 {9 A; F/ T4 p# A$ f* Z3 H6 s$ k3 D3 g        paramSet.srcAddr    = (unsigned int)(srcBuff);0 ~2 |% F! |3 ]. z6 g5 q' Y( r
        paramSet.destAddr   = (unsigned int)(dstBuff);4 P+ k0 y; d" Y  w* Y( [
   
: L3 ]3 }5 m9 E# V! ^1 q2 ?( G        paramSet.aCnt = (unsigned short)acnt;
" {! ~* g6 l* A( G" x3 E        paramSet.bCnt = (unsigned short)bcnt;( o0 y6 L- x9 N+ ?% b0 Y  \' x
        paramSet.cCnt = (unsigned short)ccnt;5 y# I5 h) [% M# I4 @
8 w- M" }8 U1 w

8 P8 K3 ?0 o% J) A0 y  ?3 h8 s1 U        // 设置 SRC / DES 索引
. q8 k, e3 f. \0 w9 b. b6 j        paramSet.srcBIdx = (short)acnt;" P+ E) K7 ^% [9 m# p
        paramSet.destBIdx = (short)acnt;
! R' I' `3 |! U$ `. v, }' f( f# w0 U0 T! O3 ?* Q8 d! W
  
) J- R. N$ ?  m7 U( P- ^6 s      还没想好在这里怎么人为的把地址给srcAddr和destAddr
$ W% f8 B+ d7 ?# W




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4