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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
0 A' `+ I' u3 q3 e0 L0 I# L#define  PING_PONG_ACNT          15 x4 u/ ?/ Q: ?+ n
#define  PING_PONG_BCNT          8*32*40 0 X) p7 y2 \- H/ T2 d; H$ x0 ^
//#define  PING_PONG_BCNT       1 6 T" P! t' W) o" \+ V9 f+ V/ Q, }9 [, |9 j
#define  PING_PONG_CCNT          17 G8 a, Z) m6 Y+ K
#define  MCASP_BASEADDR          0x01D00000( f9 {) _1 J; G8 q0 x+ h9 a
#define  Mcasp_RXEVENTQUE        (0u)9 Y/ G3 e4 e# y, k- `1 g' c0 W
3 \7 b4 T* P0 }7 B
/* OPT Field specific defines */& r, _( V1 ?3 N. Q! w2 {
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
6 \, F) N5 A. |" L9 v2 e1 o/ z#define OPT_TCC_MASK                        (0x0003F000u)0 ~6 B  V- O2 P0 L/ \, _
#define OPT_TCC_SHIFT                       (0x0000000Cu)
: U; g/ w: ]9 G4 i$ r4 b#define OPT_ITCINTEN_SHIFT                  (0x00000015u)" _& V- _0 U5 K2 A* k% t
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
7 W3 U9 G1 B& ^% w4 s+ l$ k* F2 H! v9 V6 [- F2 J2 |6 C
char ping_buffer[PING_PONG_BCNT];% v" w6 r$ f7 ^: l7 v
char pong_buffer[PING_PONG_BCNT];
+ ?0 R$ R6 J- ?1 J9 S
0 @$ u( h( s3 j' w
1 i! `; {% E; U: Z* o
- G" M: B, B1 `; j* a9 K( ]# t, q
! l1 a( q" v  G0 {. ystatic void ys_edma3_init()4 y3 N5 u* W: K( B( u/ ?& d
{
8 P: E: r" S2 n( U1 |        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};/ `/ _0 N4 T. N0 |. V$ b
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
; ~# J# G2 L" ?& L8 |0 E- }3 g/ w8 w        EDMA3_DRV_Handle hEdma;- y( R6 S/ k! R" ^7 f2 v" m
    uint32_t chId   = 0;
5 R0 x- v' q6 n; F4 T6 o    uint32_t tcc    = 0;
- ?" b% I# W3 p; @5 o0 p6 t" v
! T6 r$ R$ F7 I* a    print2arm("edma3 driver init...",0);
+ H2 U& @; b" Z5 s- c+ W; B1 g
& e7 m$ u4 l+ y# |! d        hEdma = edma3init(0,&result);% `1 P8 ~! v. I" A
        if(hEdma)$ j9 `' b1 q$ s# G' x
        {
: |( l7 U, V2 k& @4 q+ c/ V                print2arm("edma3init() Passed.",0);; P2 w- i$ _$ d. `" R) b4 t7 F
        }
; z% Z; A9 m, p        else
3 B- C' ]2 L) B1 T        {0 m& R2 M3 q9 \/ t& O* _( ]
                print2arm("edma3init() Failed.",0);
& _/ o1 H2 a! t) v/ c! K  q1 [        }
; p$ `+ o$ j1 u        & o1 t: Y. W. w" B
        if (result == EDMA3_DRV_SOK)- i, d' S; i: I6 z( L) o( ?
    {
4 H; A0 N% i* J% A                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,1 Y9 S  a6 k. w
                                                       (EDMA3_RM_EventQueue)0,
. j0 u5 }# ?9 W2 X* i1 }                                                            &edma3_isr, NULL);
) s$ P( p; E3 d    }
1 E) N% B! S& L6 k  K- K/ ~, t       
1 E! a) q0 q" n* v0 u  }! i5 }3 ^" h        if(result == EDMA3_DRV_SOK). a0 S8 O+ j9 ~9 g0 \& A
        {
# }" o. j7 z- D$ r6 R# Z+ f2 Y                paramSet.srcBIdx    = 0;+ M2 X! x  m: B, b; `  U
                paramSet.destBIdx   = 1;4 A# Z9 a3 J; N/ H
                paramSet.srcCIdx    = 0;2 Z' @4 _+ P; L  E) W
                paramSet.destCIdx   = 0;
4 E0 K0 V: P$ D9 Y& l                paramSet.aCnt       = PING_PONG_ACNT;" b. G$ y$ J# Z+ r- m  O
                paramSet.bCnt       = PING_PONG_BCNT;
: L0 I' i9 M, r' L8 K                paramSet.cCnt       = PING_PONG_CCNT;- R/ t5 C/ G! d! }
               
# z" Z( U! v# e- e- G* i! A3 h6 o                /* For AB-synchronized transfers, BCNTRLD is not used. */7 U9 h9 g" k4 _% p* v2 N
                paramSet.bCntReload = PING_PONG_BCNT;
5 o7 Y( n3 i8 f: ~) a3 o* [( b
( `" o( a% E! h3 G; ?6 Z                /* Src in constant mode Dest in INCR modes */
4 D+ O/ J1 F0 f3 L                paramSet.opt &= 0xFFFFFFFDu;( q/ u% K9 `* h/ p* ~1 M# X$ I' X) W
                //paramSet.opt &= 0xFFFFFFFCu;
6 {! K+ R+ \$ z7 y) U# T  s               
6 I1 o( x" R1 e: u& V% M                /* Program the TCC */
+ B4 C4 Q3 O1 ~2 Z! N                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);: `* o/ p+ C$ o! }

! ]  |8 w$ T$ Y! V1 O+ z                /* Enable Intermediate & Final transfer completion interrupt */
2 o0 q3 w6 ?* O" w, ~                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);# k1 t) v( q, H# l3 W
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);8 n4 `; y  |( ]* S5 N" `

( r% \) w- j- B! z: C7 L                /* AB Sync Transfer Mode */6 M3 g- }6 E5 I2 h! g3 X2 J
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
6 A' Z8 s2 j2 }- K               
# O8 p4 j/ q: j0 d: ~                /* Program the source and dest addresses for master DMA channel */
8 M+ c' I7 i- r( D3 u0 V% G3 {+ U                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
* C+ l- q4 a+ _7 h$ e' o) e                paramSet.destAddr   = (uint32_t)(ping_buffer);
9 ]% {" Q; ]5 _- d$ u! r- S/ D. @" Y: u! T! i: ~- z
                /* Write to the master DMA channel first. */" Z3 m6 F, J* u) h
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);- o6 I3 |$ g# G7 O$ n/ A  l2 r
    }       : W5 W' h( o/ P, Q+ B

5 T& w7 x& Q; _. Y        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
. q' Z- @- K& X6 p0 I) l        ' r2 K" `0 z5 m8 ^! b
    if(result == EDMA3_DRV_SOK)
$ t2 O, Y  \% M: j; V) A2 V    {' d% k& z9 ~. ]% b# Y& s! f
            print2arm("edma3 driver init success.",0);
8 r$ D- O6 f; l0 K( X: V# b    } % n' ~7 V* N7 a! }% |" r4 P
}& _5 Q4 d. S" q
- q# O7 S, R0 X0 h' H& s3 c$ }
, x( f3 J5 B  Z( C* E( a" v% T
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。4 ~5 \% j( G9 D9 L  t1 w1 x+ V
3 z0 ?, y! V9 o- B2 S/ _

5 N3 `6 |( [$ z: ?
分享到:  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
5 H& _* B* b3 t每次DMA传输完成后都要再次使能传输
7 }+ n- X, U9 ~. V& c
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 15:55 , Processed in 0.037560 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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