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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:: Q$ F: A/ i0 _* j
#define  PING_PONG_ACNT          1$ U. X! W1 `' [- v5 B
#define  PING_PONG_BCNT          8*32*40
) z( D+ L6 Y9 e. e//#define  PING_PONG_BCNT       1 4 y0 H: L' h) x* ?7 x6 B
#define  PING_PONG_CCNT          1
3 ]- ?, \7 r% q9 C#define  MCASP_BASEADDR          0x01D00000
& b2 L% y% t$ u0 x. |, X#define  Mcasp_RXEVENTQUE        (0u), F1 y! [6 @3 Q8 X1 @- q# D1 Q1 o: X

2 M0 j, X0 b' m% v/* OPT Field specific defines */
# ?4 O1 o% |# [$ W+ a( f#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
: q- K% `  z+ K4 s#define OPT_TCC_MASK                        (0x0003F000u)/ V3 ^' Z" y6 G7 r- b
#define OPT_TCC_SHIFT                       (0x0000000Cu); a) e; B* s! r6 `% c; i) S
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
* ?3 g) E' U) h#define OPT_TCINTEN_SHIFT                   (0x00000014u)+ k6 f  I& @  ^8 g# S( |

  R8 O% h! ~) R" gchar ping_buffer[PING_PONG_BCNT];
. b$ w% U1 v/ B7 ]9 Lchar pong_buffer[PING_PONG_BCNT];4 h3 z  l0 R  W2 R3 n; Y

9 R3 v1 U& \( F% _* B6 \  b& t2 r, ?

6 J1 \7 R5 N1 G! i, @7 v9 r0 F) |( k/ a" H% y$ w8 k
static void ys_edma3_init()
" v& E& q$ L2 ]{$ `3 B) l! F; }3 h  X; ]+ Y
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
" F* J* f0 ^" `  T3 U% a& f/ \! z( B        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
; _8 j& k4 R6 C: t  a        EDMA3_DRV_Handle hEdma;1 `0 ^* R0 d9 ], O. e' o
    uint32_t chId   = 0;
; x$ \& b9 R2 A    uint32_t tcc    = 0;0 i+ @% O. v0 m* a% W1 X, r
" e, A5 j4 a- u( W. ]* t0 X
    print2arm("edma3 driver init...",0);
0 @, v+ L) r1 c0 y% @) R( x
% r- o6 J2 G. @# s0 W& S        hEdma = edma3init(0,&result);7 H% K+ [% h. F! v, f
        if(hEdma), U4 B7 |" o) w7 T
        {
8 A; F3 N& C; E' w                print2arm("edma3init() Passed.",0);3 ?" H! @5 v" Q6 ^
        }3 m% o% k0 `1 k3 X7 L' R, q
        else$ d2 ^) \6 U% Y% p9 f
        {
7 k2 B. P& f9 V/ h* x                print2arm("edma3init() Failed.",0);$ v9 \8 f" m# K. \0 N- j) D
        }2 A6 x8 m; F  G+ p' f
          M( [9 a6 q( ~4 K! h
        if (result == EDMA3_DRV_SOK)
! w: m& U/ b8 ?# [+ ?5 J    {# v1 K  b1 n. N: E" z
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,7 L; ]( ?. t1 P
                                                       (EDMA3_RM_EventQueue)0,$ X" @! L0 t* k( A2 Q( K
                                                            &edma3_isr, NULL);
) v4 b" Z& Z. h( p( ]    }
0 w# e- j2 S+ O6 r" `        $ {! }  G8 ^! S: {
        if(result == EDMA3_DRV_SOK)/ x6 P, {: I. l; t* Y; Y% j
        {* C) J5 ^5 I6 I$ B& Z, c5 L' T
                paramSet.srcBIdx    = 0;- \5 p! P$ v1 |$ G" ~
                paramSet.destBIdx   = 1;  M; Q4 `5 f2 l3 w; ?% B
                paramSet.srcCIdx    = 0;& s; u9 c; ]2 u8 H, s' e# L+ R* Y/ W
                paramSet.destCIdx   = 0;
/ _2 l6 F1 a# r9 Y" O- F4 j: `9 D4 m                paramSet.aCnt       = PING_PONG_ACNT;1 U# S- f7 Q7 d) Q' }
                paramSet.bCnt       = PING_PONG_BCNT;
1 @+ s7 z  Q. y                paramSet.cCnt       = PING_PONG_CCNT;1 t8 j+ l5 j8 Q9 q
               
7 }8 o( m  i& P6 E. i) ~8 \& x                /* For AB-synchronized transfers, BCNTRLD is not used. */
6 x9 i3 }- a" n' K                paramSet.bCntReload = PING_PONG_BCNT;; @) Q/ h5 \, K) r5 F. W% m
. m+ V% R+ L% X% @, R3 {* {7 Z; U
                /* Src in constant mode Dest in INCR modes */; R  j+ I( z7 [% A
                paramSet.opt &= 0xFFFFFFFDu;- M: ?/ S. ^" e2 a& b4 r
                //paramSet.opt &= 0xFFFFFFFCu;, n8 r8 @0 p- w6 j8 ]9 v
                ( R" m! `1 k; D" K
                /* Program the TCC */4 y8 _: E% _& A; R7 j: {
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
) @  {8 i! @$ h2 q
6 _9 x  T+ O( }4 H                /* Enable Intermediate & Final transfer completion interrupt */0 r# Y! R; B/ W! D
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);+ U1 U7 _7 E* H+ o3 s
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);6 P2 s7 E. @' ?
: F, x- _9 Y9 K& p6 x% G
                /* AB Sync Transfer Mode */+ m3 d# n  s4 k+ Q. {
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
0 N$ e0 _0 c! p9 o+ a9 G+ y& |               
3 S7 O* M- P5 R" ?+ p                /* Program the source and dest addresses for master DMA channel */
1 r( a( _7 t' w4 M                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);1 x) _/ T) y- b2 E- K3 _# t3 ?
                paramSet.destAddr   = (uint32_t)(ping_buffer);
/ v) O. _1 A4 u& e
: M: t/ x" i9 A! V; E& _                /* Write to the master DMA channel first. */+ {% @7 N# s, G7 G* D; p3 {
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);) q) {5 `) @4 m7 i( }
    }      
4 n5 x* |/ h  r, z5 r+ b
4 A2 j( P6 }5 m        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
2 r, L- U2 s) C. U       
/ R. t9 b5 q3 }0 B; Z" F    if(result == EDMA3_DRV_SOK)
+ B  V: ]) {' }1 g- z    {
$ W2 ^: D6 z( \; ~6 d* Y& K4 u            print2arm("edma3 driver init success.",0);
6 G' b. p4 H. Z" _+ I    } 8 S/ @* v( Y  b' o3 |
}
2 N% L% H4 E- O
1 ?9 w* t7 _  K0 H# w$ m& t/ T/ m- n  b% J% U
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
% f  }) q. ?, r+ P. `2 ^0 F2 V( N( ]5 w4 U, U
8 K6 H4 c0 M% j9 ^. D. j/ 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
4 z# V- V! E9 Q8 `每次DMA传输完成后都要再次使能传输
$ ^9 s6 f  \( ]
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-17 22:19 , Processed in 0.047537 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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