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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
1 k6 Z5 L. O- v* ~" V' ]" O0 }#define  PING_PONG_ACNT          1( }" Z1 f* L& x5 i
#define  PING_PONG_BCNT          8*32*40
/ P  W9 P& J% B4 T1 V, B//#define  PING_PONG_BCNT       1
) _8 T3 c: s! X5 @3 J/ ?#define  PING_PONG_CCNT          1
+ Y' \8 z6 `9 H#define  MCASP_BASEADDR          0x01D000007 @7 G# l9 Q6 j' w  t  y! N
#define  Mcasp_RXEVENTQUE        (0u)
( A9 e' Z1 e, {& O
. F! w, h% t1 a' w5 s  O/* OPT Field specific defines */9 q" G8 }) [! I/ _+ `& l% ]
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
# G/ k; O+ d. d#define OPT_TCC_MASK                        (0x0003F000u)3 S! E1 z% X" p5 |/ s* B
#define OPT_TCC_SHIFT                       (0x0000000Cu)
0 t- \" W& C4 u- \1 V( n4 a- E#define OPT_ITCINTEN_SHIFT                  (0x00000015u). N: E- M8 M+ M7 v9 y7 d+ K, @+ c  A
#define OPT_TCINTEN_SHIFT                   (0x00000014u)# L3 G5 F: `1 d1 @7 Z

- @! M- W! T+ i2 ?4 A% g: ichar ping_buffer[PING_PONG_BCNT];
# v: M/ C# @" echar pong_buffer[PING_PONG_BCNT];) p# g, o' H& r, _

( R! P4 p$ E- J" `, K* f" `$ g5 }* i9 t% m6 B0 a+ {$ z
7 {3 e6 e7 I. P1 {! u

6 Q+ ?/ ]" E* K- ~  g, n' Jstatic void ys_edma3_init()4 _# n: y, Z3 z2 I6 O
{5 X4 k, Z$ d6 T
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};$ L$ j" [( F4 b; j
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
$ y- m* e( Y9 Z! `, R! F% g9 {2 m9 B        EDMA3_DRV_Handle hEdma;
/ k7 X  D) z* u) Q) |  T    uint32_t chId   = 0;4 G9 r$ \+ d. q8 u, @2 L3 [, Z6 I
    uint32_t tcc    = 0;3 F1 F$ D( e; M
, s$ g, h# s* Q' U7 h
    print2arm("edma3 driver init...",0);
& K& |- H& k; t8 ^. Q/ a6 t$ _: {2 a5 [# c0 C
        hEdma = edma3init(0,&result);
% H, R& ]' T* i2 u* \! ?        if(hEdma). K. j( |& b# o: b+ D
        {
% Z/ ~- U5 p, P) N                print2arm("edma3init() Passed.",0);- v* J5 M7 |) H
        }
' B7 w6 W. ^1 j  j' _3 d. R+ A7 j        else
  |+ r, S, S0 {! I  O: K% {        {
2 G( p; F  ]2 Q9 X' P2 A/ R8 r4 ^                print2arm("edma3init() Failed.",0);
+ ^0 M+ u, h6 U2 c- k* {        }- @, r3 @% [! p/ ~
       
" n3 m- r- q3 ^        if (result == EDMA3_DRV_SOK)% j+ {( q8 z0 G6 H0 ~
    {3 w9 L$ ]) F3 G% m+ x& ^. ?
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
2 C3 M8 P' w' Q, d2 _: [7 z                                                       (EDMA3_RM_EventQueue)0,
7 J( |( J7 R1 c9 P7 V5 Q: t                                                            &edma3_isr, NULL);+ l! L! O. Y4 v. v9 U
    }
" l6 H* b; C; ]  B8 Z        : n% l- u: V8 F/ r( q2 O; o
        if(result == EDMA3_DRV_SOK), h& L# f1 b0 M
        {$ Z4 |2 X  ~% M1 J! F
                paramSet.srcBIdx    = 0;" j6 J5 c8 N2 \/ }1 x1 r
                paramSet.destBIdx   = 1;
* W+ g: j7 s$ e  e) R* k( t9 l- x. y                paramSet.srcCIdx    = 0;% m6 D/ R  ]6 w4 }) v, G3 X! H' u% p
                paramSet.destCIdx   = 0;7 L0 Q  w" c6 @' i3 l0 `+ {
                paramSet.aCnt       = PING_PONG_ACNT;* u, i$ w4 Y( [  V
                paramSet.bCnt       = PING_PONG_BCNT;
& \$ O5 L+ T, A( ^                paramSet.cCnt       = PING_PONG_CCNT;
! K0 }" y6 ^# v               
) X) r; u+ ~0 g2 L% G1 x                /* For AB-synchronized transfers, BCNTRLD is not used. */
* [) Q; ~+ x9 p8 h* A5 M2 ~! P                paramSet.bCntReload = PING_PONG_BCNT;3 {* E6 e; G: J! ?, b- M$ p

' _/ [+ u/ {7 I: t                /* Src in constant mode Dest in INCR modes */
6 n* V6 I! U3 F/ k$ Y5 F* l                paramSet.opt &= 0xFFFFFFFDu;
' N2 [6 r5 R: d' K* t                //paramSet.opt &= 0xFFFFFFFCu;5 d" o/ i4 d3 x" }3 \4 I
                ; x" J% D! V0 Z5 ~
                /* Program the TCC */  R( W' @# i7 n" `
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
/ F0 f! A. b2 M) p% n% M" r6 l* Z- P0 o6 S
                /* Enable Intermediate & Final transfer completion interrupt */( H; {2 e9 u+ m; A" m8 |$ Q: r
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);2 D6 @+ {* N9 e# c! x2 ]0 g7 a) E
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);9 E/ Z4 n" s9 x5 M2 e

( @3 k2 I6 ~: i9 n+ A                /* AB Sync Transfer Mode */
; p) @! ]; f5 V2 y9 O                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
* G# S3 s; B( W+ e/ _: D                3 [8 g, z, r% X( a; B/ t: I
                /* Program the source and dest addresses for master DMA channel */  p9 G5 K. B$ i
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);' L1 L/ R! C. G% H* V5 d, v
                paramSet.destAddr   = (uint32_t)(ping_buffer);
' d# G$ z/ U: I7 @- Y
+ V& y) T! Z7 n# R+ B0 `! b. Y                /* Write to the master DMA channel first. */. x( h7 \; d& L% _* ~  X6 i9 w
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);( e4 V( R& X2 ~! b* z. b+ c
    }       - _; _/ N- Y- M+ V. K& J

+ M) w' O2 U0 H+ B7 {! Z        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
% h# z) j& r) _) M. ?. T$ _) V       
5 H, Y: ?5 _1 y9 c) u1 d    if(result == EDMA3_DRV_SOK)
1 \+ f$ |1 x3 ?2 S. u    {! p. d* U2 m* f7 c# c1 v
            print2arm("edma3 driver init success.",0);
& z8 `) O- y* C% \8 J    } 8 U5 w# v0 `1 i/ |; r
}
! Z" a) K4 B+ _5 Z* Q
- f# W  C4 e6 x3 N% \& O2 I! @% ?/ k( Q5 j8 k0 G6 G" s
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。8 t( b# M: x9 Q; S, T1 _2 v% I

9 X& I9 e4 d; x, m& h' \9 V1 F4 _  u! g$ }( ]0 q; R$ X
分享到:  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; x6 a( X2 m5 ?' L: J; Q) U
每次DMA传输完成后都要再次使能传输

  x& w' b# U$ W3 e# r) a原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-28 03:13 , Processed in 0.038203 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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