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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:. }- ~/ D5 l1 k) H& h
#define  PING_PONG_ACNT          1
, o( \9 ^% G1 A$ J" ?1 n3 h#define  PING_PONG_BCNT          8*32*40
0 Y' W4 @4 c% z//#define  PING_PONG_BCNT       1
7 u0 w8 f4 Q1 \4 U3 L' {7 `#define  PING_PONG_CCNT          1
) z" z" {- K, @( a; z  i#define  MCASP_BASEADDR          0x01D000002 {4 j2 o0 L% G
#define  Mcasp_RXEVENTQUE        (0u)
) A+ N8 b$ W, T3 n* u" X# `/ t" T
( Q% J1 f+ {7 [+ J8 o1 z$ T$ F/* OPT Field specific defines */5 N5 B! P( J+ h' u
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
, c/ Q% V% b/ {  ^: h5 ]#define OPT_TCC_MASK                        (0x0003F000u), G, w* b0 v) y; \! }! U6 a7 O* ~. C
#define OPT_TCC_SHIFT                       (0x0000000Cu)
8 u2 X# [6 ^( _1 j5 H* w+ ?#define OPT_ITCINTEN_SHIFT                  (0x00000015u): _2 P) l6 \: l$ z3 V  Q8 F* j' _
#define OPT_TCINTEN_SHIFT                   (0x00000014u)6 d! l, `5 W7 G2 q

4 l: E/ z  Z# u2 a6 b" H& u0 Schar ping_buffer[PING_PONG_BCNT];7 |) q. g7 k2 J5 X6 z. a9 h7 {
char pong_buffer[PING_PONG_BCNT];1 B0 y1 v% N8 a, z; O8 g; I
' P$ A/ w) \- Q& a- K

% b, a6 x+ i3 o& ?" N3 A  O0 S
2 R4 A. X1 @  z( i) {( P, U1 b) q5 o, r, Q) w. d, I  w# n  N' i
static void ys_edma3_init()
# J% d" |+ \$ @  S) o1 a{0 W' @; ~- D6 v9 r, Q" D
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
6 C* ^; s) {" f+ ~1 E0 @% Z9 @. \        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
7 g' Z1 e% y0 |  _        EDMA3_DRV_Handle hEdma;
3 ^) o2 f/ M. ^+ Y/ }    uint32_t chId   = 0;! H! P6 a8 I! e- S* q; P1 U
    uint32_t tcc    = 0;( ?% }- _8 a$ Z  a

* f0 j( q. V  V9 Y8 C    print2arm("edma3 driver init...",0);, ?& p3 ]  m; G1 p5 u5 N; Q3 X

( C. h/ [% j% ^        hEdma = edma3init(0,&result);
" t( T. h  L- d2 O        if(hEdma)! d1 D& U% N) t! A$ }/ X
        {) L, q+ |4 k0 S. C! k$ C
                print2arm("edma3init() Passed.",0);
0 |# b/ x$ t# q  V        }
7 n% J/ |5 w( b  N$ J        else- a+ w9 p( S: O7 o0 ~
        {) S% x3 Z1 ~5 `$ I" S
                print2arm("edma3init() Failed.",0);  M& x8 R6 V: e5 k( H5 ~  o
        }
7 \1 [( x4 e+ d7 J* R' d       
0 w* V# Q+ ~6 _( E/ A1 F        if (result == EDMA3_DRV_SOK)) K2 \4 t& H8 t
    {+ h' i# i! @! k
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc," k  X6 y  J/ a1 C; i3 P" z
                                                       (EDMA3_RM_EventQueue)0,
8 H& L4 [: x. X* ^2 S* Q4 U                                                            &edma3_isr, NULL);8 k# x; G" ?% Q
    }
. J4 K' r* v+ c& k5 F$ n       
+ @/ i, c" ?8 j7 N- D* ~        if(result == EDMA3_DRV_SOK)+ n2 Y2 v) t9 [* M& K# r$ r
        {
( T: }! J) e, `6 h                paramSet.srcBIdx    = 0;+ @9 i: V0 y0 o/ q# a" v
                paramSet.destBIdx   = 1;
5 W  |& `( A. l; s" m' X: g                paramSet.srcCIdx    = 0;
* ~: o; ^( U9 }5 [  {                paramSet.destCIdx   = 0;% p2 f. ]8 \. V
                paramSet.aCnt       = PING_PONG_ACNT;3 r" b; W; H/ Q8 o& l& ?
                paramSet.bCnt       = PING_PONG_BCNT;
& a3 i6 a2 [  V) V. c( e% `                paramSet.cCnt       = PING_PONG_CCNT;" @7 J4 g% ^% V$ [3 h
                # B  o$ \& k" M9 O# s+ d) D
                /* For AB-synchronized transfers, BCNTRLD is not used. */
! h. l# _4 ~" i+ N8 d                paramSet.bCntReload = PING_PONG_BCNT;+ E* Y9 f+ m3 {  l& o
5 q4 [+ F) s5 G4 _
                /* Src in constant mode Dest in INCR modes */
7 [* K' N7 u# N1 h% \                paramSet.opt &= 0xFFFFFFFDu;
- n2 ]- f$ m9 U! ^( v1 H! r                //paramSet.opt &= 0xFFFFFFFCu;; f) V& z; U8 F
                6 `2 C# b1 E2 @: x% y8 g
                /* Program the TCC */
" y  s$ F- i7 ?, [                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
" |: q  k/ C7 \- F- y: [0 J" c+ n
: Q1 {5 l/ f. f' ^' I                /* Enable Intermediate & Final transfer completion interrupt */+ H* d! p6 r! O* z) R" Y
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
; C; d% E- w- z: w' Y                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
5 w0 M5 u1 `. c' b$ n7 b- h) W
4 F) I4 W7 f, X: d. n                /* AB Sync Transfer Mode */3 P2 j( w2 B; [' h
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
2 }5 u6 U% I* R' _                ; F3 s6 z3 d& G" @0 Y+ |7 W
                /* Program the source and dest addresses for master DMA channel */
5 V/ y2 G& q8 g8 J* i8 @5 _                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);; X2 C% Y" C2 w, n% h% f/ ]' v
                paramSet.destAddr   = (uint32_t)(ping_buffer);0 h& G/ J* [7 C* T+ j2 D: M: w, U% e5 T

% F! q0 {' T' a3 n                /* Write to the master DMA channel first. */- D) k+ I' b% a8 W* D6 f  H- a+ H
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
  X& ^& [/ ^9 Z" l6 m: ]    }      
; E& N5 p. h7 H" c, M( U: u& b6 m; B- ^4 n
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);2 A. T) A; j8 P/ e( F% O% X! E) B
        7 F- S  P8 P) P) ~: O( e
    if(result == EDMA3_DRV_SOK) ; j7 g% N) e5 Z
    {! o8 E+ j* r0 O
            print2arm("edma3 driver init success.",0);( }, N8 ?! W9 C) l
    } 4 x5 ]3 y3 U9 C
}
* [* t. {) K/ j% Z) Q! b
" R2 |* y6 t: i# g
" A- N4 s" u& j: l9 X( f2 gEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。1 i& `/ U2 s6 G5 d3 a: m

$ d9 d; y' _8 v8 _& N) S, H9 V* i# e  L' r+ }- m; q. S& }/ l0 q9 k3 ?
分享到:  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:476 a/ `% }/ E, \
每次DMA传输完成后都要再次使能传输

* p- v: s8 Y$ W( C1 X7 O4 ]1 o9 y3 B原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-1 14:51 , Processed in 0.040858 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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