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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:9 g6 T" f0 W0 d5 D6 u9 x
#define  PING_PONG_ACNT          1- ~6 \9 l+ j4 X. G
#define  PING_PONG_BCNT          8*32*40
8 ?" u  ]% U* H: \, [0 y//#define  PING_PONG_BCNT       1 / @& c+ i$ U4 j% u9 t
#define  PING_PONG_CCNT          1
. u: f% I& ]5 E+ k  M3 T#define  MCASP_BASEADDR          0x01D00000
9 y( q6 H3 y8 z/ g) c0 s4 n#define  Mcasp_RXEVENTQUE        (0u)' J' v2 J1 H2 |; }: C. D  L8 ]
% d9 l, Q2 L1 l4 I9 W0 Q8 f/ H
/* OPT Field specific defines */
! ^9 T1 U; M: M# m#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
7 Q+ t: ^0 R+ r1 `# K#define OPT_TCC_MASK                        (0x0003F000u)
& m8 x! m1 b; m$ [- |) U' Q& c( k' u#define OPT_TCC_SHIFT                       (0x0000000Cu). w7 z6 t4 {; r  H
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
; F8 `2 _  W! {4 f9 v2 [5 \5 G  E#define OPT_TCINTEN_SHIFT                   (0x00000014u)* o3 @3 W; f0 k7 w# A2 F4 D
' |6 e1 u. u4 E2 h! O( V5 Z( y
char ping_buffer[PING_PONG_BCNT];
: h: M8 Z8 z  y# h* D1 Wchar pong_buffer[PING_PONG_BCNT];
) O, I* V, O$ o  a$ K
( b3 g! \3 v& x2 c" k0 P$ S) T' u) R. Y4 S$ j$ O9 @
* n: o8 o4 u6 C1 R# s8 s
3 X) i; j/ k+ X+ ^4 V+ f
static void ys_edma3_init()
2 {! {) n7 d5 n. X{
) {1 |) w- h7 q2 j" L% p/ e. P        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
+ H4 C& f+ a; K3 y( P* \        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
. c# C! T" q$ s& M        EDMA3_DRV_Handle hEdma;) S4 z% ]2 |2 c7 d0 b
    uint32_t chId   = 0;
8 T) p+ E! k% c3 Q  Y1 @0 Y    uint32_t tcc    = 0;8 S1 V- C4 v* c' q1 f- ^- J* o" V

, N! _  U# \( j# ]% n    print2arm("edma3 driver init...",0);3 q3 F) n- P8 ^2 A7 f: L
, D  C2 ]% O1 }
        hEdma = edma3init(0,&result);
! I# t8 I# v) p9 S: c        if(hEdma)
6 m. e1 O$ d1 e: L6 c  |        {
8 p* c. A! O0 k5 ^/ B  T0 \                print2arm("edma3init() Passed.",0);
5 E* P8 L% ?. W6 i/ E* q, W" p4 W+ e4 o        }
- c" [: J9 u( F5 w" j        else
/ `6 o/ c2 h! i, a& x& u( L        {
8 q* A: |- d5 F% D( g                print2arm("edma3init() Failed.",0);
4 Z+ d: y7 e- K% j( R% y( ?+ U        }  Z6 z. ^; G7 ^* U+ B& ^& w
        1 T% b9 H1 V1 A+ \2 K. O& [0 I
        if (result == EDMA3_DRV_SOK)
5 v2 k  d8 ]8 h    {+ U7 w* i+ O* V4 j2 X
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,0 [; m' z4 C: ]
                                                       (EDMA3_RM_EventQueue)0,
! Q+ \% h) \' U* X' P& ]                                                            &edma3_isr, NULL);# ]8 @6 v7 d9 g3 O) k( y% T
    }2 {5 a; [; e! w  M; e4 y: {
        9 B4 u" ~/ o* d6 d5 T0 U
        if(result == EDMA3_DRV_SOK)9 Z: S: g7 ]: Z+ g
        {
8 e6 B. C6 X" r: F9 X. x7 J                paramSet.srcBIdx    = 0;( d' i& j  G- R4 r) c* y( |* t
                paramSet.destBIdx   = 1;7 l* E# b; \/ x+ ]
                paramSet.srcCIdx    = 0;, E/ f/ p6 Q8 F. K* N5 P
                paramSet.destCIdx   = 0;
$ p  J, G' v# y: {) H  B) m                paramSet.aCnt       = PING_PONG_ACNT;8 i+ R2 O& H  x
                paramSet.bCnt       = PING_PONG_BCNT;
5 R# ?9 d- i; o# u1 b                paramSet.cCnt       = PING_PONG_CCNT;3 V5 D# n3 s  R. V
               
; a1 j+ a/ F, L: U: I                /* For AB-synchronized transfers, BCNTRLD is not used. */+ l* j$ K% ?9 }6 p( }/ C
                paramSet.bCntReload = PING_PONG_BCNT;
, Q# ?7 u6 N8 l- d/ F8 ^1 k% B6 f, b: T: x- q
                /* Src in constant mode Dest in INCR modes */) E7 o" ?, B& J; `) K( K
                paramSet.opt &= 0xFFFFFFFDu;
3 }2 d/ B$ V. ^                //paramSet.opt &= 0xFFFFFFFCu;9 L! j' }# C& Q7 [
               
2 l- W; h" J0 R" O3 `/ d  J" k                /* Program the TCC */
# L* Y7 a# I" r5 \  D9 S5 A" K                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);$ A  ~; a9 m7 U: _6 O
4 [( p8 i& Z! C# K7 }& n  f2 _
                /* Enable Intermediate & Final transfer completion interrupt */
7 o6 }) P  a  v  w7 q                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);3 M" P6 T' `6 }4 {7 J# Y9 Q
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
" H. d) r5 y8 F8 A, A) M# r. p7 d0 O7 C8 ~
                /* AB Sync Transfer Mode */3 u) o" T! N9 V1 Z% Z5 H
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
3 q: Q! a: T; S  d: o+ ]                " u7 x9 u* X/ q1 o4 O# b
                /* Program the source and dest addresses for master DMA channel */
$ V1 r# c; C' ?2 u$ @; H! d, G                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
* r( j1 L; b9 P9 o, [" u                paramSet.destAddr   = (uint32_t)(ping_buffer);
0 n. [: y! M8 ^0 a, m
8 d4 N; _% h1 U+ B4 M2 z                /* Write to the master DMA channel first. */
; ~' A' C" ?; y" c! a3 w! V                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
3 d: ~' S1 Z, V/ A' F9 l( l    }       7 T; G4 s" l7 M2 d5 n

( v  `# |2 W/ j3 O! U9 ?        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);. e1 g6 i# _7 q( o
        , `: T/ D( J! ?$ e# k
    if(result == EDMA3_DRV_SOK)
9 o; k1 n; w2 l! L    {; i$ ?2 }9 _! n) R7 \8 ?- S
            print2arm("edma3 driver init success.",0);3 c1 m6 p* |; z7 I; }+ m: b
    }
6 m! {* r& E6 i! B$ A3 R}
$ Q8 @. Y. W- b& }2 R" P* d8 ~! E. V* P9 o9 i9 K; S. p$ P9 Y
9 Y8 L) Z; V$ V+ }  I2 W
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。& j& E3 A6 x5 a2 o/ L( i
( o% y" n8 j7 G, ?
! p8 r" q& f, Z+ B/ _" r
分享到:  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/ A$ n6 f+ B7 Q
每次DMA传输完成后都要再次使能传输

$ U* d) B6 C7 K/ Y6 Z# M原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-28 07:43 , Processed in 0.038350 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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