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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
( C& \/ K9 x3 ~2 T* X#define  PING_PONG_ACNT          1
* ]/ E, v) b) i" _+ Z  ^# w1 I: n#define  PING_PONG_BCNT          8*32*40 , [/ X7 G; Z0 N' C( e
//#define  PING_PONG_BCNT       1
9 I* B" b* N9 ]' ]#define  PING_PONG_CCNT          1( l$ Q8 }" o* y  F) x: t
#define  MCASP_BASEADDR          0x01D00000/ Q  H/ C+ Y. O+ e' Z) K
#define  Mcasp_RXEVENTQUE        (0u)& i9 ~/ E  ?/ Z. ~$ M
. o8 V3 e! d; {1 ~
/* OPT Field specific defines */' w, G2 x; p' v. C7 I+ V: s: B
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)1 C; [3 j: [; P) O
#define OPT_TCC_MASK                        (0x0003F000u)
) |9 E6 Z3 R" Y/ s#define OPT_TCC_SHIFT                       (0x0000000Cu)) w0 o. V, v9 ]' t! y3 R
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)# N# Z, v; ~) ?0 G% Y: _  b
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
" k) Y6 d/ f* m6 b2 R% c4 _& q
8 ]) t' J# K; A0 s* \0 W! Schar ping_buffer[PING_PONG_BCNT];* k3 G' E. q. A+ {. [' Q: {. P
char pong_buffer[PING_PONG_BCNT];
, G/ o  O! n/ }& h9 W. C: l, m: T: D3 d

, G# w& J8 ^" L& J% u
+ p+ h; w' F4 M( d, S5 u$ P/ n  u
static void ys_edma3_init()7 A/ o2 m0 L0 S- h
{) Z, S* n' l5 Y- Q) e
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};$ t- A7 a6 |6 X9 y7 y5 }
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
0 w, r' G% `2 |! e/ G2 r+ C        EDMA3_DRV_Handle hEdma;8 W# _8 n, [: t6 H' y* q( o
    uint32_t chId   = 0;
* t& o2 m7 w8 ~+ h) ?    uint32_t tcc    = 0;
& S0 c7 u7 A9 y4 C
' E9 E0 K, g: Q  k. t, _    print2arm("edma3 driver init...",0);
4 j; X8 @5 @% y" v# V; l4 v
, t3 r# o& \, N# {        hEdma = edma3init(0,&result);0 a- z- R! k2 Q/ Z0 C
        if(hEdma)
8 ^; V0 g4 a& {- S2 T5 S2 x$ v9 `        {2 j! |/ _( f. P3 n7 W
                print2arm("edma3init() Passed.",0);6 s& j  G) e6 i. Q7 Q8 u+ p
        }
3 P7 j9 {2 i5 P, ]( m  `$ Q7 V        else
4 T$ v/ m/ a4 L# u0 G; h0 {6 l        {
. t! i, b' @0 x9 e- T                print2arm("edma3init() Failed.",0);
7 w* P4 W; y5 O2 W# `. g9 v        }( K' d0 \/ \4 D5 z
        4 l/ j; i2 U) p8 v: f$ L  c
        if (result == EDMA3_DRV_SOK)/ e: C4 U  {6 X% @! {# y9 q
    {
8 O8 I4 J* [; `4 i) U( a! Z                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
: z' w6 a! `. _% O' _- b, d                                                       (EDMA3_RM_EventQueue)0,5 i' o% f: o+ h" h: q9 `! r4 s
                                                            &edma3_isr, NULL);9 x- F% X" S; N* @3 o/ x
    }
  V" J) W$ s8 ~8 H" m4 Z" U       
9 t9 q* Q  F# M% }. H# K. j; Z2 L        if(result == EDMA3_DRV_SOK)
+ i! A, d9 t( M2 ]& }& E        {) ~  X/ v+ m) D  {
                paramSet.srcBIdx    = 0;2 v* I! V/ l: b0 K7 r
                paramSet.destBIdx   = 1;6 f' u, m, J$ u8 y5 a: Z( Y$ k! w
                paramSet.srcCIdx    = 0;7 B& J* P) m6 x2 Z1 ^: R+ |
                paramSet.destCIdx   = 0;
' E( c: b- o2 A+ u1 g                paramSet.aCnt       = PING_PONG_ACNT;) a( f; S. {7 `6 F
                paramSet.bCnt       = PING_PONG_BCNT;
. l4 M* V; s: N2 b( y( ]$ s* ]; Z; w                paramSet.cCnt       = PING_PONG_CCNT;
8 G& _$ d8 |) r! X5 y* U! X                " C& ]! Y' N2 z% j
                /* For AB-synchronized transfers, BCNTRLD is not used. */
0 E7 y+ V8 d( n) A7 u1 Z6 g                paramSet.bCntReload = PING_PONG_BCNT;8 G4 G5 w* G' ]2 C8 p7 D- o1 O. P

: H6 {5 `2 {  n) v" K) E                /* Src in constant mode Dest in INCR modes */
4 f* _' u8 J/ y0 K  I; Y                paramSet.opt &= 0xFFFFFFFDu;+ `' T+ r5 K5 W0 y  O
                //paramSet.opt &= 0xFFFFFFFCu;( A9 p( G& `8 o2 o
               
8 x2 f2 X: K" o& ?                /* Program the TCC */
3 I9 E1 H) p# K" p                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);  G3 L; r8 D2 |/ u
( c: P. r2 f5 A6 Q6 S  h, i5 o
                /* Enable Intermediate & Final transfer completion interrupt */; a* U6 ?% j6 V
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
. J7 ]2 d6 I' i/ I                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
* S5 d3 U% d* F, m4 z  y/ T- q+ k$ f+ U) |: p1 R
                /* AB Sync Transfer Mode */9 M$ l5 P& y. {
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
0 M! b. [3 L' [5 c6 w; Y) e               
" A1 j4 x$ o4 K3 Y3 ^* Y7 Z; `1 }! h# B                /* Program the source and dest addresses for master DMA channel */
$ Q( N" U( h$ x  _& a  k0 f4 n                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
! ~# M3 Z: S* z6 I                paramSet.destAddr   = (uint32_t)(ping_buffer);
! N9 ?# R: H* {% h, m
* H( U: c" G4 C4 D: N8 ]9 D                /* Write to the master DMA channel first. */# M8 d- g+ t) E: h
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);' K) H! e" C+ `8 _# {6 ]/ p
    }       + C- ^  m' P* s8 S8 ^  p4 ?

2 X6 y6 h$ _0 o; I8 l- r0 N        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
0 C: l& a" h9 d0 C        4 c4 b+ C& q3 ~
    if(result == EDMA3_DRV_SOK)
1 E- q) G, V5 i- Q! \0 I3 E    {/ s! S5 M! ^9 H! X9 G
            print2arm("edma3 driver init success.",0);' O# z$ P) _7 r+ D
    } % y) ]1 ^2 H( e3 p' k) f; N
}4 P" V3 h( w$ l" J( n& }

" ?$ U5 L' `# b& p
& O' K* J- g4 @# O1 C" t* {EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。5 d. M( Y! Q5 N$ o' b0 T
: i7 C& a. a; f/ U) A

3 R- F& x" r$ U( l/ e+ D5 `
分享到:  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
/ b7 f. k/ ~/ U( u% f3 i每次DMA传输完成后都要再次使能传输
* P; G) A& o) S' V
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-13 17:34 , Processed in 0.038671 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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