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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
# L$ K8 H  B7 h- Z9 m#define  PING_PONG_ACNT          1# y0 ?. @) b# p6 Y, v
#define  PING_PONG_BCNT          8*32*40
! W1 m" f8 U' K/ U; }0 H//#define  PING_PONG_BCNT       1
& h% I% ~8 `2 z5 a3 C( t5 t#define  PING_PONG_CCNT          1- g7 ^; m7 q: U4 l
#define  MCASP_BASEADDR          0x01D00000! O; k* N. b  M( \5 K
#define  Mcasp_RXEVENTQUE        (0u)
4 M% d* A; ]. T+ Q0 K: o! A: U; D! |) ^9 K* M, _2 _( O% _
/* OPT Field specific defines */9 u8 u% Y, X/ }$ Z( j$ [
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
" r' M: L$ s0 ?# Y; A: w! p# C#define OPT_TCC_MASK                        (0x0003F000u)
# G$ z; X/ C  m/ X' w7 N0 ^/ ?#define OPT_TCC_SHIFT                       (0x0000000Cu)# v) x1 J; A+ c0 z
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)& b  W. l# j9 r# C6 w
#define OPT_TCINTEN_SHIFT                   (0x00000014u)& f5 `3 x* m- [5 b

8 w) ]0 b- W* s. ]  w$ o. [char ping_buffer[PING_PONG_BCNT];
1 D8 H0 g$ q! Y+ S6 w& wchar pong_buffer[PING_PONG_BCNT];
1 I( Z3 N5 a  C
9 {5 w% P* _8 f6 l( q
& F( _0 b: D& m$ `! E# D4 Y& }: V% I/ m$ |  n+ s
$ _9 y, \2 _4 t0 O) \) o
static void ys_edma3_init()
( _- q% X" t+ k" B8 B! U{
" I3 F. Y; X: R1 u        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
: s7 e3 `6 Y: D6 {, i3 A        EDMA3_DRV_Result result = EDMA3_DRV_SOK;8 C2 K' B8 r7 L1 y* T% P0 H7 B
        EDMA3_DRV_Handle hEdma;
: s0 t5 q% n' P$ R    uint32_t chId   = 0;
2 ^1 O" U3 e" ]0 Z( K6 y    uint32_t tcc    = 0;
! h" C+ D' P& _
) l0 M& T: m& i# v: O. P    print2arm("edma3 driver init...",0);
: y* w  g. c* V( M/ J/ s6 K4 e. _/ I! g( m, ?# }
        hEdma = edma3init(0,&result);
7 @, |4 \+ n( |% |# }7 z        if(hEdma); J! A2 P& Y3 H3 g8 B- D$ K4 @
        {
) E/ s) c1 l; w) X( j9 H                print2arm("edma3init() Passed.",0);7 A. M, O( p& N' I7 M$ @
        }
$ z  t4 k" {  B2 W! v( ^% @7 A        else
% D. A. S0 {8 F1 Q        {
! J  f9 V& P2 f9 S1 g% a! T4 @                print2arm("edma3init() Failed.",0);* `- i, o! J1 w. h) w, a
        }
9 \% d5 Z/ L9 h2 ~        2 H8 L+ i* Q6 ]; ~
        if (result == EDMA3_DRV_SOK)1 y+ K& E. V8 f& \" i  n! l) G
    {0 o/ i3 Z7 J2 j9 n1 K% Z$ a
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
; K' R; e( u1 L' T4 Y  m0 D                                                       (EDMA3_RM_EventQueue)0,& N2 _8 |9 @4 E& g
                                                            &edma3_isr, NULL);
4 l% [5 X2 y" ?6 P) \5 X+ T    }, F* c* ~( z- g  Z5 e
       
9 D6 c# G8 ]5 b% o        if(result == EDMA3_DRV_SOK)* ?6 ?8 O& E! ]- C4 y: @
        {/ r' r& `0 H# d# v6 x
                paramSet.srcBIdx    = 0;6 B+ J1 ]; P+ x$ }2 s! d
                paramSet.destBIdx   = 1;
# a. X- E2 _- O5 u: `9 E                paramSet.srcCIdx    = 0;
+ z2 v  d9 C5 {/ B, h  o7 J" |3 m                paramSet.destCIdx   = 0;
% d+ G1 E* ~. B' S# I) y2 S                paramSet.aCnt       = PING_PONG_ACNT;
1 G8 [5 |2 T- R3 i8 \4 H                paramSet.bCnt       = PING_PONG_BCNT;* g/ r. ^, x1 P& ~, H
                paramSet.cCnt       = PING_PONG_CCNT;
5 n6 A  p7 x/ U5 n( l2 h               
, c& x, @4 F% G                /* For AB-synchronized transfers, BCNTRLD is not used. */
- q1 q3 g1 P1 G# h                paramSet.bCntReload = PING_PONG_BCNT;: q' p" s9 W; @: b
1 A) h8 h& o3 O( F
                /* Src in constant mode Dest in INCR modes */
% {- d' |+ C( k                paramSet.opt &= 0xFFFFFFFDu;( V3 e$ m$ o7 L# t
                //paramSet.opt &= 0xFFFFFFFCu;
% b! |' j( e$ c% z) ?               
) z1 I, u! u- k, F9 `" V  i                /* Program the TCC */
- F( @0 O3 `6 Z                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
! q; ?4 G  W- [7 f. k, p7 \5 [4 s
# |6 t" F4 n3 N                /* Enable Intermediate & Final transfer completion interrupt */; N7 x% R3 E) u5 S  D, j( u
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);/ @$ ^* g+ G& z/ C# R6 a2 l+ O( ]/ r
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);4 o1 E& Z+ F" y: P! D
- g) H9 X; C7 ]
                /* AB Sync Transfer Mode */  G7 b1 s$ ]# }- w) z# g
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
9 U6 k  i9 Z; q- p' |               
1 P$ `" G$ I  s& c, n8 ]                /* Program the source and dest addresses for master DMA channel */
. `0 a$ J# ~& R9 s$ K' B                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
7 w  T1 K* S1 v/ u% f3 h                paramSet.destAddr   = (uint32_t)(ping_buffer);- J8 l% q) P) C2 U- d7 K5 g
3 K8 t$ f* X, t0 Q/ G
                /* Write to the master DMA channel first. */
' g8 d7 I" \9 _# n- U                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);$ J, o) E2 s1 e' M1 I3 j0 L
    }      
2 ]# F, L! z! C  n% u; J  ?! {9 v3 l2 g4 @7 F" y( A. B/ Q
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
$ T' }2 |1 R- I5 b1 r) K; ]4 ?       
; ~; m: n" l; h2 ]7 F- j0 L    if(result == EDMA3_DRV_SOK)
& K, t7 Q; W7 g( \" @    {' A: i4 Z  J! N; S  w
            print2arm("edma3 driver init success.",0);
' i8 Y, P+ `" _/ C- e; F) ~. e    }
4 F" s0 G/ ~5 g$ W}- m6 \" ^/ J8 z/ v7 ?
4 c* Q6 R; Z" t
8 @7 f5 c& D6 l. g/ ^7 H
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
6 h7 H* N1 }: O5 n  h; c
9 u9 s8 I$ L; M/ I0 j' L# y3 c  X) C7 C" a, d. Y6 j9 B2 G% o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47
$ v8 t/ G5 r# [. {: [" u" M每次DMA传输完成后都要再次使能传输

7 z5 G% P: l; P+ \- s6 |5 p原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-24 10:47:00 | 只看该作者
每次DMA传输完成后都要再次使能传输
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-27 16:45 , Processed in 0.052795 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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