嵌入式开发者社区

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

作者: fanxuchao    时间: 2016-9-27 08:47
标题: EDMA3中源地址和目的地址设置问题
& f4 ?; s4 H  b! `& m+ A0 x; m
    用的创龙TL138-A3开发板,裸机,例程是EDMA3。
! v& C" T7 E. @* s6 V: Q% Y( v4 L4 y4 B5 K! u, D
    例程中可以看到数据的传输,但是貌似没有找到在哪里配置的SRC和DST。
5 n1 F. p- P& O$ T0 i
0 B; H  l6 L" n( ^( N    看了工程编译后的map文件,发现编译完后就已经分配好了,如下:
4 t, s! D& H5 d/ S- w# c.bss       0    c000c500    000002ec     UNINITIALIZED
4 D: [) p3 w' O: x  @                  c000c500    00000194     system_config.lib : interrupt.obj (.bss:fnRAMVectors). H/ S, a2 B9 k" e0 S3 ^! |
                  c000c694    00000080     (.common:cb_Fxn)
+ @0 g1 f( e6 ?# [6 t3 x9 g                  c000c714    00000064     (.common:_dstBuff), c" @+ {- a+ X: ]' E
                  c000c778    00000064     (.common:_srcBuff)
% N3 _5 J3 _* i$ x" h+ @! r8 M                  c000c7dc    00000004     (.common:dstBuff)$ p+ n8 K; [9 a/ |/ i0 I" i$ J
                  c000c7e0    00000004     (.common:irqRaised)/ o1 u. }; J# q- ?. I5 @
                  c000c7e4    00000004     (.common:regionId)1 F2 P  v+ ^) B- Y3 {2 W  n" F
                  c000c7e8    00000004     (.common:srcBuff)$ d. b/ B; r# V8 ]
" G# e9 ~/ G" D1 l# |* a
( C+ S9 L5 X9 h+ d  s8 \% N
     如果我想人为的设置源地址和目的地址应该怎么做?
, B( G: R/ C! f  3 D6 p& V6 l4 s
    .init:{system_config.lib<init.obj> (.text)} > 0xC0000000; h9 s" P2 f( I4 ^3 e) h1 B
    .bss                >  DDR2   RUN_START(bss_start), RUN_END(bss_end)
. u: ~3 s/ M' x6 U7 N: O9 N    .far                        >  DDR21 r5 `6 J# H' v$ {& l7 C

' b# k0 k+ [/ W3 X    还有一个问题就是想请问一下cmd文件中.bss里在DDR2后面的RUN_START(bss_start), RUN_END(bss_end)是什么意思?   
7 P3 Q1 T8 T6 }, P& x- ^- r3 S, ~
: l& g/ P( X; a) K/ {$ z, q
作者: human    时间: 2016-9-29 09:42
默认的自动分配地址,你想人为的设置源地址和目的地址,在定义时指定地址就好9 ^5 S/ i1 g7 x" \# k
volatile char   _srcBuff[MAX_BUFFER_SIZE];
& r4 }+ t- v7 a4 \# t# j6 n  E5 jvolatile char   _dstBuff[MAX_BUFFER_SIZE];% ^+ _8 g: M- u6 T) n4 n
- R, u7 A+ q7 v7 E) @& f' D
volatile char *srcBuff;" `" O& \: L! k% c! p  x5 h" q3 b5 Z
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,7 L) }0 ^3 [3 C. S4 u4 C
地址在定义时如何具体指定? # M' T3 I7 k  H# @! c0 ~0 X
我这样写是错的。。。
4 x' L8 z# P" b+ T/ Nvolatile char   _srcBuff[MAX_BUFFER_SIZE] = (char*)0xc000c878;
* k, P0 O6 t1 |  o
, y& q2 N# Z5 q; Q$ T
作者: liyulin    时间: 2016-9-29 14:18
如果数组地址的话,可以用#pragma DATA_SECTION来指定 ,放到CMD中定义的字段中。
$ {7 |: o& j' p0 ~7 R如果是配置EDMA的目的和原地址 在EMDA 参数RAM里面配置。
作者: fanxuchao    时间: 2016-9-29 16:11
标题: RE: liyulin
2 l6 B* V. V1 Q

7 O) v7 u) Y( A! p1 `     嗯,我刚才试了一下,用#pragma DATA_SECTION,然后在cmd文件中来指定数组地址是可以实现的。
1 M. `3 r1 Q% H5 o   ! j! z# o" a. o; T$ r
     然而我真正的意图是你说的第二种,我看了参数RAM的配置,程序如下:
8 [$ r: q- q, _3 {; t        ' J6 p  N5 ^5 S- |
        // 给参数 RAM 赋值
% U( N5 V  c* E2 `2 W* ?        paramSet.srcAddr    = (unsigned int)(srcBuff);
3 ]& I: U2 s+ b2 Z8 I        paramSet.destAddr   = (unsigned int)(dstBuff);. N: g: l& k/ j" e6 ]4 b
   
; r; C% N8 V( \( q; f        paramSet.aCnt = (unsigned short)acnt;1 ]" |6 f2 |1 H( c
        paramSet.bCnt = (unsigned short)bcnt;
  J. P, ]# Z7 k+ a7 z! m6 |! ^        paramSet.cCnt = (unsigned short)ccnt;
# N5 f( f7 S2 f7 s3 z! n8 M
# i; F' u9 |4 T. \* L1 g1 {
# J- W* N' Q1 i" E9 B, K& I8 D
        // 设置 SRC / DES 索引
4 E9 M( C2 E/ Y& v        paramSet.srcBIdx = (short)acnt;
" s& \; ^1 _4 ^. B* i. M% c        paramSet.destBIdx = (short)acnt;7 g+ ^  v6 h  X( Q
& i3 n, n/ o1 }) q
  
1 D9 f# B6 H' ~8 y" C      还没想好在这里怎么人为的把地址给srcAddr和destAddr
: w* S' z) t, w




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