edma3中断只能进去一次 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
) g- ^3 C- g2 c4 M6 N; w#define  PING_PONG_ACNT          1
  n" ?" b) x; W#define  PING_PONG_BCNT          8*32*40   T% Y3 p1 M  |, _: ?
//#define  PING_PONG_BCNT       1 . \/ b4 j! \+ f7 F! ^8 E! B9 g+ z
#define  PING_PONG_CCNT          1# \( `5 m/ j/ U" a
#define  MCASP_BASEADDR          0x01D00000/ r. P! H! v- }: P
#define  Mcasp_RXEVENTQUE        (0u)
4 v- u  M" ], q# |& k9 c7 {7 r. g7 T. B
/* OPT Field specific defines */
' ~* y5 C2 D% u  \8 w. j) b# h#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
, w' g8 ^1 h# @; t% X' O- o#define OPT_TCC_MASK                        (0x0003F000u)0 d7 \* `" w6 w. l& g: W
#define OPT_TCC_SHIFT                       (0x0000000Cu)4 {9 n/ N- m1 t/ t; ~( r5 ^
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)  m  n' A% a" ^9 p4 v
#define OPT_TCINTEN_SHIFT                   (0x00000014u)- F9 z& J) }* i: h

5 j4 Z% F  O9 j4 Uchar ping_buffer[PING_PONG_BCNT];
3 @  x0 w6 y* l- K1 T) \. C. b1 Vchar pong_buffer[PING_PONG_BCNT];
, ?: R+ [: z. d  o8 w
, ~- G- i% n% T% b: i6 C. L1 p# G
" v# A, @  e- A3 D+ _% n/ x
: c8 C5 s/ y" l( z. j7 d$ P" |) s4 |
static void ys_edma3_init()
6 v1 ^- x, o: ~9 N+ D# m{
- ?' b8 t2 P0 i        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
: i7 ~3 }/ F' G/ p1 h, m% J, E        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
* K6 `3 s/ a: S/ v        EDMA3_DRV_Handle hEdma;& G6 ?' W8 g# I5 c2 S
    uint32_t chId   = 0;
& o& ^* R( J4 K# T, P0 V    uint32_t tcc    = 0;7 G! b% O: T) D- C8 o5 B
  ~6 I1 Y* z5 \  d9 X
    print2arm("edma3 driver init...",0);
, R: ?8 E1 [# Q( p
! g1 B% n- _. I' o4 L* k4 @        hEdma = edma3init(0,&result);3 e4 f0 O; Z$ X5 N% R+ b
        if(hEdma)% W9 j! K7 Z; c+ @
        {( w* |# K  v6 W4 A$ j
                print2arm("edma3init() Passed.",0);
  H) r3 G3 m. A! n9 w        }4 _0 h7 E" a! l8 `5 ?
        else
7 }3 j1 T# o* Q& I  J4 y        {
5 U1 i, U+ u( u) R7 J8 t% e                print2arm("edma3init() Failed.",0);+ }9 U6 Y: f9 b
        }5 b' g' D  Z/ J6 k! s# s6 P2 j. X
        ( f9 P+ D/ R( a* _) I6 ~
        if (result == EDMA3_DRV_SOK)8 c; ]) L, f1 I+ G# G% b7 T
    {  Y$ _& N+ N' n6 T4 y( r% k1 |7 [
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
, A, ?$ Z4 t' I" c2 ]: B) s4 A$ Y* o& N                                                       (EDMA3_RM_EventQueue)0,# R+ L  R, a8 F' h; [3 S* t
                                                            &edma3_isr, NULL);/ z1 s" m- l. u2 s5 `. e- M3 Z
    }$ ?) \( |0 D" B
       
4 }7 v: j1 I! f& e7 T        if(result == EDMA3_DRV_SOK)
, R+ k9 U* s% ^0 H' C( Z        {( @4 q( j- C2 s) ]. r
                paramSet.srcBIdx    = 0;
# e0 a- J0 p- {* j4 o$ v                paramSet.destBIdx   = 1;
9 I( ]2 O4 |6 I5 ?                paramSet.srcCIdx    = 0;- V* W8 {' f0 a, n. H5 [
                paramSet.destCIdx   = 0;5 f8 U. N% q+ K+ j% ^( V/ E% [
                paramSet.aCnt       = PING_PONG_ACNT;, u0 J0 b# ]; d( c6 o
                paramSet.bCnt       = PING_PONG_BCNT;
( [; b; r, _) t3 w) F                paramSet.cCnt       = PING_PONG_CCNT;
( Z. q0 v6 @0 f; g/ O2 c                1 r9 O+ O  K& ?) O' Y
                /* For AB-synchronized transfers, BCNTRLD is not used. */
$ c% \& F+ f8 R; u9 A3 e9 y2 d7 e                paramSet.bCntReload = PING_PONG_BCNT;7 a' s8 ~  n& t  [: Z* S
/ V- @1 @2 d/ o- o" k5 C3 X
                /* Src in constant mode Dest in INCR modes */- V1 t& ~, C" E6 A( D$ R
                paramSet.opt &= 0xFFFFFFFDu;% O) N# Z9 `6 N9 x! S3 W
                //paramSet.opt &= 0xFFFFFFFCu;
( f1 |! S3 S) |- z  M  Q2 C                6 |( y7 V8 l9 i* M
                /* Program the TCC */! n4 ?  Z; d' b7 x' r% \4 ]  Y
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);! I- }# `6 ?+ L9 I

: }2 L4 [- w/ s/ j8 y                /* Enable Intermediate & Final transfer completion interrupt */0 u2 F0 V5 n& M4 t+ B
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);6 r  `  |' k0 n2 g4 k( s2 N
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);- S. ?8 F$ o+ c4 q6 E2 Y

* x# R% u7 N* K                /* AB Sync Transfer Mode */
* i2 e2 D  v  E5 }  m4 Y: N2 _' U                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);" W* J5 \8 P/ h/ I) w1 W# q
                . Z  L  J1 H* F" c- c
                /* Program the source and dest addresses for master DMA channel */
# m( z3 m0 ~# ^( K& O                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);  ]- j! A' E- `0 o8 I  E
                paramSet.destAddr   = (uint32_t)(ping_buffer);
0 Y5 @, r& `. D* D" F; z. [3 s1 \0 p5 u. J. @
                /* Write to the master DMA channel first. */8 j, C5 |4 N+ G% [1 }
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
% J) y5 d( ^2 `6 Y    }       * u& P- k5 b  R! F* m3 |; K( x$ |6 z

) ?4 f4 Y( F  L" L( D' B        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
5 N4 J( ~7 Q- G% P; i       
, `: j2 @  k" f# U    if(result == EDMA3_DRV_SOK) 4 b  x4 ^* `, M: c
    {2 u6 k! i4 h1 i: S0 o0 Y
            print2arm("edma3 driver init success.",0);* T  m" _  p3 P3 M
    }
$ @, o7 V" w8 U  l: ?}, Q& r0 q1 z) A& f& p
2 \9 B% {+ a+ D' a
1 R! c' q2 L0 d; s' ?1 a
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
5 x6 Q' c4 L4 S/ o1 a
: U0 B/ c( c" L  K% B
) _% f3 g% _6 {- _% w# @" m
分享到:  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
( G# N  Y1 `6 W& o! w; a每次DMA传输完成后都要再次使能传输
9 B$ A- E1 b, ]
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-26 17:38 , Processed in 0.041141 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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