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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:* L# P$ p0 z+ D- e$ X7 c
#define  PING_PONG_ACNT          1# M+ F1 k7 |: j
#define  PING_PONG_BCNT          8*32*40 ( `: n4 |/ N7 C; t# V" b6 y; G; w
//#define  PING_PONG_BCNT       1 , S: N; r: l8 Z& d6 z$ c! j
#define  PING_PONG_CCNT          1: r4 a  z( s; [+ p: Y1 n0 }; ]" N
#define  MCASP_BASEADDR          0x01D00000
2 L, P: i" W. X) e) b7 E2 [#define  Mcasp_RXEVENTQUE        (0u)
4 j* b& ?& o: C) M+ f! u" F5 U$ N3 G! m: }% D( u
/* OPT Field specific defines */
' w9 y9 m8 d' O# R# K#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
/ F& Y, b- \& F% U#define OPT_TCC_MASK                        (0x0003F000u)
2 X9 N/ O9 K3 {5 I' v#define OPT_TCC_SHIFT                       (0x0000000Cu)/ \+ K! \6 k9 X$ Y$ v
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
, x1 j, q* p+ O7 K; k#define OPT_TCINTEN_SHIFT                   (0x00000014u)
5 l0 ^8 _! T# P, `  G  d; g% E. B, k8 g. H
char ping_buffer[PING_PONG_BCNT];) ~" l" t3 w2 n9 r& r
char pong_buffer[PING_PONG_BCNT];* F6 E# n! @7 v$ C: l% M% M

4 v) Q1 m: S6 L: W
* |" d6 l4 I( t% ?* W- P9 w/ @* y

# \  |: u$ n- W( [4 K- @9 P6 ^static void ys_edma3_init()# p: \5 h; J3 C2 W4 T4 \, D1 c
{! m6 {6 c, ~* ~5 U3 h8 d, D; U% v+ v
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};$ Q4 W2 t) Q( t- C
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;" d- m. u/ N1 _. O" }$ _5 ^$ B
        EDMA3_DRV_Handle hEdma;
  v( P# {4 S& A0 B" S    uint32_t chId   = 0;; k1 t, i* O* ~( v6 @4 p( a+ ^
    uint32_t tcc    = 0;
* t. s. y: |: \* m* L
5 E+ {# H- G* O0 h3 f    print2arm("edma3 driver init...",0);
5 Q, y2 `' q; p* ]6 b$ [8 l; `! q5 G1 v3 l) E( H4 S. R3 c, H
        hEdma = edma3init(0,&result);
& L9 O& c4 p/ S* b! ^2 j/ w* x        if(hEdma)
& t9 a: `5 g9 `+ N. c$ u        {' q# K( d: Q8 m7 D
                print2arm("edma3init() Passed.",0);
; \  V& L$ r8 ^1 V' U: A        }' m8 ]; X2 V7 _3 Z. I
        else) K3 Q- Q5 g" c% g7 ^1 }
        {  c+ Z9 y4 p" V. o# @' K! u
                print2arm("edma3init() Failed.",0);
) r3 x+ I6 A' t# a) w3 c" c3 v        }2 f7 G/ a' `& E6 @+ o
        " p: \3 W8 c3 B$ L$ K
        if (result == EDMA3_DRV_SOK)# {2 B; [6 e6 @0 A" D
    {
2 a) H: e+ S- t' _) B2 e7 o* ]5 p                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
8 Y, O/ A+ P* R" @( @: y- c# c                                                       (EDMA3_RM_EventQueue)0,' {6 T" d& O0 S4 m: t6 }4 Q
                                                            &edma3_isr, NULL);
7 U: b, L5 B: B4 l% m  E# l' u    }
. j! S- x- G9 |          n' f$ s( j2 q" V. p0 q" @
        if(result == EDMA3_DRV_SOK)
/ }3 S/ @! a* L# J: @1 L7 V7 u0 Z! ]. F        {  i" k7 [- ~. V" w% x& N- U; x5 W
                paramSet.srcBIdx    = 0;
! f# J. A+ c, _                paramSet.destBIdx   = 1;" Q* I$ [. u* j& Y( {6 F2 i7 O
                paramSet.srcCIdx    = 0;. A0 X4 }' L' M" \" V
                paramSet.destCIdx   = 0;
& ]7 [# n- m) W2 W( }- i                paramSet.aCnt       = PING_PONG_ACNT;
: g) w) s7 e% `6 }7 @  K4 R' X2 g                paramSet.bCnt       = PING_PONG_BCNT;7 l1 U+ G4 @0 F; g# _. b. H
                paramSet.cCnt       = PING_PONG_CCNT;8 a2 N2 ]$ Q) Z
               
* e$ K! ?9 X$ Q- T  d' f                /* For AB-synchronized transfers, BCNTRLD is not used. */8 W; p- V9 n; l& Y; o
                paramSet.bCntReload = PING_PONG_BCNT;- B8 d3 b# u( m' R
4 T% V( `! q. |% V
                /* Src in constant mode Dest in INCR modes */9 ~; n3 D; F' \; z3 ^8 u% C* |
                paramSet.opt &= 0xFFFFFFFDu;
4 R0 o6 p, @. N. r% \9 T                //paramSet.opt &= 0xFFFFFFFCu;
" O3 f( q. S. f& K+ ~0 f                . F# H* G' G7 E3 F: q
                /* Program the TCC */
( L3 q* i6 Z8 D. j$ B) r. T9 P/ Y                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);" H6 r) n8 h7 n' G0 u$ N

/ ~- [+ H: |0 h( T8 H2 \. D                /* Enable Intermediate & Final transfer completion interrupt */
' m3 v1 v% q- ?8 N' s* k: a                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);$ s. B2 o5 z1 X) X/ m- O
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);! k0 g% J7 _: D, ]" X
; A3 K2 h; d+ `( k  b, u+ i4 b. }
                /* AB Sync Transfer Mode */
; R2 P1 |+ @3 y  p. j                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
# M/ S; a+ i" l: Q& v* R                , J" k1 s' ?$ x( {3 f
                /* Program the source and dest addresses for master DMA channel *// ?2 Y6 ]2 q+ W
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
9 H- i5 P! z. v; B5 ~                paramSet.destAddr   = (uint32_t)(ping_buffer);
5 j% |, D! d0 }
+ P3 K# {. a8 I* \. q2 w                /* Write to the master DMA channel first. */& o) j% {! d3 ~. @% q
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
5 X( K1 e) l5 b+ b  z4 m# T: k- q1 ?    }       ( s+ j! I6 b! r& F
" g3 |+ g# Z+ e4 Y  }9 E& s
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
7 Z% A5 \( I6 u- [% c       
1 Y  `  G" E% x" f  J2 O    if(result == EDMA3_DRV_SOK) & y8 m* o; ]& {# ?  h
    {
7 Q0 Q2 x1 {+ D4 f( i3 f, [/ {4 u            print2arm("edma3 driver init success.",0);
- a- g+ W! B; M" t# p' [5 x0 D7 M    }
/ p1 X8 M* n  l! L# ]6 a3 G! f# |}* w+ m2 g( d( g( L

0 G8 ~8 e! y7 Z9 M8 w0 A( c3 q$ E; m* ^0 x) O. Q( Y- d
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
+ t3 [0 d, @' [7 r9 w; b. l1 v3 e, R- u! P% U' ]
$ X* o' U: t# q
分享到:  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:474 J1 ?; X1 G" w9 t5 ~6 P1 F
每次DMA传输完成后都要再次使能传输

- @0 E+ ?, [  P$ i! F原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-17 02:15 , Processed in 0.039000 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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