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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
- Q) H% g  }; }- n5 b#define  PING_PONG_ACNT          1
, E9 C+ |) u; _( o8 Q0 \( M9 j#define  PING_PONG_BCNT          8*32*40 ( `; k' M$ o& i
//#define  PING_PONG_BCNT       1 / y  S( Q1 j; S. L8 \
#define  PING_PONG_CCNT          1
% }# j0 o4 k$ m+ N6 r  G#define  MCASP_BASEADDR          0x01D00000
& k! J. @% M( }#define  Mcasp_RXEVENTQUE        (0u)( v- f0 d$ S* y4 M% j
: m/ H% X* y; E! l3 m
/* OPT Field specific defines */! ^# W  {& V, D. ~2 \
#define OPT_SYNCDIM_SHIFT                   (0x00000002u); [+ p5 [/ \2 `, P
#define OPT_TCC_MASK                        (0x0003F000u)4 J6 }3 G6 G$ f" [: N0 c% a) W# A
#define OPT_TCC_SHIFT                       (0x0000000Cu), t2 T* k9 ]1 W- t
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)6 d8 H6 U- o- @( E" O
#define OPT_TCINTEN_SHIFT                   (0x00000014u)/ R0 l1 N, t; x
4 z: R' T+ V, t  f* D4 M9 q
char ping_buffer[PING_PONG_BCNT];, K) _1 R# a: L6 J9 M3 P
char pong_buffer[PING_PONG_BCNT];
- e( C, l7 ~( u/ H6 Y- p8 O9 f2 q5 C. z* Z1 F
0 @' b7 b4 y  M' g
& M" F3 l8 X/ U( d  \4 j/ B

' B) I% ~: ~& e2 j( L$ ]static void ys_edma3_init()5 |  I2 C  H- F( k( l% B
{+ O1 r9 h' z& U
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
  @7 S1 o% N. E  \$ s% U0 \        EDMA3_DRV_Result result = EDMA3_DRV_SOK;  u3 `* v9 b- F
        EDMA3_DRV_Handle hEdma;9 D" w* M# [# r$ d
    uint32_t chId   = 0;# Z& i; C+ h. ~4 ~* R5 V
    uint32_t tcc    = 0;
1 X+ f& f% e, N* @+ t5 F# P
% l/ p* g, [. V    print2arm("edma3 driver init...",0);# B5 f$ `( W  p/ x$ O, G
; h1 |" x2 v, W: a! ^& Z7 y7 ^- R, W
        hEdma = edma3init(0,&result);
" h+ v8 a6 d* m# D1 G, v        if(hEdma)
0 m5 v8 G% F- I8 {, a" ^        {- [( ]% T3 K$ R1 l) O" y
                print2arm("edma3init() Passed.",0);- n5 |& r" d% Q2 o" H
        }! z% Z. K7 a7 c9 i. i4 |
        else* ~0 R$ G5 G& Q+ r
        {
+ g, v6 P4 N8 p7 N7 _! V* n                print2arm("edma3init() Failed.",0);# ^9 p% l! |! n) t1 P' J3 e1 x% P' N
        }( R& N( U$ n$ d7 x
        % Y+ g# F# _0 t% B3 V' Q$ N
        if (result == EDMA3_DRV_SOK). L4 F; j7 l- F7 B4 e8 M
    {
- y: }8 O' R0 l* h2 w% g, N8 L4 x# X                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
* C. I7 }: d! q                                                       (EDMA3_RM_EventQueue)0,
6 C+ S. q0 |( j6 z, Z' P/ B+ g                                                            &edma3_isr, NULL);- V1 @$ R/ U. z( C/ D+ Z/ K0 D4 L
    }& |, p& H2 n4 ]" g( n5 D, t- y5 k
       
; b8 C5 s. K$ O, Y        if(result == EDMA3_DRV_SOK)
+ t0 Z: E/ I3 _8 c6 O        {5 ?: y' }) N0 A( [: }+ @
                paramSet.srcBIdx    = 0;4 Z  u: r- I! |/ j; B
                paramSet.destBIdx   = 1;, b. ]& E7 W: f& J1 A9 \( K. p) ~
                paramSet.srcCIdx    = 0;
/ [2 m  j7 Q# T$ I5 I! o  _                paramSet.destCIdx   = 0;( \9 g- ~" C) }: f' ?
                paramSet.aCnt       = PING_PONG_ACNT;
$ f) M4 _' u" M% @( }: V                paramSet.bCnt       = PING_PONG_BCNT;: G% g1 N  A7 F$ n! z
                paramSet.cCnt       = PING_PONG_CCNT;# R/ `3 s9 x3 R% v" I8 y
               
* c" g6 ?0 b' E$ Q3 [                /* For AB-synchronized transfers, BCNTRLD is not used. *// h1 u5 C0 q6 K. p
                paramSet.bCntReload = PING_PONG_BCNT;; q/ U' m/ W# U. Z7 `5 J$ I

5 ~# u2 V: g/ G                /* Src in constant mode Dest in INCR modes */
3 a$ K, b5 z, v1 E                paramSet.opt &= 0xFFFFFFFDu;- i+ L  ?6 Y9 ~  w: ^3 ?
                //paramSet.opt &= 0xFFFFFFFCu;6 \) y9 v( V) k/ B* G, N
                5 O5 H& @' t% {# j6 i
                /* Program the TCC */
2 S9 p3 \8 m$ K! {2 b6 S' N. D                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);) {: R2 u) k5 {( C. }
/ z8 D$ p! j" A7 i$ K/ I% P/ \
                /* Enable Intermediate & Final transfer completion interrupt */
' s" @- b+ ]; ~# I" P1 [+ V                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);* ]8 F! i9 F$ ?* E1 y% @
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);; |" D# O  N1 L3 w+ W
: i, C( ?$ r" F) Y- i4 R
                /* AB Sync Transfer Mode */8 K4 N5 ], E+ m9 N$ D" ?
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
. @0 T9 j* ]: K                $ a4 z7 L2 I% c  ]" q8 f# J
                /* Program the source and dest addresses for master DMA channel */
' t: O3 L& v5 x1 O/ P4 ~% O$ n                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);/ p6 k3 \0 Z0 Q7 s4 n; S
                paramSet.destAddr   = (uint32_t)(ping_buffer);
: S/ Q0 i( X* |! }4 S, a; H1 e0 X, J
                /* Write to the master DMA channel first. */8 w0 y) Z4 \* D, Z, l2 a. ?+ w
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);' I4 I7 B6 |; ?" c
    }      
5 L* W# ]/ D( }: X5 R2 N- ^: }9 t2 E% }" E
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
5 }5 `5 l3 C8 d8 r- L       
: J' Z* @# T; b; [$ ^3 W    if(result == EDMA3_DRV_SOK)
8 b0 V, a+ `4 b* D9 n    {
" O/ k: g% l" W4 @4 I            print2arm("edma3 driver init success.",0);
) @+ @8 K) B) ^% V    } 1 `# \2 Z0 Y+ p0 \
}3 h7 ^! W4 S; C. d# A+ ^- g

/ F2 X$ D' a; h+ m) v( ^( E
# L  z. U4 S' p+ C- A: S5 qEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。( r# p  G; `5 y2 P( G  {# x, i
: c& V7 E! o4 l3 r& L0 H& k% D

1 m) L# r: ^4 V% n
分享到:  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! Q& {* S: A2 i* x. \
每次DMA传输完成后都要再次使能传输
5 _0 n4 j: `& u1 H
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-19 09:29 , Processed in 0.041857 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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