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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:. s; r) Y1 i1 ^1 w* w: ?) @
#define  PING_PONG_ACNT          18 D( O% f, r. @2 I! Q3 ^3 W
#define  PING_PONG_BCNT          8*32*40
, g- ^# i9 G8 F5 `+ ~4 M: X//#define  PING_PONG_BCNT       1
% ?% r7 o/ L1 J, ^$ Z9 C; q$ i5 \#define  PING_PONG_CCNT          1% M1 U, C: q9 w1 G" t) X) l
#define  MCASP_BASEADDR          0x01D00000
8 k! S3 ]2 r6 R8 V8 @) R#define  Mcasp_RXEVENTQUE        (0u)
# M0 @1 V0 t. G2 A0 Y
. L  Z3 }( z! u- p& A0 d/* OPT Field specific defines */; K, Z8 m% ~& N2 _9 ?
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
, I. q& O4 Z/ L! k) N' \#define OPT_TCC_MASK                        (0x0003F000u)
+ S9 H: n; a1 M  i7 F) r#define OPT_TCC_SHIFT                       (0x0000000Cu)
/ m( ~; X) R7 z9 ]" i#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
- S- F6 `. N/ o+ Y#define OPT_TCINTEN_SHIFT                   (0x00000014u)
5 M: x! e+ C* A4 {" h& s+ A6 P  j6 \: U. y" }* X& J+ D
char ping_buffer[PING_PONG_BCNT];) `; |. ~" P' H  u4 ?. ~! }5 x8 z$ C
char pong_buffer[PING_PONG_BCNT];! w& y4 l$ Z4 B9 o% r: C5 S

7 F0 |9 R/ Q$ G& ~8 N# c8 d9 g, j4 C7 I0 e7 ]( m0 v* g

' o4 J3 g% x8 m' k7 p! h" X' w4 A7 J; i7 g, I6 c) d9 v
static void ys_edma3_init()0 N2 z4 T4 Q2 s6 P
{: C% G( x2 y& s+ ]* _* U) u) H
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
- ?1 f7 Y7 Q. Q1 l        EDMA3_DRV_Result result = EDMA3_DRV_SOK;( `' x0 }, i5 S; d2 T) l
        EDMA3_DRV_Handle hEdma;
2 K+ X" j" x; l& P0 x) _5 F    uint32_t chId   = 0;$ s$ X6 F% V1 O1 s4 u  r6 Q
    uint32_t tcc    = 0;7 t  D) M4 J& s; Q

1 g! @) Q& p, p" H6 K2 C! F) J    print2arm("edma3 driver init...",0);
- N& _' s; ]' }2 P, H4 l  |
* U  d" @" ~4 Y        hEdma = edma3init(0,&result);
0 g! Y# ]9 m6 h        if(hEdma)8 C- G2 _( b" Q3 w1 t& m* z% ?
        {3 t# N" k0 Z# X+ e3 ^* f- b" _
                print2arm("edma3init() Passed.",0);$ M" i4 p8 ?& |8 I& P  m
        }1 W- I* e( G+ Q/ G2 V9 i! [
        else
2 r* l8 r. n7 \$ u5 O        {
1 R$ u9 C5 S: @9 h0 r; S                print2arm("edma3init() Failed.",0);7 W# f% Q+ d3 E
        }. @: a5 U3 c' w" n( K  q3 K! ~
       
; N4 Y4 `/ S  e) b% [* |        if (result == EDMA3_DRV_SOK). ~; P  d0 e4 A: I  x  }/ v
    {
6 p$ B. y( t! d# K2 v                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,  I) n6 D0 N% [
                                                       (EDMA3_RM_EventQueue)0,/ W! \4 M6 t% W! h* o( E
                                                            &edma3_isr, NULL);7 p( Y6 G9 ^* @$ S9 q( J+ V) P/ G* B
    }. @  H1 }$ r, K) p- \! d/ \2 T
        3 r( p4 H2 r! H
        if(result == EDMA3_DRV_SOK)
3 n) n9 I: B% y7 g2 r5 c% H        {
) z+ B- g6 g$ A( r1 q9 L& Y                paramSet.srcBIdx    = 0;. M0 `9 _- k0 p( p2 c
                paramSet.destBIdx   = 1;
+ V: x& f" u. u0 e, ?* s" n                paramSet.srcCIdx    = 0;6 s% b8 C! P6 n9 c5 t# G
                paramSet.destCIdx   = 0;5 K, p7 a! R* `# \1 r+ M" ~4 u/ ?
                paramSet.aCnt       = PING_PONG_ACNT;
% W2 B' @9 r( x# S3 U                paramSet.bCnt       = PING_PONG_BCNT;
( V1 `' x# M$ `                paramSet.cCnt       = PING_PONG_CCNT;# O0 y1 u; m' t3 A3 s2 a
               
# t) a2 [  [' u7 E( O1 G9 b3 l                /* For AB-synchronized transfers, BCNTRLD is not used. */0 i, \  \( X/ o8 s
                paramSet.bCntReload = PING_PONG_BCNT;
9 v6 R% I- N# \9 J. }2 r, P, U' {
                /* Src in constant mode Dest in INCR modes */
7 z7 h4 `$ v$ l4 ]                paramSet.opt &= 0xFFFFFFFDu;
/ o# \0 k! ~" }6 C! W4 K# s0 E                //paramSet.opt &= 0xFFFFFFFCu;
5 u; G4 l, u" b1 ?/ ~- G3 l                5 e) o" a. q' T7 x3 C0 C3 D
                /* Program the TCC */
/ L* A/ W1 @. ^                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
+ `! S) }0 J7 K5 y' M
7 y" V% n7 }- B1 n                /* Enable Intermediate & Final transfer completion interrupt */5 P0 B* U8 s' I$ j9 v
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);: M3 V4 R- @8 p' t  N
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);( N4 v8 k( O/ k( @" z8 u$ p( q

% r. i" y' ^, G. O( _- w4 l                /* AB Sync Transfer Mode */
4 S) Q5 [& }$ {                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);1 s2 Q. d/ A& d7 _7 Z9 b5 @
                / s% X, O# G) ?+ F& k5 H% M
                /* Program the source and dest addresses for master DMA channel */  E3 p/ H5 x2 O9 X; _3 u- E
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);  r8 \% _  k) {& f9 K* Z, L
                paramSet.destAddr   = (uint32_t)(ping_buffer);
1 B0 N6 \7 O0 ]
+ x+ ^5 `3 z& R                /* Write to the master DMA channel first. */
4 m) L1 x8 ?* n, f% ?                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);/ P( r3 k: Y# N6 _) b
    }      
2 X3 ~+ r6 R/ U% [* n7 O9 k
! _+ t% Z( V7 C1 W6 R        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
4 C5 b3 w. I+ b: I( ~' C  \        7 D: p* G5 D) X/ G' Z  ]
    if(result == EDMA3_DRV_SOK)
, @/ K" L( h; m9 K) e    {
$ \' p* }- r; t- Y: B& T9 l            print2arm("edma3 driver init success.",0);
( L* a5 E. d& y+ `( t0 h5 J# ~3 J3 k% v    } # J% V. X/ t3 e# E; P  _
}% Q! W+ P) }  ^/ {0 ~3 S& J

/ N8 o# G1 x2 a
- w; k, ?4 Y9 R# @& iEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。. l3 n3 Y6 J& l3 W4 ?3 s: p

5 m; h; L  ]* i; S
' s. L6 A4 i7 Y* n5 P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47
3 x  ?/ P9 A0 g! q5 j9 L+ t- d每次DMA传输完成后都要再次使能传输

$ m% y; g# J2 n# J原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-24 10:47:00 | 只看该作者
每次DMA传输完成后都要再次使能传输
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-2 11:18 , Processed in 0.041025 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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