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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
2 ~5 b- u, {) V; `9 ?#define  PING_PONG_ACNT          19 W# b' d: m) x, m& P
#define  PING_PONG_BCNT          8*32*40
( s$ J+ H, f" T; O' s: q1 v//#define  PING_PONG_BCNT       1 8 c+ M) j2 [" B4 @  u# V
#define  PING_PONG_CCNT          1
# U! _( h3 X( v/ e- V( h#define  MCASP_BASEADDR          0x01D00000
" F* H) e. P8 \/ Z  }#define  Mcasp_RXEVENTQUE        (0u)
( ^# B& |* }  Z2 R% u5 ~" m! V- c' m4 K0 T
/* OPT Field specific defines */+ _- l* f: Q& x( z6 i9 w8 W0 t; s/ e
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)6 [5 g; O$ L' N0 U" a' f+ F: g
#define OPT_TCC_MASK                        (0x0003F000u)
7 f# U5 c- L5 S3 F. c" O) e" n#define OPT_TCC_SHIFT                       (0x0000000Cu)
( f4 U& G) i& z- ?#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
) w3 U0 {* }' @6 ?#define OPT_TCINTEN_SHIFT                   (0x00000014u)
4 v! `7 C. r; x* x: j; z
9 t0 o/ S2 `/ l* w$ `+ |/ X! qchar ping_buffer[PING_PONG_BCNT];0 \" S( ?$ @% s7 }- o2 Y1 L2 ~8 R9 f
char pong_buffer[PING_PONG_BCNT];
/ e7 h& D, h0 k% q+ b$ R3 \1 ~0 h1 G/ L/ U: N- p/ }; [) L$ V
2 G+ l: B! N; F) n
* h( Q& L1 Q( |+ o0 i$ w

8 @9 j' t) N; g% n+ Ostatic void ys_edma3_init()
; G. }+ r3 U5 k+ c! m. }# `' g{
' s- K" [9 ?7 @; w1 Q! y# |        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
! N  y; K  H2 R  \5 J        EDMA3_DRV_Result result = EDMA3_DRV_SOK;8 F/ v: H; Q4 M/ Z
        EDMA3_DRV_Handle hEdma;5 @9 C1 N* f6 [! X/ D/ Z
    uint32_t chId   = 0;
3 G, O/ E/ U* f) w( k    uint32_t tcc    = 0;
% ?/ G" r9 ?' M
" I8 I& L  @$ D6 p" e    print2arm("edma3 driver init...",0);
! d. d. N' S/ |: V
# u0 s; X% W* g/ c  W7 {        hEdma = edma3init(0,&result);" x& I# y, i4 ?9 ~  j
        if(hEdma)1 |0 F$ ~) ]! p+ m* h- d* t
        {$ B6 y- H) P1 S, _2 W6 Y
                print2arm("edma3init() Passed.",0);2 Y  i6 x6 S$ f  n
        }
) a% i8 B& P; h/ C# ^# d        else
( {" U( p: q, h9 i        {; C& D1 L( [! V( o  v2 G
                print2arm("edma3init() Failed.",0);
$ K) w5 o- y9 |  `$ W8 r; ]        }
  G3 c& V/ _& n. z       
. t) x$ D( V! }$ p        if (result == EDMA3_DRV_SOK)
- K5 z* h; `3 ^, K    {
" i6 `& f0 G* Z, z                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
6 m3 q4 y+ a  b; I                                                       (EDMA3_RM_EventQueue)0,
/ V  O8 l2 u; k* }0 F                                                            &edma3_isr, NULL);$ s$ G; v8 D' `+ `5 E: X
    }' U. f! n! A& a/ e8 _
       
3 q* G4 @/ u" I1 Q        if(result == EDMA3_DRV_SOK). D6 ?; j' b& W; o6 z* ^% n2 s
        {+ w  f" Z% C: c
                paramSet.srcBIdx    = 0;# g7 j. p* @/ T5 ?; s
                paramSet.destBIdx   = 1;
% v3 ~' k2 I" J8 J& Q- }0 Q1 \6 a1 m                paramSet.srcCIdx    = 0;
0 K. [2 j3 D, U& g" _                paramSet.destCIdx   = 0;
4 h  K6 }, H% O8 Y9 l                paramSet.aCnt       = PING_PONG_ACNT;6 _" Y" d  B# d, f6 _- M4 N
                paramSet.bCnt       = PING_PONG_BCNT;, A( n: b1 T  n8 \4 N0 p
                paramSet.cCnt       = PING_PONG_CCNT;
5 L6 W, I, g3 m* A) o, o4 K) B3 B                % n9 s# N& l$ s6 z0 r
                /* For AB-synchronized transfers, BCNTRLD is not used. */
' o' L# K  D0 {. I! {                paramSet.bCntReload = PING_PONG_BCNT;% n0 W. Z, R0 ?( @( P2 a

; a: q' g1 R0 l( m                /* Src in constant mode Dest in INCR modes */
: T; r  ?0 ?4 d# @; Z: l& a6 N# t; b- o                paramSet.opt &= 0xFFFFFFFDu;9 {9 l" p: o% m4 V7 t' M! f
                //paramSet.opt &= 0xFFFFFFFCu;; ]# s' |# K% @$ Z4 J  t
               
% f& a2 x2 k7 p$ |6 ~0 m                /* Program the TCC */
. o( J. b! B- b5 B  D                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
8 {% c4 \& ]" k5 h7 e
; c5 X2 C/ S! c8 i, S                /* Enable Intermediate & Final transfer completion interrupt */
; U3 G7 S$ r9 E- m                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);/ f* a  X0 S; B: C; m7 L6 p& r3 Z
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
/ A$ v) g+ \' s6 |% u
5 U$ J; q& ?3 c+ N( v9 @1 P6 c                /* AB Sync Transfer Mode */+ u, g. w" G  _# `3 U. A
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);7 Z% f3 a  R; j+ N" i, |
                * g' u4 E1 s  v6 i
                /* Program the source and dest addresses for master DMA channel */( @: v$ V( b- v7 X
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
1 N+ q' t: q8 q% G6 K( {) f* Y                paramSet.destAddr   = (uint32_t)(ping_buffer);- ^- _* h0 r! u8 @' Y. F! E) M

/ J8 F: N* @- o2 ]( m5 i9 R1 S                /* Write to the master DMA channel first. */
; Q! _  E/ i4 x5 d3 `& }$ e' a                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
9 ]* d9 E/ a/ z  n7 T3 c    }         @! R! ]  D( s
7 X' U- F3 Z4 i; C1 p, `! y
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);/ [' C" }3 t% Q: q0 M0 A$ l& o! E5 |
       
) R: {3 z7 \& g, m! t$ X; q, R    if(result == EDMA3_DRV_SOK)
8 G3 g3 x% B9 m! T* B3 N    {5 F' o0 v8 k  @1 T' j; Y/ o8 I) B5 J
            print2arm("edma3 driver init success.",0);
& }. A; P' _( ?    }
+ _- e/ O) n) a" l  A+ ^}
: d; r" M' Q8 ]  |. }  p: s8 m! I  C

3 ?5 O4 a/ }' l1 j/ HEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
* K; _+ `6 g" s/ x4 c5 }. @3 n# [* n' F8 b$ |! j2 F2 C
8 f" g, v. P0 }; ]4 }; {2 d) [8 `" L
分享到:  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:478 |  X6 A' B. @7 o. h, f# b! Y2 I: ]
每次DMA传输完成后都要再次使能传输

" @2 Y, b+ f- X1 ~% ^% M$ T原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 18:21 , Processed in 0.039367 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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