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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:+ n3 s, K( g" Z# w$ O8 Y% g  c
#define  PING_PONG_ACNT          1
8 i; O  b9 q& Q5 \( T#define  PING_PONG_BCNT          8*32*40
# ?* L0 U. q% n/ R) A//#define  PING_PONG_BCNT       1 * k* V. f/ R( n, z4 n* n2 n; e1 ?4 j
#define  PING_PONG_CCNT          14 v; L+ m) h* M  ^, N
#define  MCASP_BASEADDR          0x01D00000) c$ w% S* e! f# p- C# T, e3 Q
#define  Mcasp_RXEVENTQUE        (0u)* a; P3 N- L/ Q4 M# x' k+ _6 l/ A+ D

4 I- h* m' B# }$ R. T/* OPT Field specific defines */
$ c: m: U  X/ I2 M#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
; Z( k% k, h# Y1 ?8 A) [#define OPT_TCC_MASK                        (0x0003F000u)  t) R' D' ?+ T- G1 `
#define OPT_TCC_SHIFT                       (0x0000000Cu): w5 S: q6 [  i# t" F
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
3 ]  k; V" L1 B5 l! G  V#define OPT_TCINTEN_SHIFT                   (0x00000014u)$ Z  Z$ E; ~) F4 u
8 o) v+ k1 S$ N
char ping_buffer[PING_PONG_BCNT];
2 ?3 r8 Y7 o! |  b" M" L' vchar pong_buffer[PING_PONG_BCNT];4 O' ?, r, F- `" h

8 b! `7 v9 B3 W& Y
# e2 i2 ~& {$ w0 f/ b, q6 Y1 K* }3 @! ?' K" T' L5 r+ E
) k$ u( ^% I+ c, N' @0 B$ I& D
static void ys_edma3_init()( [8 X8 J) `6 a! g0 J6 \# @
{5 p, E, Z* {% e: \- A
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};; w! n7 A' }3 M! {
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
9 Z, y7 x1 W: n* U! u3 u3 D. J        EDMA3_DRV_Handle hEdma;2 p5 d- M- Y7 h3 w0 f
    uint32_t chId   = 0;
/ A9 N6 g) n# O    uint32_t tcc    = 0;9 e( B& [  \6 O+ }2 |7 C
5 T" N) j8 h' J' d
    print2arm("edma3 driver init...",0);$ ^" f" `: z0 X! r5 ^

4 q* E; y: H, u4 Z! ^5 u        hEdma = edma3init(0,&result);, n- a% J( l! r. n+ S7 i
        if(hEdma)
/ W, {2 j% S( ?# i$ A$ d& E$ v! E7 @' f        {$ z& S8 }# U+ U8 f
                print2arm("edma3init() Passed.",0);, {7 C1 ]. L4 Y! ~# q
        }( X! t- V2 K9 Z6 J
        else1 e9 y- G; s7 u9 ^7 l' [
        {. f( O& H8 G- Y0 t
                print2arm("edma3init() Failed.",0);  j$ B1 H) A- F& [
        }
- j0 N2 n+ U: {7 `, M  n1 f' e       
$ ~6 e' L5 J! G1 h        if (result == EDMA3_DRV_SOK)/ I8 p0 J' v% ^2 p4 D& V
    {* ]9 E9 i% z% u' V; b: m
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
  v8 k+ O  M! o! i                                                       (EDMA3_RM_EventQueue)0,
5 I" R! Q1 Q( ]9 C4 q                                                            &edma3_isr, NULL);1 H; s! L! v7 C4 ]! \
    }
0 Q* H4 T( C, [* h: b       
  S/ j7 T- S' B* h* t/ r1 s        if(result == EDMA3_DRV_SOK)
, P/ {* m4 _3 i7 n: V& X        {9 X8 ^5 o4 \! o, M
                paramSet.srcBIdx    = 0;
3 x* q0 w6 x; A! Z" b" [, Z; t% ?/ V3 F                paramSet.destBIdx   = 1;
3 r+ |0 Y( c+ w( s                paramSet.srcCIdx    = 0;; F4 A7 r5 P: f! L) `% U9 f
                paramSet.destCIdx   = 0;
6 X1 a* S4 L, X8 V+ Z2 i$ S                paramSet.aCnt       = PING_PONG_ACNT;; L: ~0 U0 m! q( Z2 V3 W& E" w
                paramSet.bCnt       = PING_PONG_BCNT;
. u9 y" f1 L, O- m8 v9 y                paramSet.cCnt       = PING_PONG_CCNT;( F0 C% U: B$ d) i. N, x. V
               
7 N% c+ V3 l. c3 P: O" S                /* For AB-synchronized transfers, BCNTRLD is not used. */8 Q0 z/ p( R. ]2 C0 x& C' H, d6 D! F
                paramSet.bCntReload = PING_PONG_BCNT;& [, h) ~0 ~- l2 p' ]2 {
2 _+ A& M5 t7 ^: K, c, f
                /* Src in constant mode Dest in INCR modes */: ?7 x8 S! t4 C6 b  D- T
                paramSet.opt &= 0xFFFFFFFDu;
9 y8 a/ l; I% R! ^' C                //paramSet.opt &= 0xFFFFFFFCu;
# z6 A7 H- C2 J3 ], k5 e. z                  w3 D9 L; G& Y& k; a, w$ j* e
                /* Program the TCC */. t$ s9 j' Y  t! |
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);3 o8 ?; g3 a1 ?1 v- ^- L. V6 _

/ E! z2 B& c, V& X, c9 d                /* Enable Intermediate & Final transfer completion interrupt */  ]3 Y2 @8 P; @2 @- ?
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);( C, w" R" a) n2 f# o2 h
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
& o4 @  T5 _9 q. K6 [9 z3 D; _# Y, x) f! V
                /* AB Sync Transfer Mode */
# g, o: N8 I5 v3 [2 Q" ~                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);3 _7 o% g" s; u4 c
               
& J/ T8 D; h- l& d, r: Q                /* Program the source and dest addresses for master DMA channel */
/ E! @% k# i' a7 N3 O% i. }6 t                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);7 n- c/ `; A: o9 D1 T
                paramSet.destAddr   = (uint32_t)(ping_buffer);0 @2 k, N1 B( `( L3 K  c* \3 p

3 h& o. p1 I2 }' s- T. L                /* Write to the master DMA channel first. */2 n9 @  ^: Y4 j, Q' j7 e
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
) [% V- y+ H6 k. ?" u8 @    }      
) ?: d7 y: {" o' s# M" r% R6 z9 Z* d+ k
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);: _6 x( P, P5 |
          v$ x0 t7 n) L+ ~
    if(result == EDMA3_DRV_SOK)
/ l8 J; A! N, [% ]! d' |    {
# [  d: r0 I2 h' A6 P2 U8 f            print2arm("edma3 driver init success.",0);
. t2 E  X# R1 @9 H+ Z; C4 h2 Q/ e    } - N+ h$ N% g5 x: s8 l2 T, M1 ^, B
}4 P; F; y, J3 u+ t- ~1 @, b
8 u$ e9 N3 I/ y2 K3 k0 J
6 `! e$ ^% [6 M# a! r5 v+ `
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
1 k5 v3 v7 D- ?8 |/ B
$ _" x) C3 \+ t9 V
9 b+ R1 c" \& w8 [/ 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:477 ^& j6 p/ }3 U' c" y) G+ @
每次DMA传输完成后都要再次使能传输
$ @2 z0 j: s; N
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 07:56 , Processed in 0.037952 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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