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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:5 z$ d7 e; ]; L5 Z- y; w6 V
#define  PING_PONG_ACNT          1
! U' Y' U5 y  j#define  PING_PONG_BCNT          8*32*40
$ z6 x) u2 B# Z  M; U% S//#define  PING_PONG_BCNT       1 ( `9 i# W$ ~( O; G0 T3 y1 M: V/ ^3 v
#define  PING_PONG_CCNT          19 U9 R; W+ X/ b# [- t! C: D6 S
#define  MCASP_BASEADDR          0x01D00000
+ [" \+ E# x% q3 g4 C# z- E* ?) }4 x#define  Mcasp_RXEVENTQUE        (0u)% l2 x7 e+ F+ x3 ?6 g7 ~" P" G

. E, @. F$ h5 o/ C" f4 D4 K" c3 N/* OPT Field specific defines */& ?2 O5 v3 i. J/ \2 o1 }
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
$ X3 v* _4 }* Z8 M/ t/ ~; R5 r9 I0 q#define OPT_TCC_MASK                        (0x0003F000u)
* D% K+ n2 U) K+ }: a! j0 c# p#define OPT_TCC_SHIFT                       (0x0000000Cu)
: ~# I8 h: a2 M5 x( R0 @#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
" ~; L7 o* J7 T& A& y8 N( `2 w* Z#define OPT_TCINTEN_SHIFT                   (0x00000014u)
$ `0 V4 b6 J* t2 i/ t
/ s, l+ w6 M. s; z* M1 Rchar ping_buffer[PING_PONG_BCNT];. g) t* Y- C4 s
char pong_buffer[PING_PONG_BCNT];
) U& p1 @; R8 d
/ j# _' Y. d5 W8 i" B
/ v) z+ ?* c& f. D  e+ L
/ b8 b7 D9 `2 p9 v8 b1 z$ B
% F2 ^) u1 L% k) S* W7 g$ Xstatic void ys_edma3_init()
7 w% O: |2 S) G; A{/ r- R7 V9 T/ ~9 q1 W) [' O
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};, w. [; H0 Q! @& T
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;& u' ?; V& A7 U; G) l; O! _& S
        EDMA3_DRV_Handle hEdma;% n" G' e( f" K" S
    uint32_t chId   = 0;4 A0 H) |/ T) T7 a% E; y
    uint32_t tcc    = 0;
# n% u4 |  N! z; L5 K# a. k& @% ?! ?( R) U
    print2arm("edma3 driver init...",0);6 c8 s) w7 C- t' D9 Y( Q, l- D
4 g3 q) X" ~) D) Q/ s' K' q$ y8 l
        hEdma = edma3init(0,&result);
, \# n+ y3 h, s* h7 w        if(hEdma)% M! @7 L; H2 ]5 H, F3 f; V$ Z
        {) p/ J6 r: V8 w9 R. g0 o( r
                print2arm("edma3init() Passed.",0);
3 |9 Z$ M9 S5 ^# D        }/ W% k0 E# \( }' P8 M; t
        else( e& Y" C' y$ k
        {
0 F2 c$ `4 C6 V8 X                print2arm("edma3init() Failed.",0);
6 ~# @5 I0 J' N/ m5 {        }, k6 N+ X. t9 h; n* u# ^0 L& k6 D
        ) y1 F/ \! _4 a7 ^8 u4 l  @+ f
        if (result == EDMA3_DRV_SOK)9 K. P+ f$ h- U; [0 O1 ]5 v
    {! {2 D. a! O5 y3 P: k, R% ?
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,+ H8 ^5 h7 G/ C6 I
                                                       (EDMA3_RM_EventQueue)0,
1 d: g" I/ T8 n1 \& b3 E2 n                                                            &edma3_isr, NULL);
& X, M9 I4 e; @9 L+ N    }* J3 D7 M& o- K
        - v' c+ F+ f7 P8 p+ A1 J  ]
        if(result == EDMA3_DRV_SOK)' h5 V4 u# D; ~: F
        {) {* i& I9 @6 S2 K5 b
                paramSet.srcBIdx    = 0;& C  H7 ]' w8 m1 p3 k7 L/ ?
                paramSet.destBIdx   = 1;
/ H* J. _3 S' p2 _6 J! s                paramSet.srcCIdx    = 0;
! i* J& u$ k: \2 V  h, k" j& _                paramSet.destCIdx   = 0;1 M  p" q" Z; H: r/ v  t/ ~7 v
                paramSet.aCnt       = PING_PONG_ACNT;3 ?8 L0 Y: o: c; P
                paramSet.bCnt       = PING_PONG_BCNT;, z, R/ W- s6 x) I+ y+ g
                paramSet.cCnt       = PING_PONG_CCNT;
% J# ?6 `; e' l5 k                ! U" W. c% \: G5 K( ~  l+ j+ T
                /* For AB-synchronized transfers, BCNTRLD is not used. */
# z% c& c2 \  X1 @1 p                paramSet.bCntReload = PING_PONG_BCNT;
1 z: u' c  |( l# U9 m
, `* k1 t& t$ Q, S& m$ A% t                /* Src in constant mode Dest in INCR modes */
2 p8 W4 Y1 ?3 u7 A$ Q* B+ s                paramSet.opt &= 0xFFFFFFFDu;
7 `+ W7 C" ?+ I( b                //paramSet.opt &= 0xFFFFFFFCu;3 t) ^+ l: z0 D4 h& U, W( ~$ f
               
+ K0 W, N& P; e# x9 E                /* Program the TCC */  v* H: a9 d9 i- b+ d$ J1 U$ }; Z& |3 G
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);0 Q0 o  e* @1 n) h6 U

* G; x2 C' e* j9 z                /* Enable Intermediate & Final transfer completion interrupt */) z% r) [+ n; L3 |' |
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
  G: x2 V! E1 y: E$ r                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
0 R5 X. N1 X- ~. g; e& q
" B3 b7 m. ^/ q# H                /* AB Sync Transfer Mode */: L7 D- _0 y6 A1 v0 @
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);4 e& }! [  q- O% i
                % K: R" ^+ D+ N) u; K+ Z
                /* Program the source and dest addresses for master DMA channel */
: ^9 x  W3 F+ v  @9 K2 ~                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);* s& ^, o0 R% u6 ~* G4 o( U1 @
                paramSet.destAddr   = (uint32_t)(ping_buffer);0 v* f: E4 Q( f) c& V

2 q) _7 W4 [! s& Q                /* Write to the master DMA channel first. */
9 Z3 `" E; t' `1 Q( E                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
* h5 r, Z' Q; a" E7 ^  U    }       , n4 @. q- F3 b% i
* E5 c& g0 m& {5 n# y4 A! I) V
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);) i+ J3 Q/ b% C/ G4 `2 Q- Y3 \
        : P$ e2 d; P5 k- H
    if(result == EDMA3_DRV_SOK) & n" [& x; \. w/ g( ^1 N. O
    {0 w7 ]" k) V( G% S( M( Z) o
            print2arm("edma3 driver init success.",0);
2 ^4 D6 j7 _/ L/ o8 M    } 0 L% E% L9 F- F0 K8 R, H# A7 g
}
9 x- i7 i7 E% W2 X2 w& }, I0 k
/ b+ J" O% o# H( l. e/ R+ D- L% g- P
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
1 |0 g3 e  F3 N; y5 ~
( Z3 w5 w$ o/ b, Y3 T* F" O1 x* i# R# V5 ~8 C; J- S9 z. ~0 `
分享到:  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/ w& {6 U( \7 {# [) V7 Z
每次DMA传输完成后都要再次使能传输

- D. w! y4 O7 F原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-13 20:14 , Processed in 0.040325 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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