嵌入式开发者社区

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

作者: fanxuchao    时间: 2016-9-27 08:47
标题: EDMA3中源地址和目的地址设置问题
" F4 e" f2 ~. k- L; N
    用的创龙TL138-A3开发板,裸机,例程是EDMA3。
( U6 t2 v4 m# }% k& N
. I$ O# {! I, B    例程中可以看到数据的传输,但是貌似没有找到在哪里配置的SRC和DST。 6 @; L" I8 |7 G6 M0 F3 a/ ]- Y

- A- c) ?: N5 L# B    看了工程编译后的map文件,发现编译完后就已经分配好了,如下:! ]. C% G. p* |* t: }
.bss       0    c000c500    000002ec     UNINITIALIZED
8 V- {; f+ f* K                  c000c500    00000194     system_config.lib : interrupt.obj (.bss:fnRAMVectors)0 r' b9 I' [' J
                  c000c694    00000080     (.common:cb_Fxn)
7 f1 C) b. p) |0 b                  c000c714    00000064     (.common:_dstBuff)
7 `1 D" r% I# J( L  E# M* I5 g2 D                  c000c778    00000064     (.common:_srcBuff)
3 k* ?; j/ J! {# X- v                  c000c7dc    00000004     (.common:dstBuff)
6 ]' L! D! z+ o) S' p! V                  c000c7e0    00000004     (.common:irqRaised)' @; r& G- m5 @8 L: m
                  c000c7e4    00000004     (.common:regionId)
( u1 h$ Y* @/ p5 t$ n                  c000c7e8    00000004     (.common:srcBuff)
( g+ e% x' I' @# D4 [
  g, i- _1 \3 R1 e. ^& w) k& \: m2 T' F/ k& [) \4 t: V9 _, U0 ^
     如果我想人为的设置源地址和目的地址应该怎么做?
2 |: O2 V. z& A9 g  
6 W2 e4 v$ l4 f- A2 B* f8 C    .init:{system_config.lib<init.obj> (.text)} > 0xC00000005 x5 p1 Q/ y/ o8 ^5 j; C( Q
    .bss                >  DDR2   RUN_START(bss_start), RUN_END(bss_end). _9 _7 j4 p% s$ h# H
    .far                        >  DDR2% a* g9 Y6 u. e, R
! U( w9 B" U1 @2 A# T% p4 P0 O+ ]& m
    还有一个问题就是想请问一下cmd文件中.bss里在DDR2后面的RUN_START(bss_start), RUN_END(bss_end)是什么意思?   
. h/ E9 ?. V0 o8 P$ [5 F0 Q/ ?8 I: I( |5 t

作者: human    时间: 2016-9-29 09:42
默认的自动分配地址,你想人为的设置源地址和目的地址,在定义时指定地址就好
7 u0 {5 j2 B7 o% i! {volatile char   _srcBuff[MAX_BUFFER_SIZE];
" H) @7 R4 c. Z- fvolatile char   _dstBuff[MAX_BUFFER_SIZE];
& _/ ?" N8 d4 U9 X' A
1 y  _; V6 j( ovolatile char *srcBuff;
) P. ^  |: L+ P. \& ^( i! Evolatile 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,2 E5 r+ _; B2 x, H0 v
地址在定义时如何具体指定? 4 ?1 W8 g3 o3 v( H6 n* W
我这样写是错的。。。1 N* D- E! o1 I8 U, e( x
volatile char   _srcBuff[MAX_BUFFER_SIZE] = (char*)0xc000c878;6 b6 S5 l; S- \- x7 _
2 s0 [) L9 D" Z

作者: liyulin    时间: 2016-9-29 14:18
如果数组地址的话,可以用#pragma DATA_SECTION来指定 ,放到CMD中定义的字段中。: X' @: j: j* d/ N
如果是配置EDMA的目的和原地址 在EMDA 参数RAM里面配置。
作者: fanxuchao    时间: 2016-9-29 16:11
标题: RE: liyulin
: B0 j! V  u# W' U$ i9 a! s8 G
) E$ N( N% X) O2 P9 ^5 _
     嗯,我刚才试了一下,用#pragma DATA_SECTION,然后在cmd文件中来指定数组地址是可以实现的。  h1 S9 a2 Q( S" d, P3 f  B! N2 l
   
0 y7 f: A# H0 ~" ~8 h1 `+ f+ P     然而我真正的意图是你说的第二种,我看了参数RAM的配置,程序如下:
, {4 r+ E! {5 M4 v2 J: L; H! x        0 N! T9 z; t& ^7 {. J# d
        // 给参数 RAM 赋值6 |! M6 ~* D1 h# B9 Y
        paramSet.srcAddr    = (unsigned int)(srcBuff);
+ P) x& m: ~# z  o1 D8 W  ?        paramSet.destAddr   = (unsigned int)(dstBuff);' G0 \4 a7 d1 H6 D* w0 c
   
# i3 e# a$ F' @+ j0 A, b        paramSet.aCnt = (unsigned short)acnt;
! U" i) u% c; |  i) B3 w3 T        paramSet.bCnt = (unsigned short)bcnt;) T: Q$ r5 M2 e5 U; D% R0 P9 t
        paramSet.cCnt = (unsigned short)ccnt;
1 p# Y1 U' M) Q; K' G/ R4 ^& E* }. O

, G3 V9 t5 W3 l2 l2 q        // 设置 SRC / DES 索引4 d& V% {- i' J. z8 d% C
        paramSet.srcBIdx = (short)acnt;0 Z4 u6 ^( b$ h) v8 l* _
        paramSet.destBIdx = (short)acnt;9 ]+ U0 E. }2 \/ l" \& b

: o  s9 A( |9 w0 d7 C; q  ) m( Q& L. j; p
      还没想好在这里怎么人为的把地址给srcAddr和destAddr
8 m1 f6 _( [1 l1 Y$ V1 ^# D




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