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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
5 A. w$ m% G3 o6 f#define  PING_PONG_ACNT          1
! V6 ^5 x( ~# `' L7 A& W- G#define  PING_PONG_BCNT          8*32*40
) G1 J' p& F- b9 }( N9 i8 U//#define  PING_PONG_BCNT       1 3 w! d7 W1 B8 n! f% G& z/ J
#define  PING_PONG_CCNT          11 X- r% }2 f( }* B
#define  MCASP_BASEADDR          0x01D00000
/ u  U2 R* d# Z" D3 R#define  Mcasp_RXEVENTQUE        (0u)
  ]* ?/ A0 O9 l" k0 v- `8 h+ N
/* OPT Field specific defines */0 e' ~6 q  a/ J' Q3 P8 p8 @
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
7 t/ P' n& E3 d+ b! D3 v#define OPT_TCC_MASK                        (0x0003F000u)
; p. Y% L/ E. |" ]  X7 H#define OPT_TCC_SHIFT                       (0x0000000Cu)1 t1 M7 t8 ^* f- p* e; X- J
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
7 M) s' q3 [3 L6 l  ?5 u2 S#define OPT_TCINTEN_SHIFT                   (0x00000014u). p; A3 R. p* k  A. H3 P7 U

) S: T' ^; I* ?" hchar ping_buffer[PING_PONG_BCNT];- z* w5 }% m% }3 v) ]/ h7 i* b
char pong_buffer[PING_PONG_BCNT];. V& B; d2 \/ E4 `$ C
8 K" p: Q& L* b( `1 `+ d
9 b5 j( D$ ?% ^4 r& ~

' V! _/ }# W) k# N# J; O, y) N5 i& s, Q) z  \3 T
static void ys_edma3_init(): T. @5 P# m7 x+ F% v1 V6 J. p
{
, \1 ~, Z0 c% ?5 J% G. F) {# E        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};1 _1 G7 O$ K3 \
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;: |  Q$ r% Y& l( `
        EDMA3_DRV_Handle hEdma;
5 M  h5 ~0 N: z, u3 z/ ?  N    uint32_t chId   = 0;- `( L; G* R# b3 \* j3 `& D3 q
    uint32_t tcc    = 0;
: p8 ]8 {# K# t* g2 ?/ c+ \
+ Z4 x  @% a8 m, o    print2arm("edma3 driver init...",0);' ^- Y; ~" E+ m8 D( i
. S. X5 _% p# t( Y* Q
        hEdma = edma3init(0,&result);
4 n! n" e- W  N0 i, U        if(hEdma)
" U5 h' O' X" O+ r- [& ?        {; x$ O3 `# j' Q6 ]+ b. J) _; d! `' Q
                print2arm("edma3init() Passed.",0);
/ P  d0 {( c3 |0 }/ k        }) a6 g7 k' A7 F9 c
        else
8 \1 p6 a$ G9 w& J, ]; E        {+ z, l$ [0 Z8 Q* {) i. W7 q
                print2arm("edma3init() Failed.",0);
4 Q) ]+ w0 S8 k( P3 h        }
1 q: S* D; E: n4 O2 N0 z       
# M' @+ p9 [, ?( A* n9 s$ l1 E/ x        if (result == EDMA3_DRV_SOK)
$ h% e$ E& J. A* y  v9 g/ Z    {5 {- K; J0 i3 a, ^* T
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
' I  [( U( x0 L( m& L                                                       (EDMA3_RM_EventQueue)0,2 [: M4 T4 l# @; A" \
                                                            &edma3_isr, NULL);
  g( f% S5 W: e3 a    }0 K- b0 @" F2 A, I. K/ J
       
+ y; d" F! q4 U# O+ j, Y        if(result == EDMA3_DRV_SOK)
$ _3 O( {4 m, Q3 u, P        {
# T) r( E7 r2 O+ u( Q: J% V1 P# U                paramSet.srcBIdx    = 0;
9 L" M1 z% A+ O. U+ c, h* Y                paramSet.destBIdx   = 1;: s: }% F: y7 W" P6 H& k* k
                paramSet.srcCIdx    = 0;  e; R  r& g2 N4 m: ?( t
                paramSet.destCIdx   = 0;
% i* O" l; V- Q# c* g6 B/ b                paramSet.aCnt       = PING_PONG_ACNT;7 _/ `5 ~' ?9 K: a8 k% v3 d) d
                paramSet.bCnt       = PING_PONG_BCNT;
$ N; g" U% X8 w                paramSet.cCnt       = PING_PONG_CCNT;
( Z" a/ ]) }: K- a, h  Y4 q               
$ O. N" k% s. k: j3 t2 i# y                /* For AB-synchronized transfers, BCNTRLD is not used. */
2 t2 T7 ^) E! L4 c* l                paramSet.bCntReload = PING_PONG_BCNT;+ `- S5 t3 X! l! k

& Q; Z2 N1 E1 K- v- K# b                /* Src in constant mode Dest in INCR modes */
) Y+ T: Y* v' R% H                paramSet.opt &= 0xFFFFFFFDu;+ K2 W4 B4 U, U; ~! x! p0 u: v
                //paramSet.opt &= 0xFFFFFFFCu;" y' _- N# }3 P5 F- e5 Q* V
                + V0 z, w$ [2 n$ D1 T8 s' i
                /* Program the TCC */3 ?9 a6 n5 H. n5 g. q
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
/ i9 B- h4 u% ^4 U7 i
# `4 B( q4 D0 {, ^                /* Enable Intermediate & Final transfer completion interrupt */. k/ x# m; Q" a! p! p! M2 }
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
4 r" s; |4 d, y7 b1 [6 M' H) N- q                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
. G9 K+ a. c( N: _' h5 H% X" G
2 d7 ~+ G( c  _1 [: C& M                /* AB Sync Transfer Mode */
3 a$ f4 s) M* F  M( K                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);' O& |. j0 L9 f$ m0 d; S/ j9 F
               
, ^9 h+ V" j. `( J6 N, F                /* Program the source and dest addresses for master DMA channel */+ ~: ]) i  r0 a4 q# X
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
& r) j9 o5 T1 l/ |                paramSet.destAddr   = (uint32_t)(ping_buffer);
& W/ @! y+ Z1 x! J% _- ]- p4 x, w+ y& g* U
                /* Write to the master DMA channel first. */
4 p3 T) a: a# o+ A) _                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
' s0 ^% ~, N; n    }       , ?: }3 K# h; @& G5 _! l) q

; N2 K$ z9 n( J        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
& O0 ^2 |3 _# c# m& u) z+ T       
6 o6 I0 z7 I$ g7 k6 F5 P% W2 ^$ H    if(result == EDMA3_DRV_SOK) * `5 b8 g) R& T. ?( K
    {$ T8 e) K% G, a7 a3 G5 E
            print2arm("edma3 driver init success.",0);
$ L* s$ D5 S1 Y6 V    } % c$ `4 x! S" B3 s9 W2 A
}1 ?, \1 X! K7 O: k3 U( m/ K

* F% a" J) H, C" \3 q5 q
9 v8 O3 y/ z: t6 C& gEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。- @: b2 J9 ^+ g( c$ y9 I! L2 J& Y( t5 Z
. e6 S7 q1 B3 K& K

. ]1 Q! T5 z1 {2 p, `3 _- l$ J
分享到:  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# \1 W- L9 i% U/ B8 e: O1 c3 J
每次DMA传输完成后都要再次使能传输
* ?6 T& I$ }- A; w/ v
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-17 09:31 , Processed in 0.037681 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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