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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
  m' k0 x0 f; h- z7 }#define  PING_PONG_ACNT          1" @2 d/ A; n" D' W' L/ f
#define  PING_PONG_BCNT          8*32*40
- b' |- o6 Q& m& S- Z! _% l' B0 `//#define  PING_PONG_BCNT       1
& T3 Z9 C8 c3 P) W! G#define  PING_PONG_CCNT          1
1 d$ ?! K7 @. V5 i#define  MCASP_BASEADDR          0x01D00000
0 Y1 m3 D9 |; V6 ^/ w7 b#define  Mcasp_RXEVENTQUE        (0u)7 R5 v* ?; {- `# N3 x/ R

0 u1 |* B5 v" Z7 t  O( N1 \/* OPT Field specific defines */  }2 t8 e) n9 M' U; S
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)0 L8 _- M: e, j& r
#define OPT_TCC_MASK                        (0x0003F000u)1 Y: y# K' D( U2 R$ h' ^
#define OPT_TCC_SHIFT                       (0x0000000Cu)
3 G9 O+ T4 j% P" y  S/ M9 E4 O8 g& [#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
+ N" B9 b) P+ I3 L) E1 ?2 t2 e. B#define OPT_TCINTEN_SHIFT                   (0x00000014u)2 c: T, d8 u! A6 a  m8 X
" t! A- b  M! F. y0 s
char ping_buffer[PING_PONG_BCNT];$ f7 E0 |$ a& N
char pong_buffer[PING_PONG_BCNT];
# s- o, Z% f% |6 i9 [
* N. H$ V, P, g& c; K' T7 t- k9 l+ Q
% I8 h; g9 e( Q
, x# [0 b3 G- v* D9 }2 J* O5 k, A
- K! X9 _) v' N9 J( C6 `4 }static void ys_edma3_init()
8 |% H5 b: c, E7 ]4 l9 g& N{
3 b; u( P* Q/ b- Q3 A# [        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
; T* r6 H: U+ [* i        EDMA3_DRV_Result result = EDMA3_DRV_SOK;+ i+ z$ o1 K& H* t6 r' M2 Z
        EDMA3_DRV_Handle hEdma;
' T/ R9 u! S1 p' H% \8 o; N    uint32_t chId   = 0;; u& J3 x: K7 T+ i! }  J3 l2 [
    uint32_t tcc    = 0;
( \  K+ L: G7 i* D2 q3 ]& y
5 x5 l3 R& A0 `& f( S% x    print2arm("edma3 driver init...",0);
" z3 Q  {4 \. ~+ a4 C
/ h, V. ?$ }( }" G6 ~. c7 m6 `        hEdma = edma3init(0,&result);
. k6 P8 _+ e1 G/ ~        if(hEdma)+ Q  b( T9 _0 \$ ]+ D  m3 X- A. s! _
        {! B. Y8 c) E* a( t2 P
                print2arm("edma3init() Passed.",0);
" W+ t/ S* [; e% w! j' \3 x9 ^* W$ T        }/ Q, ^2 S6 k- Q  L, r1 T
        else; @8 i0 ?7 v3 z) l
        {
% O$ r4 M( ]# T7 R( e. E" v! \                print2arm("edma3init() Failed.",0);4 c$ y% T# ]6 L) i1 k
        }: k) e8 C4 W8 h
       
1 }& `/ ]  A$ T4 {. q        if (result == EDMA3_DRV_SOK)
8 \) s. T& y" b8 I    {
/ P$ t4 v' v! H& {% y$ z                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,. q. G) a) E! [
                                                       (EDMA3_RM_EventQueue)0,. T6 |* T5 D0 A: O" M$ ]4 t
                                                            &edma3_isr, NULL);8 U# P# D' X" S' Z4 K7 [
    }6 g/ @6 n: W& \3 U
       
& c7 S( \- r/ {. Y8 m        if(result == EDMA3_DRV_SOK)
  ]3 Y9 L2 k/ {7 k: q        {1 P' P  ]9 N% S4 x, e
                paramSet.srcBIdx    = 0;
5 O$ G  ?- z0 o% W8 V: U                paramSet.destBIdx   = 1;' m/ c. F( m- z" J) b6 c
                paramSet.srcCIdx    = 0;
  s& Y0 S) E; V: E: Y( E                paramSet.destCIdx   = 0;) Z) J0 a/ O! u) f$ G
                paramSet.aCnt       = PING_PONG_ACNT;* l0 D5 w, V9 M3 ]
                paramSet.bCnt       = PING_PONG_BCNT;
0 ~1 k+ L4 E/ `/ m$ d& L                paramSet.cCnt       = PING_PONG_CCNT;
' `" T3 x" A% f               
8 h( n2 S: ]6 G7 F) B$ h                /* For AB-synchronized transfers, BCNTRLD is not used. */
! O, E, {6 u8 j& z) n6 G% U                paramSet.bCntReload = PING_PONG_BCNT;! W+ b, |) \+ b' i6 T
0 B% J' Q! |" e5 j1 B& [; |6 x
                /* Src in constant mode Dest in INCR modes */
0 S- c8 L6 U& h; {: u                paramSet.opt &= 0xFFFFFFFDu;
7 U1 f/ N1 F( W8 M+ m- E9 m3 v1 m                //paramSet.opt &= 0xFFFFFFFCu;
9 d& \- I7 K5 n- e) Z                4 P' k  [1 y# g+ y
                /* Program the TCC */) O4 i& S2 [7 m3 X2 q
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);: a5 K  T) m; X# Q

/ c5 _; A+ b1 q" t7 e. X                /* Enable Intermediate & Final transfer completion interrupt */5 C7 ]: k2 B6 B/ [% a' a
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);: C& s) Z: E2 ?+ Z. G2 D
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
$ P2 u0 ?# b" {& j7 U# ?  j4 ]' g, G! @: ~
                /* AB Sync Transfer Mode */
+ B/ ]' F/ Y6 ]) J$ r# k/ _$ b                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
" d/ s& D9 ^# ]* b' ^6 v                8 |  x- y/ o5 h' v
                /* Program the source and dest addresses for master DMA channel */5 E$ j; @: D4 {" K1 w
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
4 A; Y* }" R1 H# {' g3 f- c                paramSet.destAddr   = (uint32_t)(ping_buffer);
4 t# J% W' G: y) x' O6 e, Q; d7 x* V. H# a/ O3 ]4 e$ K  N
                /* Write to the master DMA channel first. */4 {5 Z9 }1 N, F8 V
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
$ g( [1 ]: @2 b" |$ {8 W    }       * n% H4 I) I9 k; {$ b* l

: ?' G  K9 J0 ^5 G' }  P0 m- Q        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
! x! E& D' K8 \. H" }/ h        4 y) F# a: k$ v: Z% ~, Z/ K
    if(result == EDMA3_DRV_SOK) 1 ]- X' _6 V2 c* Z8 [
    {
$ H* Y7 f9 M! J# y; d/ g            print2arm("edma3 driver init success.",0);0 t3 h3 a/ J, j  u; X1 n; j
    }   |7 h% n) h! d9 F; A
}
( R: i2 k6 I" W& n/ z
+ T8 w; K$ N2 W( e  u9 c5 e& F4 I
9 E$ F  }  z6 Z8 O" g* }7 QEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
7 W" R& z1 }- [: C  C# `! K! i8 Q/ U

3 k: C( z8 Q2 [' F: G8 h: C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47
, A- d6 p3 v& n( u" o/ X每次DMA传输完成后都要再次使能传输
, W  x! v" d* F: V6 B
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-24 10:47:00 | 只看该作者
每次DMA传输完成后都要再次使能传输
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 21:02 , Processed in 0.038957 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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