嵌入式开发者社区

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

作者: fanxuchao    时间: 2016-9-27 08:47
标题: EDMA3中源地址和目的地址设置问题

* V/ p1 s5 b0 u1 F0 U+ O' B    用的创龙TL138-A3开发板,裸机,例程是EDMA3。7 s8 z  v  H1 E' N8 H) a
4 a" V' n8 [) [" @1 v8 }! S
    例程中可以看到数据的传输,但是貌似没有找到在哪里配置的SRC和DST。
. h7 w9 z. c) ?( U# O/ X
: U, E$ O* d+ H8 I( K6 g    看了工程编译后的map文件,发现编译完后就已经分配好了,如下:
8 ^8 ^% h: B0 A# N( _5 i: {1 x.bss       0    c000c500    000002ec     UNINITIALIZED# n( y( t$ O; ^8 P
                  c000c500    00000194     system_config.lib : interrupt.obj (.bss:fnRAMVectors)  {' N9 d% S! M, j7 J* M4 i% B5 D
                  c000c694    00000080     (.common:cb_Fxn). A$ B7 v/ y9 }/ ]2 [7 l$ \" |8 S
                  c000c714    00000064     (.common:_dstBuff)$ u9 b. g* v3 C4 q
                  c000c778    00000064     (.common:_srcBuff)5 E3 Z0 l# S5 v1 V4 ^, x
                  c000c7dc    00000004     (.common:dstBuff)
% `6 d* k4 L; i) n6 I1 U! {/ G                  c000c7e0    00000004     (.common:irqRaised)- K4 ^8 c5 I  Y4 G. {
                  c000c7e4    00000004     (.common:regionId)& O: v1 |& b! H/ A
                  c000c7e8    00000004     (.common:srcBuff)& y4 D6 X( M) F

3 r/ B( J4 I2 C" G& n" |9 q8 B8 k; I5 ]  ]
     如果我想人为的设置源地址和目的地址应该怎么做?3 ?; q* F7 j+ b# u
  
  h& r- b% F( F# J: r& x* I    .init:{system_config.lib<init.obj> (.text)} > 0xC0000000
) g7 O( L$ l- q! J0 \    .bss                >  DDR2   RUN_START(bss_start), RUN_END(bss_end)+ b) L1 V0 F0 B; Z2 o/ s2 ^
    .far                        >  DDR2
* Y7 z- P% F8 D5 v" X# ]: ^3 c  }5 g6 b" j0 f5 n
    还有一个问题就是想请问一下cmd文件中.bss里在DDR2后面的RUN_START(bss_start), RUN_END(bss_end)是什么意思?   
# Q% R$ s5 c3 _( s, j( A; t8 a/ W$ W# l

作者: human    时间: 2016-9-29 09:42
默认的自动分配地址,你想人为的设置源地址和目的地址,在定义时指定地址就好
3 u7 F9 H2 U( Q7 y( P2 Jvolatile char   _srcBuff[MAX_BUFFER_SIZE];
! t. L0 U) A: [( w! _- hvolatile char   _dstBuff[MAX_BUFFER_SIZE];4 `2 N# }8 G/ d- K' k) Y% Q

( e7 Q/ F; L2 O  y, Y# ~8 A$ Wvolatile char *srcBuff;
0 n4 k% L+ L9 [) A; f( Rvolatile 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,
, R/ f& _4 ^* {6 D% @. O地址在定义时如何具体指定?
6 C; R! V$ S5 G$ H; Y+ Z) k/ W% o我这样写是错的。。。
1 O$ R5 P% a4 W+ X+ T3 g2 Y6 @+ _volatile char   _srcBuff[MAX_BUFFER_SIZE] = (char*)0xc000c878;9 a0 m$ p3 `% o. H- H
* @+ @% N/ j( _& x

作者: liyulin    时间: 2016-9-29 14:18
如果数组地址的话,可以用#pragma DATA_SECTION来指定 ,放到CMD中定义的字段中。4 f# k+ H# O/ F6 Z3 D
如果是配置EDMA的目的和原地址 在EMDA 参数RAM里面配置。
作者: fanxuchao    时间: 2016-9-29 16:11
标题: RE: liyulin

' w8 v5 k9 h5 P1 n! _9 K& \' g5 m' ~, e( g1 A* N
     嗯,我刚才试了一下,用#pragma DATA_SECTION,然后在cmd文件中来指定数组地址是可以实现的。6 s6 B7 v7 w" N5 b3 T7 H
   8 Z- `) s- x, P4 Q4 Y' ~- d
     然而我真正的意图是你说的第二种,我看了参数RAM的配置,程序如下:- D! f0 k9 A4 k
        % t* ]3 Q/ P) M5 l' a$ G
        // 给参数 RAM 赋值9 ^9 f, h- B, ]! e/ {8 M8 v& b
        paramSet.srcAddr    = (unsigned int)(srcBuff);6 ]. U" `# K- J
        paramSet.destAddr   = (unsigned int)(dstBuff);4 m3 `5 G* r. m- C# v
   
2 ~( o* b) L( y0 P        paramSet.aCnt = (unsigned short)acnt;( F2 U2 k0 h- p- Z- o* b. J; f, ^
        paramSet.bCnt = (unsigned short)bcnt;
  o6 J; @3 q2 _8 t3 }        paramSet.cCnt = (unsigned short)ccnt;
6 N5 ~% O' _/ t+ o8 s7 m; t( j0 h0 I+ M

& d1 U4 h! h+ y        // 设置 SRC / DES 索引
/ E6 v$ W7 i9 [7 x. H) _        paramSet.srcBIdx = (short)acnt;+ ]5 C* M, U( z4 V2 V* r
        paramSet.destBIdx = (short)acnt;- M) U1 u2 b7 L; c5 b" M+ g

! @5 @! t- @, o) b& z  
) Q! l- ?. E/ E6 H      还没想好在这里怎么人为的把地址给srcAddr和destAddr
! L9 a! W% E, o$ b: Z




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