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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
, I# A/ ~0 X6 K, w#define  PING_PONG_ACNT          1
; x2 ?! P. s" g+ e$ f" }#define  PING_PONG_BCNT          8*32*40 2 h6 a- U5 O. M$ }7 C
//#define  PING_PONG_BCNT       1 & k" v& u5 R* X: o3 ~6 Z! z
#define  PING_PONG_CCNT          15 C. y" v) V; y* ]$ H
#define  MCASP_BASEADDR          0x01D00000
; V. J" O5 X) y" s# A* i) j; {#define  Mcasp_RXEVENTQUE        (0u)) c, @4 [* T6 H- v
' h1 Q8 D" ^; N) j
/* OPT Field specific defines */
8 k* B6 F0 T7 h1 R0 M6 K#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
* P% l7 Z+ T/ e% n* a# ]- O#define OPT_TCC_MASK                        (0x0003F000u)
5 }/ b: H9 E3 [5 g9 ?- l& B#define OPT_TCC_SHIFT                       (0x0000000Cu)5 ?1 Y6 O7 Q" D
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)9 P' \& ~+ B* l2 u0 h0 |; c0 G
#define OPT_TCINTEN_SHIFT                   (0x00000014u)/ Q" T; S2 \. k' U
, J# ]5 F: v2 V& S- U5 W3 q  H
char ping_buffer[PING_PONG_BCNT];
9 v' k, A1 v! k' n/ i( J! Nchar pong_buffer[PING_PONG_BCNT];
  y) i2 _/ S% P% p: s: X8 l9 Q, z1 F) M: O8 x% I$ K* U
# Z0 ^( b4 e! q1 ~4 n6 F- A6 C' p

1 [6 y. {& L( p" u  }3 j7 x* H
static void ys_edma3_init()1 C- h/ K% X4 s  @
{
# f& ~$ h* G. n6 y        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
) h3 w% x: b' q: v& M% ?        EDMA3_DRV_Result result = EDMA3_DRV_SOK;, ^: ]6 D3 ^9 Y: j
        EDMA3_DRV_Handle hEdma;' C1 \4 \( b$ V; ]6 d' p
    uint32_t chId   = 0;4 ]- j& H* t: H0 |  m  I* c
    uint32_t tcc    = 0;
& ]! @" ^8 K4 o1 K7 {' j8 C7 L. M) P# e% H3 B8 |
    print2arm("edma3 driver init...",0);
5 F3 M; h+ ?1 f  R' G
2 O) q. X) {" ^3 v  E        hEdma = edma3init(0,&result);
+ `& T8 q7 o& _        if(hEdma)
& e6 e  v8 X# M& C3 H8 {7 z( o6 r        {
5 p8 m- w& k" @5 V6 p# X/ p- d                print2arm("edma3init() Passed.",0);
+ M! O- u4 o. u2 A7 G* B: T        }# v5 I2 O! n; _# \3 C4 O2 P5 {
        else: n0 X( x- A. K. q3 z3 t+ `
        {( G; h( v+ _; n) I: W7 a% |
                print2arm("edma3init() Failed.",0);
: a. v7 @" K1 S" L! V  y        }" x6 A8 ^1 m7 a1 X8 I+ o! ]+ j
       
7 G4 o6 n+ f6 |0 d/ Q7 o; f        if (result == EDMA3_DRV_SOK)
! n% C! S. y# M" @    {6 Q$ K! E. V/ a* x0 b% y" `! f$ v2 g
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
" s. W; v$ r' |6 J                                                       (EDMA3_RM_EventQueue)0,
( p* H3 q9 z( X8 Y" O7 z  m1 c: K                                                            &edma3_isr, NULL);
5 {7 O* V: m& e4 |3 d+ l. f    }
5 B2 A1 [1 C7 D# g8 E. j. I, W  V        % D3 W  T# Q6 ~3 z4 L" _
        if(result == EDMA3_DRV_SOK)
9 b* i3 |! K8 z  X# Z1 A        {
! o( s3 H/ r2 n( d                paramSet.srcBIdx    = 0;
/ W9 i$ o" j; \; m; p                paramSet.destBIdx   = 1;& N& d9 b, x5 l$ M& m/ d
                paramSet.srcCIdx    = 0;' J( p: a1 i& m  @, w
                paramSet.destCIdx   = 0;
/ s) z% \! I3 L5 q: l" J. C                paramSet.aCnt       = PING_PONG_ACNT;+ a$ O# W$ ~. G1 g/ |1 |+ h2 h  H
                paramSet.bCnt       = PING_PONG_BCNT;
7 _; ]& K/ k# ?2 R( p9 K- h                paramSet.cCnt       = PING_PONG_CCNT;
3 R1 ~" @# i# R( e                - y5 T3 g* b5 [* T
                /* For AB-synchronized transfers, BCNTRLD is not used. */! e) z7 g+ c4 y# @1 z
                paramSet.bCntReload = PING_PONG_BCNT;- m: I- f5 v( A
3 i( K1 k8 h; P( o
                /* Src in constant mode Dest in INCR modes */& b" Y) }1 O( r) s- v
                paramSet.opt &= 0xFFFFFFFDu;$ ?1 O5 ~1 D- {6 }  c
                //paramSet.opt &= 0xFFFFFFFCu;
7 O  b( Q6 _5 z$ Y                - A2 T5 ?8 A! d5 N3 r8 i4 p  n. Y
                /* Program the TCC */8 ^5 y' I. }- j# b' j
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
4 p7 ]! C. Y9 d" M8 g1 n% A% X) U3 N& k  f# K0 r/ W3 g
                /* Enable Intermediate & Final transfer completion interrupt */
5 D, d0 [9 v* M& U1 j) z  h                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
* G! g( J$ w2 }4 }! j: I2 K                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);2 b$ m/ O4 L" s1 R' u' ^
. H) Y3 v5 e5 a- B8 O4 \! d% a) [7 ]4 h
                /* AB Sync Transfer Mode */; w* i8 O1 o* V; D, Q; G( [8 R
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);6 s# K1 O0 m/ m
               
3 _( ^9 e$ ?3 q$ I0 u                /* Program the source and dest addresses for master DMA channel */! w4 S) ?& U3 \" k+ i
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);2 d9 T6 ?' e# h' t* s' A
                paramSet.destAddr   = (uint32_t)(ping_buffer);
' E4 C1 I+ Y0 s
1 v5 {  l0 u2 l) o0 c                /* Write to the master DMA channel first. */3 X  k3 }' A# H) ]
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);; f4 p4 V) S! m  b
    }      
* ]# q* s3 p) q3 }8 W8 A( a
  z- P  _7 R0 f% b, O        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);6 ^& `+ i! m. _4 u* S
        7 R7 y4 p# r5 M- h; g0 Y, \  D
    if(result == EDMA3_DRV_SOK) 1 Y1 z2 V$ X) z
    {9 ]9 R. M; G3 t1 q5 [
            print2arm("edma3 driver init success.",0);. n3 C) P. x- C$ K
    } ) |$ c" z! b1 ~( f9 O
}
* l$ F7 D% f6 K  p0 ?* s% w9 ~/ E8 K

! L3 S/ c9 e/ |0 Z3 C4 l$ MEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。- Y' x+ t% e, {% G: d4 x$ W

; x) J  U! F) T$ }* H- w5 ~+ c3 s8 U8 C) N% z  U1 ^
分享到:  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
0 q, j* I& \$ D+ R* Q5 v3 ^8 f每次DMA传输完成后都要再次使能传输

, q$ z- a; i) x7 {6 J$ o% b# E原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 11:03 , Processed in 0.048205 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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