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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:9 J( o/ B& m% `# U4 g$ s2 p
#define  PING_PONG_ACNT          1
$ s& V0 @9 U* q5 I#define  PING_PONG_BCNT          8*32*40
; e7 p. r7 X" c# z/ w//#define  PING_PONG_BCNT       1 ' J  D  N% Q( q- L8 E6 _
#define  PING_PONG_CCNT          1
1 g9 J( |/ A* n$ u3 F5 @0 r#define  MCASP_BASEADDR          0x01D000003 c4 o' Y4 @$ m* b  q" k
#define  Mcasp_RXEVENTQUE        (0u)
/ T8 d7 n' n" ~- z, i5 I: q+ y; k/ Y+ K
/* OPT Field specific defines */
  S! H+ K; s+ I6 p9 ?#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
- q1 H3 C7 P3 J#define OPT_TCC_MASK                        (0x0003F000u)
- z) B! I% H) \! Q#define OPT_TCC_SHIFT                       (0x0000000Cu)$ N; O1 Q# j. z* d  k  |% I
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
. V4 U9 q& ]' W  d; N#define OPT_TCINTEN_SHIFT                   (0x00000014u)5 u" F2 o. a# K! R& v
5 Y& p8 V0 V1 r7 g' X- q- K# Y
char ping_buffer[PING_PONG_BCNT];% ?9 b5 o: v% Y& ~7 n5 X
char pong_buffer[PING_PONG_BCNT];5 Y' S2 B5 ]* t" R& Q+ |
( S8 g% r, |" l' n

' R0 e& T& D+ g% K
0 u5 l# x  f6 x9 G) q1 F7 S% i2 d9 _& L6 o6 Z
static void ys_edma3_init()6 ~# t! a" j/ o5 v4 D5 F
{
0 e4 [6 u( `7 _9 M8 b& g        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};! [- J" l; C) \; _" W
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
% N) A1 N* Q, ?* K        EDMA3_DRV_Handle hEdma;
& t% X( X7 z0 I/ h/ c    uint32_t chId   = 0;- c: d& u& v0 G3 \7 l
    uint32_t tcc    = 0;
8 Y) u; r! E3 }- F
/ I, g. i& k- ?2 `& u5 U  w8 d% o    print2arm("edma3 driver init...",0);
, E1 |$ h( T; l5 h8 G- z( R
5 ~) g: s, {: K+ f. V% c        hEdma = edma3init(0,&result);
7 W. {% L+ ^. d        if(hEdma)! T7 a" T* I4 P$ ^+ R) N. A
        {: @' a9 D) J; Q- X, o1 Z; ?* U; p
                print2arm("edma3init() Passed.",0);9 L& U! }. @; ^& F
        }
. n; C2 ]( q2 z0 m- `8 j  H# M        else
7 t5 h  e9 c9 S1 k! `( [; d  t* g        {1 U5 \* k3 T! b. b8 f
                print2arm("edma3init() Failed.",0);
( O( N* r& r  S% u  G7 N! `        }6 Q5 p* F9 Y5 ]( F5 V3 t+ p
       
1 i5 o4 E: g. O        if (result == EDMA3_DRV_SOK)# F2 F8 U3 l* C* F% Q
    {- n+ I% W. C8 Z: e
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
0 j5 \% A2 ^4 m+ m                                                       (EDMA3_RM_EventQueue)0,5 O# j3 [# ]) A
                                                            &edma3_isr, NULL);
8 W* k) y1 x1 o! x    }
' @$ i5 h& L1 e5 T* b1 J+ f& K3 ?8 _       
3 q$ e  }3 d! I0 z3 k1 W7 U8 e        if(result == EDMA3_DRV_SOK)& T1 A. Z6 a( G/ _& F+ C2 P6 \6 i
        {
  m: {: a8 U4 u3 E! J                paramSet.srcBIdx    = 0;  t1 p6 U2 F: h, k$ }4 Z0 {) p
                paramSet.destBIdx   = 1;2 o; ]) y! n% K# g' ~5 E& I( c
                paramSet.srcCIdx    = 0;0 z+ v+ O! t, [6 v4 u
                paramSet.destCIdx   = 0;" U" T7 f* K; y( {( J# C0 d
                paramSet.aCnt       = PING_PONG_ACNT;
8 P+ ?6 L/ |3 k5 |' l                paramSet.bCnt       = PING_PONG_BCNT;
: ?! M, a2 D% g& P% S$ u                paramSet.cCnt       = PING_PONG_CCNT;/ X% A% X- r* S9 {$ x
                # r& I6 v& l+ X0 Q# [0 n6 U6 e' |
                /* For AB-synchronized transfers, BCNTRLD is not used. */
& [" A6 C# u0 b7 _                paramSet.bCntReload = PING_PONG_BCNT;
+ s$ D* H' o% F+ X( L0 B9 f3 P: B0 g# U5 f( ]2 l2 m) `  x' q
                /* Src in constant mode Dest in INCR modes */
1 L+ N1 m7 j3 i( a, N& @  }! ]                paramSet.opt &= 0xFFFFFFFDu;
8 Z) {) f; z* y7 w                //paramSet.opt &= 0xFFFFFFFCu;& N" V9 h* G  u' H
                5 d4 D6 R8 L8 C! z
                /* Program the TCC */
" Y5 z. @. q/ }  c" u$ y- l                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);2 {1 B/ {6 }/ f
. ^8 U) i) f& ~9 J4 L6 Z* v+ M
                /* Enable Intermediate & Final transfer completion interrupt */
% i( j4 s* N# y                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);% D7 \; M3 e2 X; ?9 i
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
) J+ s/ V# Y) @$ ^) L8 V3 d0 _6 r$ X. s" y* {
                /* AB Sync Transfer Mode */# O( u- J- ~4 h
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);0 \& d0 k" h9 i) @
                4 p& S5 t+ }9 C
                /* Program the source and dest addresses for master DMA channel */
! e5 m( Q: G9 _9 }7 T1 V  m                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
0 `4 }2 |/ ^% y                paramSet.destAddr   = (uint32_t)(ping_buffer);
' q! w$ N: N- N; n2 @* Q# Q0 d! f) N+ i5 T! w7 @: x
                /* Write to the master DMA channel first. */$ c4 H7 P8 b1 W* H, S! U
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
1 I0 a  {, j9 k- G1 }    }      
+ M1 [& W2 T8 d5 W3 m4 Z0 A$ {( K3 m; P7 A, U
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
+ n5 @+ m& k( ?       
& ?5 T7 v% r4 q0 I7 K. ]    if(result == EDMA3_DRV_SOK) ' o" [, D( m# d
    {( c1 x7 S: t$ j
            print2arm("edma3 driver init success.",0);- {9 |7 c# ^! }# z1 x' Q; K  D
    } / D2 I2 \9 z3 ?1 A5 F& O
}5 v( k' H/ d- q$ m
7 d# s2 e% C' u9 p
0 l# f, S5 A: M7 _3 S0 s
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。$ v; V8 w  y* f8 N+ q2 k7 Q2 L
) U* n$ M/ t/ m) m% \& S

" x/ e# @" m% d) P3 u( q. ^) u4 C
分享到:  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:476 M# C/ [0 R) c( y
每次DMA传输完成后都要再次使能传输

7 O* |# W5 c1 k: w2 K原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-16 22:05 , Processed in 0.045091 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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