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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
" ^! q1 u6 i7 r; ^# n; a' k#define  PING_PONG_ACNT          1
$ f* w% \5 t. v3 D. k9 Q#define  PING_PONG_BCNT          8*32*40 3 O. u0 X6 X' @+ V& c' N
//#define  PING_PONG_BCNT       1
' K! }9 ]0 V* F% B$ ~2 A#define  PING_PONG_CCNT          1& @: {) ]- ?% b% E1 V. \+ g2 K
#define  MCASP_BASEADDR          0x01D00000
, _) e" n5 G/ u" L( n$ Y3 L6 y* T#define  Mcasp_RXEVENTQUE        (0u)
; h' y0 O) q2 P0 `1 c/ v3 x6 g
5 h3 A) [# |. n8 _6 Y4 l/* OPT Field specific defines */
+ A0 U( z, Q4 J7 W- c$ [#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
* S% l" u& m, b0 N) B#define OPT_TCC_MASK                        (0x0003F000u)
' U2 I" k8 N) g. N- k! Z& l8 D#define OPT_TCC_SHIFT                       (0x0000000Cu)3 g" R0 g$ T) i# B  Q/ }
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
! f: o* Z) ?: h! o0 t1 l#define OPT_TCINTEN_SHIFT                   (0x00000014u)
( h3 t- j, Y; e5 d, ^3 C! |+ k" K. z2 ~% J7 @. s4 G+ {5 U+ U9 ~$ C+ J
char ping_buffer[PING_PONG_BCNT];. r9 t& k+ o5 D4 d7 Z* }
char pong_buffer[PING_PONG_BCNT];' p# j$ O8 b4 x( j6 w$ H- r
; ^' C$ r' Z1 }8 H2 H/ C" @! x

: n; p2 W. I- C% ~2 z# i/ ^+ E$ g& K# s# h" C; t" s* _
) c) W* P; U8 R% n
static void ys_edma3_init()
* \- f5 r8 ~, y2 H0 r7 _{
7 s5 F+ l0 Q( n( B& R6 @0 n% d/ J        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};, F8 l- r2 ^8 j1 T
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
3 J: _; i9 q* _/ X- L5 |        EDMA3_DRV_Handle hEdma;% u! p- C- w/ R! c
    uint32_t chId   = 0;
6 |5 s. F) p: w1 e# f    uint32_t tcc    = 0;2 X7 c7 x, g( p4 s" @

; ]+ r  p0 h% C2 l7 n    print2arm("edma3 driver init...",0);
, ~/ y. d+ g/ }4 _) \; `0 W1 u' m1 E' P/ L! Y  r# J% @' R
        hEdma = edma3init(0,&result);
0 V! F1 H% w" f* M        if(hEdma)" V2 d" ?  o7 S( o0 M) V7 K2 d
        {
4 t6 q7 d: y  y! X  `( _. x+ X                print2arm("edma3init() Passed.",0);
; N; Q2 j: w# M! V' a        }  B" e8 n6 S' C2 W+ C  g
        else6 i$ c2 ~! N6 h/ z1 _
        {' ~1 v/ z: U+ e7 M8 S* F
                print2arm("edma3init() Failed.",0);
, \9 ?, M1 {$ J$ }        }
. j4 @6 o1 z1 g7 u. A% @$ U& u- [       
- r. z( a5 }, `7 ]' _        if (result == EDMA3_DRV_SOK)
0 h- s2 I9 w) {) a# N6 O- S9 _( n    {
0 P: v, p$ ^9 G4 z: c  O( d+ ^) L                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,* {+ L4 [5 ~1 c, a9 u+ u0 n
                                                       (EDMA3_RM_EventQueue)0,
* R- Z4 |$ O# L                                                            &edma3_isr, NULL);- S, X, h% S1 i) y! i9 \; V
    }
- m3 W: u8 W) ^, Q       
1 ]7 q: b& J' R: n        if(result == EDMA3_DRV_SOK)* @6 P. u8 n( y. O1 X! b; D4 X  i
        {
* V5 y. E. W, C+ i0 y) p- b                paramSet.srcBIdx    = 0;( M1 V& Y1 f1 k$ d. [; L1 k1 ~
                paramSet.destBIdx   = 1;
) d1 ]0 s# i  {& K7 q; |  ?                paramSet.srcCIdx    = 0;: o& Q4 [* t& Q  i2 v; r! U- J" T
                paramSet.destCIdx   = 0;
. w4 E5 u) o6 d5 {                paramSet.aCnt       = PING_PONG_ACNT;
3 r% ^0 q1 x) J2 E* @# g                paramSet.bCnt       = PING_PONG_BCNT;. L4 a/ A" j. f# [
                paramSet.cCnt       = PING_PONG_CCNT;" r- ~1 L# x; R7 [0 D) ]
                % {2 L( O% n- }
                /* For AB-synchronized transfers, BCNTRLD is not used. */  D* [# z* i# [0 C& @) l; p
                paramSet.bCntReload = PING_PONG_BCNT;; [% I! |" w# G. {3 E
2 U+ M. f% p9 \( B
                /* Src in constant mode Dest in INCR modes */% ~$ ~, O& |; n
                paramSet.opt &= 0xFFFFFFFDu;
, A4 b* v: Q3 ^& ^  V/ T* |7 f9 r                //paramSet.opt &= 0xFFFFFFFCu;
8 d" D0 b+ @- b. j               
6 W6 S: _1 \7 H5 ~                /* Program the TCC */
) B% D% j: n! O, @                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
0 p4 M. e9 x( e: g, p/ L% H, \$ A4 F0 |2 G9 R* L! L% J
                /* Enable Intermediate & Final transfer completion interrupt */) S4 ~- C) T& w' N( g8 ^9 }, J
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
& M  p- L5 ~9 I9 o& `( w# w4 j                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);8 h: o# W* i2 E
8 z. K* I8 K$ X6 R2 V6 T
                /* AB Sync Transfer Mode */
8 R( Z" A1 O% R  W1 K9 ^                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);3 J7 R6 E# M6 E) ^( v0 ^
               
+ D3 H# Y! U& B; d6 D) p2 a5 F* m4 M                /* Program the source and dest addresses for master DMA channel */
) F) j  L" R( J  J; J                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
9 V5 ~- W* {7 ~5 c: H: Y" b                paramSet.destAddr   = (uint32_t)(ping_buffer);
( v7 H0 f: H9 D! b, t+ I0 W3 R8 m, `2 r. U
                /* Write to the master DMA channel first. */
7 m3 _% O1 F/ G/ N% [% [                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
4 W" H/ A* i) g% Y1 H0 z4 b    }       & i( L$ K. `" @
' |6 F, S  s0 |
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);- d: b  r& U& J& G, o
       
; F  }; c' P+ R/ F% T, A    if(result == EDMA3_DRV_SOK)
1 N0 P* y7 d8 h1 j8 ?, q    {, H, n) y. R2 R! b9 K: h7 r
            print2arm("edma3 driver init success.",0);
4 t6 J  V3 U$ d    } * p/ O( A& H5 M9 m$ }
}9 i1 \$ F" r: R1 ~- @

! d; j+ i: c* l; [
/ I" c9 Z7 l% @6 H$ X- z' `; sEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。4 d, |6 @" ~! c* F! ^8 b7 V- x

( A3 k/ C7 d0 S5 e; V+ a7 M+ r6 V. ^$ T% j% P0 ^- 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' D! I/ u! e' j
每次DMA传输完成后都要再次使能传输

/ K7 M) @6 Z$ n1 E) i原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-19 11:01 , Processed in 0.042936 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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