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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
( d. O( ?2 Z/ @* Y) O' G) x#define  PING_PONG_ACNT          1
% p1 ]- S: s: C- q$ e$ P#define  PING_PONG_BCNT          8*32*40
$ `  v7 S- Q- Y1 D+ `3 x# ~//#define  PING_PONG_BCNT       1
' Y2 @; ?# z4 a3 g4 P( A, O: s4 j1 F#define  PING_PONG_CCNT          14 q( n0 k; v- ^# V+ p
#define  MCASP_BASEADDR          0x01D000006 N6 a) [9 O4 C3 o
#define  Mcasp_RXEVENTQUE        (0u)4 @6 d% O( _3 K# j
  v6 e5 [+ i) m1 ^1 ~
/* OPT Field specific defines */
2 T$ ?4 L6 y% W/ _#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
4 t, `0 j4 Z, E) |+ h#define OPT_TCC_MASK                        (0x0003F000u)
/ B4 ~; F! _* _. u2 U- Q#define OPT_TCC_SHIFT                       (0x0000000Cu)% s1 C8 e# ~; j3 X  q7 @. [4 g. w
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
# p) j; q2 k* D) L, N6 k#define OPT_TCINTEN_SHIFT                   (0x00000014u). r3 ?* P; W# g
) o# @7 A6 O3 _; v  Q# X
char ping_buffer[PING_PONG_BCNT];
0 p, _1 G' b2 M( i2 ^3 [% `char pong_buffer[PING_PONG_BCNT];7 a! }5 K0 t. _, y5 W- M; v% U0 v

: k9 t6 @7 Z+ j! a$ `0 \* I* R9 i6 L5 c
  M: B( R( m% H8 k+ B" r2 [

4 q9 M/ J) R/ a6 E  i( Cstatic void ys_edma3_init()* L. A) y8 m7 r/ h
{2 i" U. x7 l' C  Y
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
6 f+ o! `4 d: M        EDMA3_DRV_Result result = EDMA3_DRV_SOK;, A3 U. U# o2 y8 Q+ ~- p
        EDMA3_DRV_Handle hEdma;
! k2 a; H/ |: s0 D6 P    uint32_t chId   = 0;
% S; F- J6 W3 q& J2 F- }7 T# b* Y" Q) x    uint32_t tcc    = 0;
+ ?9 q7 w" d" `' N9 J5 q1 E$ [; Y  U4 r# H9 i
    print2arm("edma3 driver init...",0);7 [% ^" I! H+ I

8 a2 b4 a6 q* k        hEdma = edma3init(0,&result);2 h* ^0 l  j: I
        if(hEdma)
+ {3 M" f# o7 _        {
# V: P$ t( u0 \& L4 s                print2arm("edma3init() Passed.",0);5 M* T. S; Q/ c3 K. Q2 u
        }$ t. P" k$ r2 e( c% v8 P
        else' _1 f" q4 ~7 v/ d
        {
" Z. R6 g# N3 Y* ?; Y( r2 h                print2arm("edma3init() Failed.",0);
' }6 f, X1 F- V  P3 w7 {        }
8 N& K: b( b/ L2 j7 p: b       
9 S6 E6 Y' I) C# P) t3 L        if (result == EDMA3_DRV_SOK)$ ~+ z& @+ ^3 |+ u" T0 U2 Z
    {
4 X4 H2 U- v* q# w1 t                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,+ G* P: b9 _1 E5 c7 e. ~1 g
                                                       (EDMA3_RM_EventQueue)0,
! B+ ]6 D( ^6 h( x% d- b3 M                                                            &edma3_isr, NULL);. t1 `$ C1 t- ]
    }
4 ]# O! Z& h8 G7 F* T7 B! x3 U        6 x$ _' R& T1 r# q
        if(result == EDMA3_DRV_SOK)
& w7 S6 i# K- \8 A) \; M        {
. A  t: c5 L% }" {" J5 \% O* u( R                paramSet.srcBIdx    = 0;
6 G. P, ^; a8 ]0 r4 M8 ~                paramSet.destBIdx   = 1;
) K! K: e+ _& b1 I- _' T6 v                paramSet.srcCIdx    = 0;, v7 k1 H5 ?" V, R& U
                paramSet.destCIdx   = 0;
$ I* H1 B( I+ i, @* {4 P                paramSet.aCnt       = PING_PONG_ACNT;
- ]* l& s) W& D# _* I                paramSet.bCnt       = PING_PONG_BCNT;
/ D/ y1 \5 w+ d" o7 l1 O                paramSet.cCnt       = PING_PONG_CCNT;2 W/ f; n, M( u- Z. b( B2 Z
               
! [# O/ R; v3 a                /* For AB-synchronized transfers, BCNTRLD is not used. */3 E/ ]! V# P. j! o2 M  K
                paramSet.bCntReload = PING_PONG_BCNT;1 d" E( j+ i2 V/ Y. W
7 _0 M. o2 q; X8 x$ q: V% A
                /* Src in constant mode Dest in INCR modes */
4 n/ M- N8 l" X. X/ m8 a% u                paramSet.opt &= 0xFFFFFFFDu;  m/ S/ E( p# E. ]1 {
                //paramSet.opt &= 0xFFFFFFFCu;
# g6 G3 h0 _* s/ s& j0 h( N                . @: y, ?; U1 f. y: g
                /* Program the TCC */$ M9 B$ W2 k' [: f
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
4 o7 A) y0 L( S4 R8 P6 V2 k5 W# T0 o0 h6 b8 J$ G, ^  |. l
                /* Enable Intermediate & Final transfer completion interrupt */( y+ P8 e, Q; ^) \' `6 j
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
$ B8 P0 [) W6 U6 z9 d) j; l" {                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);$ d- n% z; C& \; _! h

' f; U% n$ Q3 @; G                /* AB Sync Transfer Mode */
/ t, F7 m: x+ q4 ]" f                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
, B( M( ^; P, t4 z' m  z3 W               
0 d# S! Z3 p; I2 e                /* Program the source and dest addresses for master DMA channel */( y" P# S0 r6 A% E& Q
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);  i  Y/ L/ ?8 p  q' z: \. l  X
                paramSet.destAddr   = (uint32_t)(ping_buffer);: S4 f- w' X! r4 v7 q3 V6 J

2 c7 f( Z1 G$ _. Q$ g5 C8 p                /* Write to the master DMA channel first. */
  E6 _. F3 G) |( u; N3 `4 ~( c                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
! u1 t2 n6 t; a6 A0 N/ x    }       ) Y# z2 ^& J# `. B0 S) ~2 p6 h" g

7 m8 b  q8 N7 j& R& f0 D" H+ X        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);( v4 z; G2 P1 O/ u0 n
       
& m6 o9 u" d, [. z/ _9 ?    if(result == EDMA3_DRV_SOK)
* r  K2 n- d5 h    {6 P/ ]; n. b* I" K% k7 W5 B4 M
            print2arm("edma3 driver init success.",0);
! o4 ?( A7 `! p/ D! \9 F    }
6 D. T: `1 x0 f4 o7 y: _}7 j+ Y0 J0 [1 q

& o0 S  J4 S; ~5 T) Q2 x2 m  \: b
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
0 `$ _$ e' K/ J' K; [0 z  u- Y) e2 E" b0 o7 ^; Y5 z
, K; d& _- O8 u- [, T
分享到:  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- Q1 O6 g/ \0 b: o- |' V
每次DMA传输完成后都要再次使能传输

/ Z: w- ^1 q! V2 b) x6 y5 j原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-2 20:05 , Processed in 0.041076 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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