edma3中断只能进去一次 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:5 J: O# V6 U7 D6 |5 t" y8 H& f4 e
#define  PING_PONG_ACNT          12 E6 L+ K- x" E$ {) N* B& l% H
#define  PING_PONG_BCNT          8*32*40
2 _9 z+ h$ U- n; e- s( p$ C4 _//#define  PING_PONG_BCNT       1
5 i% \  o. K" u1 L3 m#define  PING_PONG_CCNT          15 t8 ]3 o, ^" i- Y8 q6 s
#define  MCASP_BASEADDR          0x01D00000
$ [1 F: i8 H! M7 U! X3 |#define  Mcasp_RXEVENTQUE        (0u)9 K3 D- p/ P7 v. o8 {8 S1 Y
) h& s9 x) ?: C& `2 |9 t
/* OPT Field specific defines */- r% `7 S# x) i- X9 T# c1 Y& m
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
" ~* k* J2 o1 O( X# t8 u2 I#define OPT_TCC_MASK                        (0x0003F000u)9 m% d" c6 @# \- Y& i
#define OPT_TCC_SHIFT                       (0x0000000Cu)$ c* y( i; ]. [: g
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)4 g/ \9 p& w9 \6 a; c% U2 ~
#define OPT_TCINTEN_SHIFT                   (0x00000014u)  S0 S% z% k4 D9 y
& p( l. g0 r/ B( Q
char ping_buffer[PING_PONG_BCNT];# p5 X5 G  j$ {5 {/ Z, s9 a
char pong_buffer[PING_PONG_BCNT];# B/ m& Z" q& o( K8 B0 t
; i" A4 }! p, w7 u7 c% L

8 Y1 ~7 C' [- ]$ {+ l: B: x
8 L( N$ {+ N: a' a) p  d
+ O) C2 _3 ?0 u* R, \$ L/ _' Qstatic void ys_edma3_init()
: _) r! ]9 ?! t. s. |2 S0 O{
' A& K" \0 e2 ~2 q4 Y        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};1 _5 }9 X$ l+ M: l8 g! _0 \
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
( w% Z4 ~  v7 E& P        EDMA3_DRV_Handle hEdma;
7 I0 V0 t4 l6 V" u8 i2 M8 a    uint32_t chId   = 0;
3 s! h+ i3 J7 A    uint32_t tcc    = 0;
9 {6 C! y, W5 d- M7 m, K) s4 Q! I( E- `, w( w! y4 s5 }
    print2arm("edma3 driver init...",0);
( a  D& E! V5 U# |
: x% Q* J1 |- d) f$ T6 a5 {        hEdma = edma3init(0,&result);
. D9 ]& {: {4 `1 d" ?* x3 Q        if(hEdma)
3 K: N' m& w0 y) c        {- F. B8 A% f8 H% G
                print2arm("edma3init() Passed.",0);$ F( m% v/ t& `4 m, h
        }
; U4 d5 g8 |: C& L  w  P        else. ~6 d2 e3 S5 x
        {) n$ L9 H- d% S# q# Z& S* [: m
                print2arm("edma3init() Failed.",0);
  |7 J  |, q# ]6 k- q8 F9 E        }) K1 K! ?; V5 f! Q( b
        0 b; ^) ]: o2 {7 M
        if (result == EDMA3_DRV_SOK)1 v% [( {) z( L( K* y, l2 B
    {% A& A7 l6 Q& x! a% D; j" t& d+ }! f
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc," I/ H6 ~0 `; u
                                                       (EDMA3_RM_EventQueue)0,: L! O$ t4 g6 F+ F1 t" }6 d) z
                                                            &edma3_isr, NULL);
1 \' ?1 U" v& T2 [3 ]    }
, Y- t: u$ Q% J0 ?# k5 x. b        9 T" z4 u! v8 [
        if(result == EDMA3_DRV_SOK)7 ~* u# {8 ~5 d! X# V( g
        {: C% M' x% z# d( X8 V* I/ M
                paramSet.srcBIdx    = 0;
( x5 p: K9 H/ H. C                paramSet.destBIdx   = 1;! y6 U0 ~  e/ R' h  y1 k& |
                paramSet.srcCIdx    = 0;0 M0 X5 Z' Z  ^9 W' a# T
                paramSet.destCIdx   = 0;
& f) y/ f- w7 R) k" V! S* }                paramSet.aCnt       = PING_PONG_ACNT;
5 E, c( r1 y' R/ |4 ^! A- e                paramSet.bCnt       = PING_PONG_BCNT;
, U6 S+ n/ t' M  }, c! Y9 x# o& i7 C- e                paramSet.cCnt       = PING_PONG_CCNT;" ]9 A) J1 ^1 c5 I+ t5 |7 ^' D3 `. i
                7 Y, U8 y' w0 i
                /* For AB-synchronized transfers, BCNTRLD is not used. */0 O. u+ B7 L9 t8 N; U9 n+ ]
                paramSet.bCntReload = PING_PONG_BCNT;
6 S9 r, w6 P8 r' s, l! a. y
/ C. Q% O% t5 P$ T5 x; ]3 H: x, b3 {                /* Src in constant mode Dest in INCR modes */
& r! T+ r+ c1 i# q                paramSet.opt &= 0xFFFFFFFDu;' f' A1 i: }% C& A* Q1 @* ]# N
                //paramSet.opt &= 0xFFFFFFFCu;
0 N  H5 l0 Q6 P               
% L9 l7 Y0 J7 }' Q2 r; |                /* Program the TCC */
# I8 x7 h2 m! u8 |. N                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
/ T) r6 f, ?$ ]- w; b9 }% p
8 C+ h1 f0 `! y( f/ H                /* Enable Intermediate & Final transfer completion interrupt */
8 S% N. c, c/ F5 L4 \& }% @# C  j                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);8 P6 U$ @$ v) f9 W( |7 k8 Q
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
. ~0 P3 Q9 o0 k
4 D0 c9 ]; q% A* @0 N  I! N                /* AB Sync Transfer Mode */
' j, E7 j% Z! X" Z                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
8 y, {8 M" n( h/ z1 @, v               
; Y2 J) l* U2 X. t/ `. o                /* Program the source and dest addresses for master DMA channel */
; E- U/ o& u+ x* X9 G                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);1 e, A1 Z+ ?% y: }) J
                paramSet.destAddr   = (uint32_t)(ping_buffer);
, @  z% f: @( w/ e9 t  }5 [6 x. [3 N* z# w  K/ n2 H5 j; A3 `/ j
                /* Write to the master DMA channel first. */
5 F; t& Z/ j0 W( t                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
$ \' m* W5 ^$ p! T. v7 Y/ ^    }       " l1 Q9 k5 M+ Q6 K  u

4 `# F) u9 n' T& L) |% E        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);% N. y* p4 E- O+ ?
       
, w: C2 i8 F4 K    if(result == EDMA3_DRV_SOK)
, A( j0 D! a/ O/ c5 P6 @  W    {
  e8 K7 I; e7 g            print2arm("edma3 driver init success.",0);
. [! o! _  d+ S6 H2 `    } 1 j/ ^$ @& h* `
}
$ E' Y, c( U0 Y0 L7 l, Y+ o2 d4 e' n6 S6 R/ Z

; Q/ T, b1 a! ]0 Y( Q/ x) gEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。7 W3 C/ M2 r9 I: j! [4 I. C+ l

% D- R: ^! c" G9 j, e3 Q7 S" I7 c3 r( R+ r; K
分享到:  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
! s: ?- b. X! a) v1 Y% j4 U每次DMA传输完成后都要再次使能传输
/ ]& I% l$ l2 i/ N5 b: z* Z/ `
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-14 17:37 , Processed in 0.038698 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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