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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:; c$ p/ u8 R# P5 I4 S- I
#define  PING_PONG_ACNT          1
* W6 n: `/ N; l$ `( y4 b  u#define  PING_PONG_BCNT          8*32*40 1 I) Y2 ~6 Y6 L5 m% ]7 L9 J/ t
//#define  PING_PONG_BCNT       1   b& H% s! a/ ~1 U- l
#define  PING_PONG_CCNT          1
, F* d: }1 O5 N' Q2 y#define  MCASP_BASEADDR          0x01D00000+ ~5 z; M. \  S' h! p8 h
#define  Mcasp_RXEVENTQUE        (0u)- s: A, \' R6 H; `0 \1 X2 I$ @

" Y  [  N5 W/ R9 N, \7 k/ c4 J/* OPT Field specific defines */
: y+ D! ~) D8 x0 E/ m9 @* T  l/ R#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
, ?9 n( I5 \6 O% a, `#define OPT_TCC_MASK                        (0x0003F000u)$ U" _4 f! i4 o% L! T8 @  n" h
#define OPT_TCC_SHIFT                       (0x0000000Cu)- ?' l0 J% p& _$ _3 T
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
1 k4 k4 \1 V* }& Z* t#define OPT_TCINTEN_SHIFT                   (0x00000014u)3 C/ `2 J& u* U2 Q# s
' T0 F  i# \, i$ a% C
char ping_buffer[PING_PONG_BCNT];
4 e5 @; [% A3 x" m; Kchar pong_buffer[PING_PONG_BCNT];( V  c- {0 f1 H" Q9 i
( c( t6 T3 t* |  Y1 r, m" D& T; U

: I  Q7 O7 W2 ^4 N" B  H- h5 l3 o2 n) G
, ^4 I: }" B# \$ w& d
static void ys_edma3_init()
* t/ c# r+ J- s( X" d{
' W- O1 n. O- o, }+ s        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};0 B; A0 g3 z( k
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
6 v' D( o  R5 e1 W& w        EDMA3_DRV_Handle hEdma;2 O; Q3 w; w3 q$ b# O4 m; w
    uint32_t chId   = 0;
5 ]" c  V" Q, l    uint32_t tcc    = 0;
5 F7 c! {9 M0 }2 I4 m/ D9 z
7 |# [6 K; N; z! [( t, Y    print2arm("edma3 driver init...",0);/ T8 u8 z- _3 v  \1 ?

; }; k9 n* u- [4 Z# x* }5 ^# l        hEdma = edma3init(0,&result);
, P: G9 ]. Z9 B" d5 P6 D        if(hEdma)
% L! t9 z8 G/ ~. q2 S        {
$ A0 c7 a/ `- I% f  F/ R: Q                print2arm("edma3init() Passed.",0);
* X. o7 g* d- L$ L3 Q% I1 e        }6 F$ i/ R& f) V0 F! P
        else/ |4 \: _; s' ^+ P% F, y4 b% {
        {
7 u- _. C6 `0 K- Y( @0 n+ r                print2arm("edma3init() Failed.",0);
) z* E* S3 P& e0 x- S. n5 p* \        }
. t. }+ v9 r- F& n3 y7 J        ) G$ i5 N0 h5 A( ?6 D/ p, t
        if (result == EDMA3_DRV_SOK)
  ?4 J/ |4 I6 E' p4 d# M+ W    {$ h& o5 T$ G' R0 \0 q. O1 B% ]
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
4 c+ B6 Z1 t. u5 a& P                                                       (EDMA3_RM_EventQueue)0,
# C: T$ v( \2 S                                                            &edma3_isr, NULL);
* |% }/ c; J  a* F8 |# g; c    }0 P# d4 W8 n& K3 L9 p
       
5 X" K+ ]5 M6 K        if(result == EDMA3_DRV_SOK)7 }- X' G7 }% j
        {
7 ?5 Y& v# s& ?$ [- c                paramSet.srcBIdx    = 0;7 O; s$ b/ {) m
                paramSet.destBIdx   = 1;, _, t  k& i7 |% Z" C9 J) j0 C
                paramSet.srcCIdx    = 0;7 C- y, \1 |" T" }1 |" H3 N
                paramSet.destCIdx   = 0;. ]& c; I$ u- N4 w2 E
                paramSet.aCnt       = PING_PONG_ACNT;: o9 Z, M- P- z. ~
                paramSet.bCnt       = PING_PONG_BCNT;# Y6 `4 `4 v1 t" w$ ?0 \, E
                paramSet.cCnt       = PING_PONG_CCNT;
' J7 A) E1 e0 W8 o; w' u                9 s/ {% b* M5 V3 F
                /* For AB-synchronized transfers, BCNTRLD is not used. */
2 o8 [# s' S) Y! N$ b% P" n                paramSet.bCntReload = PING_PONG_BCNT;
; e9 \! f+ f# f8 ?
2 ^5 _* e6 U; D2 i                /* Src in constant mode Dest in INCR modes */8 L6 E5 B5 o' f" C2 Y; _5 @
                paramSet.opt &= 0xFFFFFFFDu;( K) y7 |% }, w8 u, ?( U
                //paramSet.opt &= 0xFFFFFFFCu;$ A. L7 v+ r1 v
               
; y. T0 Q9 w: L& o6 Q                /* Program the TCC */% d* C8 o2 d/ d2 W6 }% z, L
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
& D4 O  \* x2 _: |( ~6 F. |, T" s
1 H! r) Z: W' D                /* Enable Intermediate & Final transfer completion interrupt */
! Z7 j* n! J; l4 Z8 y4 e6 R                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);- A: c6 B9 l" t& g" z
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
1 L8 G; C  R/ }
' y. ?, C, ?1 C! w/ o- S                /* AB Sync Transfer Mode */
9 x6 U# r5 L  ]5 e                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
8 c6 ^# z7 J7 \( }( k0 C+ V3 ~               
, W6 l  c8 O% i1 L" \* u                /* Program the source and dest addresses for master DMA channel */
3 G  {' ?' j6 g1 ^6 h' i: ]                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);+ v2 @' \+ Z0 X4 d. ^2 V
                paramSet.destAddr   = (uint32_t)(ping_buffer);3 N' @9 Z, r' u9 G9 p
1 ]8 I* Z% c( [" m, @9 Q6 S! n# i) h
                /* Write to the master DMA channel first. */* M/ @6 p) M! p& M
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
8 M) L& e7 x- V1 w1 ~+ O    }       6 w8 O2 ~! V  b

7 U# L% [! F! {9 D- M3 b0 _        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);, z( X. N9 p. K5 }! J
        0 e! k8 f2 t0 ~) k2 l4 v
    if(result == EDMA3_DRV_SOK)
: e3 e; z# `& p7 [) i0 P$ [    {. g' F# _" G, V+ c2 A# m/ j. n
            print2arm("edma3 driver init success.",0);
0 N- {; v6 m% l6 L4 R6 e" w+ d; L    }
4 Z; G2 ?4 h! g0 ]3 [; q}1 b2 G, L: E/ n4 @8 C9 f7 K

* t; J1 a7 P0 H5 j( K+ E' |" N$ ?: P8 b" r' W" B. L
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
0 j/ n6 s0 s, N+ d% _
0 i# N; h$ W# S/ \- C" d1 t* y9 I6 e5 _8 F
分享到:  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# M& a) u) W+ n- V4 c每次DMA传输完成后都要再次使能传输
# t% a" f" `1 E. @( b
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-17 22:07 , Processed in 0.038595 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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