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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
. Q) B8 J% f* N  _9 d#define  PING_PONG_ACNT          1+ o2 _0 h9 \6 ?6 A
#define  PING_PONG_BCNT          8*32*40 , c% Q* g) N+ t9 |+ ?. w
//#define  PING_PONG_BCNT       1 - D, O( O& T$ W
#define  PING_PONG_CCNT          1
; B/ S8 A3 N. a' w8 s#define  MCASP_BASEADDR          0x01D00000
- q9 ~6 J) Q* u  W5 K% `#define  Mcasp_RXEVENTQUE        (0u)
* s, E( W! E' W1 m& r5 h7 i9 u4 G5 I% u1 o0 X# y3 c9 G+ p
/* OPT Field specific defines */% ~- s( y4 Q  ~- `0 j  P9 K: q6 L
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
& v0 ?- L. C* C! T5 o6 e#define OPT_TCC_MASK                        (0x0003F000u)
( N' [# X4 X6 e& G3 u) W#define OPT_TCC_SHIFT                       (0x0000000Cu)4 S: y6 Y8 z6 R% U- b5 N- H, r% y/ C# k
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)( ~. w! J# T! N8 q
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
: z2 t. `; E8 f6 b* D' U& S) S0 p9 Z. T1 e5 \5 o
char ping_buffer[PING_PONG_BCNT];
7 M. e0 \/ ?5 L; u; J  ?# dchar pong_buffer[PING_PONG_BCNT];
7 D* v0 I; w, `# m: L0 E0 W$ g
, W2 V) u9 B, \7 H% x; j) j/ v3 g3 ~/ z& t% q  b

* Q3 o: H, a  U( e/ t
5 b9 ]. n7 d  t, C9 c# P7 fstatic void ys_edma3_init()2 [+ [. s+ N9 U2 u; L: C& C5 Q5 e( }
{7 P8 h; e5 u: U9 _2 [9 _
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
/ v3 ~8 p! X4 r" x        EDMA3_DRV_Result result = EDMA3_DRV_SOK;1 Z, H0 Q: ?! j
        EDMA3_DRV_Handle hEdma;
* S. L2 _1 A8 D+ H5 O: ?3 G$ o    uint32_t chId   = 0;  B+ I! o2 t1 M& v, }2 l1 v
    uint32_t tcc    = 0;: ]0 Q( B2 d. ]) ~/ q
" H2 ^6 }- F3 x- u; K3 x: A7 j" q% Q1 a
    print2arm("edma3 driver init...",0);
* P0 h& d7 j, z$ a" k% n# [( S+ O4 I) E# o& W- l4 m3 X
        hEdma = edma3init(0,&result);
: l0 w( l0 @# e. i& ^/ c: e        if(hEdma)
" v0 Q# a, }/ W% }% r( F" M6 n: O$ g        {
5 O) r5 ^: V+ ]0 }0 r                print2arm("edma3init() Passed.",0);
& b' E! P+ M/ D2 k: {        }
: N' `/ I' k! I: b        else6 L6 s" p' @0 R; C# M6 k0 Z
        {
, ]; r9 h6 s$ f" m8 w; U( n# y                print2arm("edma3init() Failed.",0);
2 r6 m, i7 h0 }  E        }
1 F) j3 |) t6 p+ d8 F# Y       
' D# D) ?) J6 `4 G4 V8 c        if (result == EDMA3_DRV_SOK)
3 z; O! C* i* A  I    {
  d; b* u7 P: [' f2 E: w3 k! i                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
8 w) q" b& P0 I                                                       (EDMA3_RM_EventQueue)0,+ l$ }$ z8 u( l
                                                            &edma3_isr, NULL);- k! e2 L  F* @
    }  L- Z0 E; b: r% N" c
       
$ ^, W; J' g+ S% c( D" Z  M/ Z* {; N        if(result == EDMA3_DRV_SOK)# R# Q( R+ o0 X$ N
        {: i3 B7 y) Q6 R$ G: L7 F. e( n
                paramSet.srcBIdx    = 0;
! i. g1 V; w: c4 ]                paramSet.destBIdx   = 1;5 r5 ~* P1 y/ `! Y: o/ U2 Y
                paramSet.srcCIdx    = 0;! o# e2 M+ M* M  S, ^( m# G
                paramSet.destCIdx   = 0;7 E' P  F8 i; \5 }) J& y
                paramSet.aCnt       = PING_PONG_ACNT;4 p3 o! Q( e6 @  b1 `1 B  [
                paramSet.bCnt       = PING_PONG_BCNT;8 U  ?9 d# d8 A
                paramSet.cCnt       = PING_PONG_CCNT;  Y6 N) T; Z6 q) d0 w
               
( }  ?( S# C2 K8 {$ B                /* For AB-synchronized transfers, BCNTRLD is not used. */
. c+ f  e9 ~. ^" p# d                paramSet.bCntReload = PING_PONG_BCNT;
/ w& V7 v4 P) l1 ], z% i! j8 b( E$ Z$ Q6 y
                /* Src in constant mode Dest in INCR modes */3 Q, L" e1 E3 Q2 r+ Z4 j
                paramSet.opt &= 0xFFFFFFFDu;
( y0 K6 N3 _& g  T/ o0 y1 n                //paramSet.opt &= 0xFFFFFFFCu;
6 z$ Z5 m. A8 o# ~               
$ U& E# u6 G0 |  z5 U2 M                /* Program the TCC */
7 X9 s  E1 y9 }                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
* y" W- H" G7 j9 n" h1 r( [' }/ L
# v) x' ~/ R+ o' o                /* Enable Intermediate & Final transfer completion interrupt */  Y& u! @' R4 B
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);8 J' N. u7 X% `2 w; J
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
- b1 A% c/ B: o) l# p% M7 B) t! i' V* r
                /* AB Sync Transfer Mode */" }" [) u" y$ a% _. D0 i
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);; }/ j/ ]" f' H8 i) A5 ^" M$ K
                7 d6 n8 I2 p& U9 S5 a; I. K
                /* Program the source and dest addresses for master DMA channel */# z" B! i0 q  L1 r2 K
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
/ @0 _1 y6 P4 q" r, [                paramSet.destAddr   = (uint32_t)(ping_buffer);/ D4 s# q/ c) d- n  d: M$ U3 A% W! U
3 V# P- V) g8 {3 W
                /* Write to the master DMA channel first. */
& W- G, H( K# |/ y/ Q# p9 n5 k0 W                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
8 _4 [: W& E+ d- V    }      
; x$ R6 ^8 g% Q$ `1 j; _6 X3 R: d# o- I& n1 W( p
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
0 c/ }; a4 I+ l9 k7 p* V        8 u# `; M0 C- L8 m, U8 O3 N& ~
    if(result == EDMA3_DRV_SOK)
% l* f$ O" D7 J    {
  m7 k5 y3 A9 {. P6 B, v% |, ?* u            print2arm("edma3 driver init success.",0);
: G6 j& d0 p3 J' v6 Q4 N9 p' U    } $ N1 ^2 s0 Y: h
}2 F5 Q2 d, {6 |+ c% T/ o
2 Q. ]+ b1 W1 B$ a) G0 ^9 k

1 K  a( [% K. ^& h6 k3 t7 q# ]EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。% G) N% A& T  u: W* i6 A; ]

8 T+ Q+ \6 X4 E# Q5 A: e1 n8 h( j' }2 g; H" M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47
8 }) R3 M* ?: F% N$ i0 m每次DMA传输完成后都要再次使能传输
( a5 A! n7 s$ U3 a  r
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-18 14:13 , Processed in 0.042140 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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