嵌入式开发者社区

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

作者: fanxuchao    时间: 2016-9-27 08:47
标题: EDMA3中源地址和目的地址设置问题
2 |& w; @. r4 ]6 z7 K) a0 @7 z; o: S
    用的创龙TL138-A3开发板,裸机,例程是EDMA3。0 M7 S% l+ M  Z) l

7 [6 H. ^: ~! ~8 d& y2 J% k2 [    例程中可以看到数据的传输,但是貌似没有找到在哪里配置的SRC和DST。 & P0 q) t4 C0 w7 q

1 G% s% J, \7 v" G( [* N    看了工程编译后的map文件,发现编译完后就已经分配好了,如下:( C; W% i) C5 q- D& D
.bss       0    c000c500    000002ec     UNINITIALIZED: U  u  V* X  z4 m  A" s+ g
                  c000c500    00000194     system_config.lib : interrupt.obj (.bss:fnRAMVectors)
) w- k) o( t6 ~% l# O3 L) J                  c000c694    00000080     (.common:cb_Fxn)1 T9 I; _- z" T1 ~
                  c000c714    00000064     (.common:_dstBuff)5 ]" M4 B& v! U
                  c000c778    00000064     (.common:_srcBuff)2 a" ~& F- y* H: {6 i
                  c000c7dc    00000004     (.common:dstBuff)
5 E! Z; s; Y, d$ `$ e0 T- J                  c000c7e0    00000004     (.common:irqRaised)0 ^8 d$ K  O5 ^5 `, _
                  c000c7e4    00000004     (.common:regionId)) `9 U1 e( Z2 g6 Z/ n$ Z
                  c000c7e8    00000004     (.common:srcBuff)
0 e+ k' u* r* B0 j& J- f& Q  q- l4 o9 F

- b! {. B; F, b( }: T) z     如果我想人为的设置源地址和目的地址应该怎么做?* W/ M6 r( e! B* z
  
/ ~: @) b% U2 W* g7 u+ [/ ^    .init:{system_config.lib<init.obj> (.text)} > 0xC0000000
8 r1 R: ^/ A" g8 |    .bss                >  DDR2   RUN_START(bss_start), RUN_END(bss_end)
; s! j9 ~! [' ~8 H$ z$ ?6 q8 M    .far                        >  DDR2
* ^3 b: U% q) M" G. l; p  O2 g# x6 w% G; J
    还有一个问题就是想请问一下cmd文件中.bss里在DDR2后面的RUN_START(bss_start), RUN_END(bss_end)是什么意思?   5 p  W. f9 u2 J2 @9 o, N
" H( D$ @7 N% U3 a: h* j

作者: human    时间: 2016-9-29 09:42
默认的自动分配地址,你想人为的设置源地址和目的地址,在定义时指定地址就好
  `- {8 F" p- [# k  r- }4 Wvolatile char   _srcBuff[MAX_BUFFER_SIZE];
! J! I9 g! f- l' I9 s2 X/ \. y& Yvolatile char   _dstBuff[MAX_BUFFER_SIZE];
& r/ d: S8 @& m6 _
  L. ?$ p5 u: b" Zvolatile char *srcBuff;
) E( N2 T: ^! |1 q; Z1 ~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,
# a) c& k- ^6 J: E7 U地址在定义时如何具体指定?
0 r! }3 @$ ?  T: P3 k我这样写是错的。。。  O. r6 L! D* w. v: p7 S
volatile char   _srcBuff[MAX_BUFFER_SIZE] = (char*)0xc000c878;
2 v4 m+ M# t5 ?4 M& Y1 j' J( f4 ]" k* Y4 }: t; m

作者: liyulin    时间: 2016-9-29 14:18
如果数组地址的话,可以用#pragma DATA_SECTION来指定 ,放到CMD中定义的字段中。, X* \, o8 J3 D$ ]- }
如果是配置EDMA的目的和原地址 在EMDA 参数RAM里面配置。
作者: fanxuchao    时间: 2016-9-29 16:11
标题: RE: liyulin

" q5 @' i9 z# V! B; K/ R: l" ~& P, w+ u4 o1 ]6 q
     嗯,我刚才试了一下,用#pragma DATA_SECTION,然后在cmd文件中来指定数组地址是可以实现的。
2 D+ ^4 E$ L8 \* P/ C! P   
9 G" c" n: }# U" k     然而我真正的意图是你说的第二种,我看了参数RAM的配置,程序如下:6 Z% e4 z: |: Z, o# M
        
3 M, H2 z' i( ~! s  G        // 给参数 RAM 赋值
3 q3 r6 ~* P  M/ U' A        paramSet.srcAddr    = (unsigned int)(srcBuff);* i9 R7 [" F! y, G/ a: m: H4 O
        paramSet.destAddr   = (unsigned int)(dstBuff);
2 w4 v& n% I8 m, ~    1 Y( O6 [) Y! {4 u5 [3 Q
        paramSet.aCnt = (unsigned short)acnt;
4 u% v! V* N4 u0 V  c- y7 m0 n1 b        paramSet.bCnt = (unsigned short)bcnt;( x$ n' f% D* z& C& r; q
        paramSet.cCnt = (unsigned short)ccnt;
/ }/ P+ O. p4 Y- B; e
& Z! W6 H; E0 \" {% x

" y4 k4 J: {; D+ @+ Z4 Y1 F        // 设置 SRC / DES 索引
5 t9 g/ i# A8 V0 P        paramSet.srcBIdx = (short)acnt;' z: E% t6 Y3 [2 P# d/ e( J% }
        paramSet.destBIdx = (short)acnt;
9 p2 k! |: w, f4 J5 l2 x4 Z( x. d7 r9 c0 d7 A
  
  I% ]% z7 a5 t      还没想好在这里怎么人为的把地址给srcAddr和destAddr
! X8 D4 P9 x8 s; y& ?: O




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