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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
4 c0 e( p; l9 \; ^7 P. g0 H; S#define  PING_PONG_ACNT          1
* c5 D, m1 n+ V' P. H# G( \#define  PING_PONG_BCNT          8*32*40 3 i* s; M  d* z# u* ^; X4 d  S
//#define  PING_PONG_BCNT       1
& M' q9 N# m2 c2 ]#define  PING_PONG_CCNT          1) Z" g5 i7 I5 Z0 b2 _/ H( M
#define  MCASP_BASEADDR          0x01D00000
6 L# x; G, g1 o#define  Mcasp_RXEVENTQUE        (0u)
  B* u% b& n2 c# M. ], Q9 X
% u1 P6 U, V! e5 V" g; \: O/ L/* OPT Field specific defines */
1 g4 E/ Q- H+ ^#define OPT_SYNCDIM_SHIFT                   (0x00000002u), s8 n; w3 v) V- f( Y2 x
#define OPT_TCC_MASK                        (0x0003F000u)" U2 D& l# I, {
#define OPT_TCC_SHIFT                       (0x0000000Cu)
1 ]- v0 G; l" C- a0 O; M0 c6 \#define OPT_ITCINTEN_SHIFT                  (0x00000015u)0 p) z4 t% V9 S7 H6 Y3 {
#define OPT_TCINTEN_SHIFT                   (0x00000014u)9 B* M8 ~1 y& D
- \7 i! ]" @* o# r; y
char ping_buffer[PING_PONG_BCNT];; R& J; f3 v) f& ?) B
char pong_buffer[PING_PONG_BCNT];
7 Z! }  s' @0 a/ O4 j; w
+ C6 i' x# \; ^9 x$ j: g0 N( L6 g# p$ w( L7 h

! a4 A# ?, ^+ \) I3 Q( x: ?0 \$ c  P2 ^6 p# x" L
static void ys_edma3_init()
6 x. D* B+ t8 B5 ]{7 ?( q2 Z. W' c8 `; d* x
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
6 ^1 p  ^0 K: \* M0 n) j        EDMA3_DRV_Result result = EDMA3_DRV_SOK;1 ?2 o9 _3 J; q9 Z& e
        EDMA3_DRV_Handle hEdma;: _8 @* T+ O5 P/ Z6 M7 I
    uint32_t chId   = 0;
% A) a6 {/ n6 t# [3 S    uint32_t tcc    = 0;
3 `6 Q) _. I- r/ _: n2 U
( b5 q! W7 A0 |) d/ ~3 @) ^    print2arm("edma3 driver init...",0);
' X" N6 y# m& }4 }) v4 s7 R/ e/ N
        hEdma = edma3init(0,&result);
) x9 f9 V0 S  P7 H2 ?' X9 c, V8 U        if(hEdma)
$ _3 _/ m$ h; p5 O        {
/ a/ E! v4 s$ k                print2arm("edma3init() Passed.",0);
# K8 m. t, c* A9 [/ u" G: Q7 y        }
; m7 b7 V0 X8 x( p0 o        else6 J4 _0 B# F0 v% I' W
        {( c. f5 U( t4 b9 i5 W* `. h
                print2arm("edma3init() Failed.",0);2 Q, a* y2 I: R) T! T  `- f
        }
* c2 f! I) O; h. T, r        2 Z* C# j. m2 v
        if (result == EDMA3_DRV_SOK)" p$ K3 N, l. |
    {# d. c8 ]( k" a4 y' U; E- N
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
1 H6 y9 }7 U+ L9 M" Z                                                       (EDMA3_RM_EventQueue)0,
8 a1 ^% `: p( z& F. y8 R4 u3 w                                                            &edma3_isr, NULL);
3 J2 ~9 `8 t7 B/ J' C% c4 [1 z    }# p  t2 p! u, Q9 K$ q) i3 b# M
       
9 \7 B+ @/ m9 x9 w9 V. _- ^5 E        if(result == EDMA3_DRV_SOK)1 l  t+ x. }/ {) n3 V: V7 x
        {! F# s: T8 x* ~% b# v6 M
                paramSet.srcBIdx    = 0;/ D1 `9 G$ g1 ]- c+ Q0 g& p
                paramSet.destBIdx   = 1;# C/ j: x! n2 Z, x+ i, Y9 S! f0 E
                paramSet.srcCIdx    = 0;
& _. @0 ~2 k0 [% Z) s3 P                paramSet.destCIdx   = 0;
- M/ ^/ F2 X' C' B                paramSet.aCnt       = PING_PONG_ACNT;
3 P3 A  X: ~/ N8 p  k/ d! N                paramSet.bCnt       = PING_PONG_BCNT;- p. }$ L/ b5 ?
                paramSet.cCnt       = PING_PONG_CCNT;" K! ]2 I) I: B4 L, l1 M- Z# K
               
5 i# F3 B) U/ K9 O2 L6 h% @/ u                /* For AB-synchronized transfers, BCNTRLD is not used. */& \8 k4 A1 b+ A
                paramSet.bCntReload = PING_PONG_BCNT;
. |. {* u. n8 D6 U
( U9 G9 O5 m$ V# e; t                /* Src in constant mode Dest in INCR modes */) f! _# ]% s3 A! _. Y& S
                paramSet.opt &= 0xFFFFFFFDu;
: t2 R- L$ M2 z" G5 ?                //paramSet.opt &= 0xFFFFFFFCu;
& Y. {# h0 Y9 S# S& I( T3 y5 [. p               
5 e5 W0 P+ z5 _2 a                /* Program the TCC */! L! w+ a3 G9 `8 q/ Q
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);! v2 A6 E% a% f) y$ C

! {9 y- C  v  r& k4 c5 H                /* Enable Intermediate & Final transfer completion interrupt */
' ^! a2 z: o- f% I. O2 Q6 x2 n                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
  |8 J: C. f7 H: m; N% Y  B                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
' O* ~# u9 X! x) A# [9 C4 [6 }7 u" k% {
                /* AB Sync Transfer Mode */% G4 o+ F5 i% B: q, ^' O, _- |
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);( E" p' ]9 O  D0 f" @0 H& P  b
                  n- P  g$ E$ O! h4 A2 E
                /* Program the source and dest addresses for master DMA channel */$ E  k/ b* V+ d# [# g
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
1 U+ t0 }2 l  F+ S' G                paramSet.destAddr   = (uint32_t)(ping_buffer);
( w( w! ]' [# A3 A: J; |
8 a" C1 e1 ]& I4 a" f' O                /* Write to the master DMA channel first. */, z3 ~  V- `6 Z: n/ Y
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);! s3 K' ]9 ~4 o1 X% a/ k8 @
    }       ( h* f% l2 P: x' K" h% ~, \  n

; ]& t/ \  a: a6 o( v        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
, S5 u8 D4 S/ Q5 a5 P       
* m. \8 c0 Q& B  k, q+ e    if(result == EDMA3_DRV_SOK)
3 y8 `, J+ a$ o3 u/ Z3 A1 Y    {
: Y0 x# [: a6 q            print2arm("edma3 driver init success.",0);# k3 ~  k" y- b0 H
    }
% }# a: G, q% ~" l}
! [0 F3 Z1 d8 G& \8 m( S, D$ h% P
; ]+ f, U9 }- `5 a; c% U: ]# Q/ j4 W( F" Y
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。1 F0 v# D; \+ @9 X; g- ~$ S
9 Q. H2 G3 y" R8 }3 i
% S2 n7 K' w; v( k/ c. f9 {
分享到:  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
* ]+ e: t: {  k5 g9 x每次DMA传输完成后都要再次使能传输
  }! y3 J7 J  X9 s, ~* V
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 04:40 , Processed in 0.037525 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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