edma3中断只能进去一次 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
9 [0 {" `9 |& \% u! h#define  PING_PONG_ACNT          1; T& j( k& c5 L) ?& \! d
#define  PING_PONG_BCNT          8*32*40
  h5 M. ]9 o- f6 i! F//#define  PING_PONG_BCNT       1
6 H1 U* _% K4 H. g& c* Y#define  PING_PONG_CCNT          10 v* {" m1 a0 M4 A
#define  MCASP_BASEADDR          0x01D00000
9 u! t4 x8 k, N; U1 r4 O: N! J#define  Mcasp_RXEVENTQUE        (0u)% k" e& _6 S2 S& H
- c' j  x, n, O% c
/* OPT Field specific defines */
$ B7 T/ Q# {! ?+ U4 i' d* Z#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
; S; i9 x; k! l#define OPT_TCC_MASK                        (0x0003F000u)' E, k9 S! F# D/ Z
#define OPT_TCC_SHIFT                       (0x0000000Cu)- \4 o+ f: }+ K  ^" i
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)% [5 X' L4 O+ E1 C' ?8 Y; ?
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
: j* x4 q, }6 h$ r8 d+ x: W9 Z0 X; j5 W. o0 B3 v
char ping_buffer[PING_PONG_BCNT];
1 A+ Z' g9 k# }; c' dchar pong_buffer[PING_PONG_BCNT];
+ g4 l, s* H0 o) K1 h& }: z; L- I( }8 c3 Y/ c
3 X' ?4 r  w1 y! A/ a

2 e- f- [: d: d: n, e4 P/ D- J- k7 T+ C, k
static void ys_edma3_init(); z1 V; p0 h. u" a. l) s
{. J) g4 g. Q" R" \$ `/ {; X, F
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};/ _" l! E9 n# O0 @( I( ~
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
9 x( o$ z; N7 [( Y        EDMA3_DRV_Handle hEdma;% y* x# O' s  S( V& s4 r# g7 c
    uint32_t chId   = 0;- K% Z+ B9 F5 \9 D& H7 n( g4 y6 z
    uint32_t tcc    = 0;
: H; g* G2 R* w6 C9 y; q
  m2 D' ^) |5 h/ Y    print2arm("edma3 driver init...",0);
" Z, M( y: \" O2 M! l( s' l+ X" q: P
2 K6 ~7 u4 X" C. v7 b8 }; w) _        hEdma = edma3init(0,&result);
9 y( Q6 U- O" _' E9 s        if(hEdma)8 f# P2 A+ D. O8 u0 I* v! x# \
        {
& Y% |+ I& j" l; \                print2arm("edma3init() Passed.",0);+ p) {- S) B" v( g3 u' m' N4 E
        }
, K/ C5 G% |6 T8 N' c        else0 j+ l* U2 A0 M
        {
6 K) N& E( y# E$ Z: @7 k! C0 C                print2arm("edma3init() Failed.",0);2 A% B( a9 i5 v5 k) ?# ^" k
        }
6 O: E4 I$ N3 W6 U0 ~# k       
% W9 i5 @9 t( ~( y/ ?        if (result == EDMA3_DRV_SOK)" ~* u# o$ c( o3 X, B
    {- S6 C0 `9 |0 L* f3 t% W% t
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,8 d; _5 b' m0 j
                                                       (EDMA3_RM_EventQueue)0,; S* A2 G+ H: i# s
                                                            &edma3_isr, NULL);& u6 s0 A: \/ \9 }5 j$ B  d
    }
+ U% @; x+ p$ H5 [- ]% j        . i+ p3 m$ n0 A% K1 W
        if(result == EDMA3_DRV_SOK)
/ b4 F  y& c. f: F        {! d- j% R6 H& K) v, B4 h  R
                paramSet.srcBIdx    = 0;
$ r5 z* m2 I5 z% `                paramSet.destBIdx   = 1;7 g( K$ w/ k: g# O+ Z
                paramSet.srcCIdx    = 0;3 s3 V  G% G1 j8 b
                paramSet.destCIdx   = 0;5 a& ]6 D( H9 Y! ?! M* l8 l! R
                paramSet.aCnt       = PING_PONG_ACNT;' A7 P% r* Q5 w/ O
                paramSet.bCnt       = PING_PONG_BCNT;2 E: g3 S* c* C. q+ `/ }
                paramSet.cCnt       = PING_PONG_CCNT;
3 s( K  g5 O: h               
- [; r8 E7 {1 [$ ^$ J. K- g. u' K                /* For AB-synchronized transfers, BCNTRLD is not used. */+ V0 [7 G2 Z: t+ ?8 \
                paramSet.bCntReload = PING_PONG_BCNT;! F! R4 `+ }- \7 `: x

' f+ N' |9 B; M; {; c                /* Src in constant mode Dest in INCR modes */
% L6 A0 S/ Z  g# \" u2 g8 I                paramSet.opt &= 0xFFFFFFFDu;
' ^- S. |5 d  F' r+ J                //paramSet.opt &= 0xFFFFFFFCu;( M& R3 x) Y; J& k+ V
               
0 ^% r( G% _% w7 A/ |                /* Program the TCC */6 w8 x7 b6 P6 S" I. ?
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
( q. @% J: }3 I( g$ k) S3 \1 E% ]. l* A
                /* Enable Intermediate & Final transfer completion interrupt */
; c( P5 t/ I2 r5 l1 o' h                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
9 P, F5 x$ r% W8 Z2 M8 A                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);! o/ m: o0 g% L1 S, _
+ E, X. ^# d2 E. }2 o. J5 x
                /* AB Sync Transfer Mode */8 v! z- p- @; B. B% E/ G6 D
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
: ]# r5 m2 i9 I9 h; @- [               
: v+ M! |. r. x) w) m! G# U% `                /* Program the source and dest addresses for master DMA channel */
, ~$ Z' h5 P$ d. n4 J: Q" h                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);  o+ i0 z/ I8 `$ y
                paramSet.destAddr   = (uint32_t)(ping_buffer);
9 y1 \& g# |% Z+ Q; u$ ~0 U
& f8 e/ A$ w. U0 K3 i                /* Write to the master DMA channel first. */2 n& b* `$ g% Q$ B" g
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
- g" G% q3 v+ Y1 L0 h    }       / E, \- G3 P3 t5 F/ I

; U2 C; I5 ~7 }; H# x+ h# ?        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);# D9 T/ Q7 u! U2 Z
       
7 V: s3 J, g& N  @2 k    if(result == EDMA3_DRV_SOK) : E3 |% c% v! W, B5 W! P8 }
    {
( y. |* L  ]! G8 f5 Y/ a6 L            print2arm("edma3 driver init success.",0);
  n, v) y2 j/ I& W    }
& \1 W! O0 m' \5 _1 H. {5 u! e}
' `% T) }% @3 [; F+ b1 L8 g, ?9 D7 ^# Q5 e( l
9 @. O/ b, S( Q8 V+ j- |: i
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
! Q, N6 u7 R: D) [- v& E8 h0 q, L: j* ], Y8 w# ~! S9 \0 o

1 L/ {& p2 z0 i7 O% f# z8 u
分享到:  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
4 K2 i0 F0 V8 l7 E. U每次DMA传输完成后都要再次使能传输

- s7 T9 ^  z" x% A2 f2 R2 J原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-26 22:23 , Processed in 0.041456 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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