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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
" d$ `: p8 }4 a, R' f6 t) H#define  PING_PONG_ACNT          1
* |, T6 s/ D4 t: T7 O& k/ a( ~, E& n#define  PING_PONG_BCNT          8*32*40
% L( G/ p8 v0 g/ i3 h//#define  PING_PONG_BCNT       1
# |, \" D+ j  P$ m. G5 X% X#define  PING_PONG_CCNT          1* }) K1 x  ]' j* l8 @5 _
#define  MCASP_BASEADDR          0x01D000004 S7 [2 I( c6 J9 r) v, R
#define  Mcasp_RXEVENTQUE        (0u)+ W2 H: b/ o2 K0 ]1 b- h' d
% f7 {. ]; l' D5 F
/* OPT Field specific defines */1 `% g5 q3 V) ~! P, [
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
: Z; v9 ?' X- `0 p6 |0 L#define OPT_TCC_MASK                        (0x0003F000u)$ B% s8 s. U6 A  {- j5 z
#define OPT_TCC_SHIFT                       (0x0000000Cu)
" E- d4 b5 o& }/ i  H. e% G: z2 g#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
  k2 ~4 {. g6 T$ R% M#define OPT_TCINTEN_SHIFT                   (0x00000014u)9 I) K4 q1 x  w1 V

$ {7 D: L1 t/ T8 U; [0 ~/ a+ tchar ping_buffer[PING_PONG_BCNT];" D( n; A. a  _6 z' T
char pong_buffer[PING_PONG_BCNT];
/ r: |) r1 N7 W0 k0 {% C
/ _. D3 b/ Q# s( l0 T8 l  l' Y) v% t, z- r1 h; j$ Z5 g

$ v: E7 _. G% H
0 R4 d( W* O0 k3 |static void ys_edma3_init(); j3 o# X" f( |. R
{
, p4 b. I/ l8 P2 h        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};: W  F+ G, M$ f
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
1 T$ k: s9 P0 r* M" \' T9 y  Q        EDMA3_DRV_Handle hEdma;' N5 |$ d4 b8 A% C: Y
    uint32_t chId   = 0;, E2 t3 Q7 s: r
    uint32_t tcc    = 0;$ {/ b- O' ]# T1 E8 F! D- E9 J% p* y% ?
1 u1 o/ F  c- B# r7 ~
    print2arm("edma3 driver init...",0);/ a& Y1 G* S1 w3 f' q3 d
$ r) y0 c+ }( J# v2 N( R
        hEdma = edma3init(0,&result);
0 i- r0 r2 ^& V9 ]9 _& T        if(hEdma)
9 t, P; h1 g: S1 u! m8 w5 \        {& {, z) K5 \# a/ }1 G, A
                print2arm("edma3init() Passed.",0);
$ E, L6 o7 h1 Q! N' s. @5 \# M        }
1 O2 Y- m/ A( N. B1 q- t        else. y4 i6 r, G0 q# S( d; r* L
        {0 T0 v6 q5 M  Z& |9 D$ R! w
                print2arm("edma3init() Failed.",0);& _# ?8 G1 j/ Q" d
        }
' d7 N' e: P. {! f. ]- q* Q        : A  v3 C. P5 h
        if (result == EDMA3_DRV_SOK)
* \3 H& `( h0 s2 [- T    {/ {0 O% E( F' p( `" @8 \
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
! `. M# V0 W$ @* J/ B! i                                                       (EDMA3_RM_EventQueue)0,2 D1 j4 p0 P' B% C1 h8 Y
                                                            &edma3_isr, NULL);
& T* u( \6 ?+ b5 G! e6 P    }
; l% u" V1 l& g% |' I9 G       
1 {/ j4 C/ f2 v" P( p3 d        if(result == EDMA3_DRV_SOK)* ?4 b" {* l, G2 t; D
        {
7 P$ |0 {) h. m# x; K  t                paramSet.srcBIdx    = 0;
* a2 M3 q( n& u$ H( `. b                paramSet.destBIdx   = 1;) I$ c' x. s8 O5 p' d. [7 C
                paramSet.srcCIdx    = 0;4 y4 T! }: w" r! ~/ c
                paramSet.destCIdx   = 0;
* m4 c" q; p5 {                paramSet.aCnt       = PING_PONG_ACNT;0 G4 z( j& ^  ?$ ~: M
                paramSet.bCnt       = PING_PONG_BCNT;4 r# K2 {4 P, O" G
                paramSet.cCnt       = PING_PONG_CCNT;7 g; k4 ^$ d* R5 A5 Z
                : m9 H0 R) K* I$ L  f5 q+ t
                /* For AB-synchronized transfers, BCNTRLD is not used. */+ K) n1 ~# Q$ y; ~- g
                paramSet.bCntReload = PING_PONG_BCNT;* f/ O( y/ C6 w+ w# ?/ [

7 i# ?" N9 ]* Z+ d9 r6 k6 Y                /* Src in constant mode Dest in INCR modes */
+ C8 B0 u3 {  g* ]$ K/ C. ~8 E                paramSet.opt &= 0xFFFFFFFDu;4 q; n" E. {- }3 m  V: w* h
                //paramSet.opt &= 0xFFFFFFFCu;
, H+ q5 i5 @0 @; q               
' i. n3 X8 }4 P+ F! A                /* Program the TCC */
0 X; ^+ t# _8 x9 s8 F                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);5 F8 @. @/ U" O* o0 e( Z( A/ ]

: {7 j7 Y8 f  A                /* Enable Intermediate & Final transfer completion interrupt */
0 w; b$ D9 a: q+ }% `                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);7 n% M# N3 _3 l5 `" T
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);0 l& y$ |  G* [! ^1 a9 d
! Y  s* Q5 R% U3 p1 @" T
                /* AB Sync Transfer Mode */  ?' O! ^8 ?, \' ?$ F
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
* i; T2 q$ t5 I. M! Y               
3 ]* n+ v% L# m1 O                /* Program the source and dest addresses for master DMA channel */
7 [8 n5 J5 f! x+ J& v                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
% d: X) E: _. t) f/ O                paramSet.destAddr   = (uint32_t)(ping_buffer);
" x9 z, L5 t/ o$ Z: b4 e; m3 @1 a
4 D' R" p1 P" K- P* A* q                /* Write to the master DMA channel first. */% l1 i$ N  }" m9 B
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);; a  z" k( i1 E# f
    }       : U: i& N$ A! h4 A; {( t* t

8 u& H/ u1 ?$ a5 t/ p' p) t( L        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
; k% U  T9 \3 L4 f        " H- |6 t, L; l% M! j) }2 e( o
    if(result == EDMA3_DRV_SOK) : e5 }8 u) U" i1 j
    {5 u' v: d# F2 y  }* c4 v
            print2arm("edma3 driver init success.",0);
+ H# L) i5 O9 m, l    }
. u3 ^. |% M/ {- A}# e( K8 }6 {7 F7 b6 ]' }% d
; I: R: K" p5 ~2 ^0 W$ ^+ I3 @8 W, {6 E
6 c8 p! T* C, {2 y
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。  L( M1 l% P. U+ t, D6 j- }) n
9 p& l7 n7 ~- E$ B! [8 I- p( }( g

1 v: e) R6 C  F
分享到:  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$ J) a; C7 x+ R3 o  t. n* N# Q
每次DMA传输完成后都要再次使能传输

4 _% J+ H) H# G- R7 _) X. P原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 04:15 , Processed in 0.037514 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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