edma3中断只能进去一次 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6605|回复: 2
打印 上一主题 下一主题

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
5 ^: [' h* @- l$ ~: c; Y5 T" V#define  PING_PONG_ACNT          1
7 d& ?7 E8 H3 o#define  PING_PONG_BCNT          8*32*40
) D4 N- F/ ^( ^& p//#define  PING_PONG_BCNT       1 ) z/ B6 X( H8 w6 h" `) b$ v
#define  PING_PONG_CCNT          17 k& L7 g( o; u, m
#define  MCASP_BASEADDR          0x01D00000
; e, D4 i5 `9 `8 j- d. k#define  Mcasp_RXEVENTQUE        (0u)4 r0 _/ A9 L1 V8 f" @$ Z

" q! t* v$ b4 d# M& G8 U/* OPT Field specific defines */; V' O4 g' W# g) E- D5 c
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
# G0 z1 ^2 p; {2 ^#define OPT_TCC_MASK                        (0x0003F000u)% g0 N- N3 m. o: x7 u. A& i
#define OPT_TCC_SHIFT                       (0x0000000Cu)
8 F% Z7 K& E$ d( ~" ?" m: S. \! `#define OPT_ITCINTEN_SHIFT                  (0x00000015u); n. J. ^; s5 U( j7 |" P
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
4 I6 y  W# ?; h+ v$ x& q2 j+ ]; S. E. Z/ I% i
char ping_buffer[PING_PONG_BCNT];& {9 Z& X( i+ o
char pong_buffer[PING_PONG_BCNT];
  M6 e8 D; ~! {! l$ H$ z, I, B- J# Y7 \& ]3 v
+ |" W( Q* h* A, a( a: k
$ K8 S5 |( ~$ d- A% o& a

  r1 E& `5 g7 xstatic void ys_edma3_init()& N0 G, v7 ?2 {; g
{
1 x; V. _% C, r3 D) d1 r        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
+ C  e% [0 L, X        EDMA3_DRV_Result result = EDMA3_DRV_SOK;' F3 Y" m- _/ a
        EDMA3_DRV_Handle hEdma;) p! b9 T/ F- o. o; M
    uint32_t chId   = 0;
' }$ ]5 u: d; _3 i# m; v    uint32_t tcc    = 0;0 c4 F* W% d- F. O$ v
) Z' t; h- w4 E" U- j
    print2arm("edma3 driver init...",0);) [0 k' Q/ O& u1 C: G2 \
0 R' D& i* ]4 H
        hEdma = edma3init(0,&result);
8 z- A" c% M9 T2 N        if(hEdma): d) U' m$ d, j7 d+ R- n
        {
# n1 Q" l" U& X% e0 l                print2arm("edma3init() Passed.",0);9 Y9 o; }- {6 P
        }
. S  @; Y9 X; F% l        else! J3 X& ^5 t" R6 @
        {+ E8 {1 `( K  _: D& H4 H
                print2arm("edma3init() Failed.",0);3 D* G. n% |- u2 q8 d  t& J" o
        }
/ J3 u/ m# F: E8 ]; C, v$ w; o       
9 l% _3 J+ T  M  e( C3 e        if (result == EDMA3_DRV_SOK)* z+ R6 R8 m1 g1 S; S
    {! ?2 n; E5 s7 z
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
6 Y. Q$ Q6 M2 ^                                                       (EDMA3_RM_EventQueue)0,- K/ s8 b/ n& }4 q) T
                                                            &edma3_isr, NULL);5 s- c" \+ i/ i& J" O  Z6 d5 |! R
    }0 n- s/ m: o! z% p& H$ I+ X
       
5 x1 H- G$ r* ?! V) x8 d        if(result == EDMA3_DRV_SOK)( r2 ?* r# D+ f$ Q/ e' X" C
        {4 r3 w) g9 w- w$ Y1 B
                paramSet.srcBIdx    = 0;3 M4 t4 m$ V( S
                paramSet.destBIdx   = 1;1 K& U  d( ~6 l
                paramSet.srcCIdx    = 0;
5 x1 H( [8 E; \2 T2 t5 s% W                paramSet.destCIdx   = 0;
* j8 \* F/ h3 g$ s+ v# {                paramSet.aCnt       = PING_PONG_ACNT;
# i/ ~+ }2 z/ i- \' I* C                paramSet.bCnt       = PING_PONG_BCNT;
$ h* b5 c9 V  i$ u: ?% w                paramSet.cCnt       = PING_PONG_CCNT;
2 K1 c/ D4 a1 |; m$ H                  i0 n7 u; |3 h; t" \) ]
                /* For AB-synchronized transfers, BCNTRLD is not used. */7 T, |  X+ Q9 _2 g. I" P
                paramSet.bCntReload = PING_PONG_BCNT;
" X' ?1 u( m! I$ n4 Z6 T' I# d( j; |4 r" W! B' \8 T/ |
                /* Src in constant mode Dest in INCR modes */
+ h) j  s  q# T, b" O+ b' f% i  z6 T                paramSet.opt &= 0xFFFFFFFDu;
% i( A; X2 u3 R( p4 j                //paramSet.opt &= 0xFFFFFFFCu;+ L0 X4 ]. l, ]. }# ^% Z9 b- V
               
1 j( w: b) d. G9 f# D9 u2 H) P/ g                /* Program the TCC */
& j# c3 e+ w* J. ]3 P                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);4 J4 G/ L2 l5 ~
" f! R5 V7 o3 R" X/ t
                /* Enable Intermediate & Final transfer completion interrupt */6 k/ E! `+ v( U+ E" ]/ [/ |
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
4 N; a+ n) r! Q! Y2 Y                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
% s- z- V! h8 r3 k+ K9 A: m4 Z( N: I# W# D9 j5 X$ v3 U
                /* AB Sync Transfer Mode */" u4 h, h3 U) S- R) X! v
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);5 N2 Q) n5 N1 R, o! [- g/ O
               
% V, r( K7 Q/ J                /* Program the source and dest addresses for master DMA channel */5 G' w5 n! v/ ^
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
. k1 s* N( T% Z* S2 a7 s                paramSet.destAddr   = (uint32_t)(ping_buffer);5 v4 W! I+ R( ?8 z5 q2 m

2 E" m7 @8 M% ]) n* W) p8 E9 O                /* Write to the master DMA channel first. */7 E& e! b) J6 v: }9 Z
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
3 Z0 k4 s$ j9 r5 ?" l    }      
% K- ]0 [! \& s4 \8 O4 k' u$ g; ^4 ?
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
' V6 J1 t6 V* ^4 E) A) \4 h       
: W) ~2 N$ U0 Q    if(result == EDMA3_DRV_SOK) 8 A$ ^) f! o4 F0 L
    {
# P4 h2 L: S& U            print2arm("edma3 driver init success.",0);
4 o3 [7 U3 y% }) K3 a    }
; G! H. L6 y. e- E! o$ k, W8 ~! I  e}4 P* I1 U6 `- `- D! A0 l
3 T- u; \1 a8 Z& _# N& S
5 g' ^4 K" `: {* S& A  y
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。4 G3 j2 F( }" O, x. Z3 g
& ^; Y5 s$ E& f. J# N; k# X- o

. Z# a+ V: J9 \/ C$ {( F% Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-24 10:47:00 | 只看该作者
每次DMA传输完成后都要再次使能传输
回复 支持 反对

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47
1 i4 P/ ?. S- ~- \3 V* g" M每次DMA传输完成后都要再次使能传输
. _6 V: I( r+ f$ I* |1 _8 ~( g
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-16 23:52 , Processed in 0.040884 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表