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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:+ {  r0 z& ?3 B& F5 |
#define  PING_PONG_ACNT          1
! \+ Z7 s" N1 s. o2 Q& m#define  PING_PONG_BCNT          8*32*40 8 S1 D4 h. _' D/ k* F
//#define  PING_PONG_BCNT       1
, o' a! N4 Q+ v! s/ |5 Z. ^#define  PING_PONG_CCNT          1) D% M$ h+ _+ w' c6 S: `, [
#define  MCASP_BASEADDR          0x01D00000, O- @1 L8 c! |
#define  Mcasp_RXEVENTQUE        (0u)
" K: O* f5 j5 N+ z9 U& y1 r& `* D, G' q$ ~& }6 }3 U
/* OPT Field specific defines */
1 o2 I9 `( C4 @/ N3 ]#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
! z- f* Q2 }6 g6 ?#define OPT_TCC_MASK                        (0x0003F000u)& w" X) }  Z* w5 q# n
#define OPT_TCC_SHIFT                       (0x0000000Cu)
/ y% O8 T; t. _#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
2 e0 C: D1 u) y" m4 I#define OPT_TCINTEN_SHIFT                   (0x00000014u)" I& x6 a9 H! ?3 {& W9 e
$ A: o% p4 ^7 p) ~# H6 }4 B
char ping_buffer[PING_PONG_BCNT];# F# Y# F( R" \0 N7 g
char pong_buffer[PING_PONG_BCNT];
0 X- ~3 S$ t( S) t) [# [: Y4 L1 U/ D
1 J2 ]  D' @7 Y  q% o7 ]. O8 O: z9 }8 H! j
+ |. @+ l8 C' ^( I
) f, F1 e) S6 B2 [/ _
static void ys_edma3_init()
3 d8 I- c+ C' U) e+ u{
6 k+ H: g8 @& j- t. u: Y        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
9 o/ t; D4 `1 a/ y' B# h: d        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
. h: {) T7 d3 W5 {6 D# T+ T$ r        EDMA3_DRV_Handle hEdma;9 C& A% L  r2 k
    uint32_t chId   = 0;
4 }+ T7 U6 j+ R; U( f    uint32_t tcc    = 0;
7 m7 z& X- H8 f0 {# k5 v0 X! W  t/ M# t( ~4 s
    print2arm("edma3 driver init...",0);
1 R* J# M' t! ^, j. ~5 X* f
% S! _) R$ A4 b        hEdma = edma3init(0,&result);. J7 M, W5 Q, v$ M
        if(hEdma)- d" a9 d; s9 v2 E6 _( P0 I% J
        {
1 r; F* _- x* p# d& _( H                print2arm("edma3init() Passed.",0);
; x0 K* g5 F; u        }
$ Q+ b. N! d- K# B! X        else3 W* d. Q# Y5 i9 i3 N# I" o
        {
6 a: H6 W& A( ]5 M: u9 |8 r. Q- K                print2arm("edma3init() Failed.",0);
( V' ]% ]  S( X; U! U2 m# D        }3 E* G/ v' P7 x" W
        ; S5 w% V0 w3 R+ r  \
        if (result == EDMA3_DRV_SOK)8 J/ m7 j# b8 L
    {
4 v7 X/ B4 G. L  Z1 p                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,9 F" b* s& o' z% a( y
                                                       (EDMA3_RM_EventQueue)0,, i+ N) `  ?, m  I
                                                            &edma3_isr, NULL);) Y! I  h' r" V' _8 {
    }1 d8 V  l% [1 {. O
        # e( x) B- A$ a
        if(result == EDMA3_DRV_SOK)
) d/ x+ g0 z0 Q. R        {) H9 e: X; v, l! t4 z
                paramSet.srcBIdx    = 0;) ?" \6 Z& A) I" I; y% H2 x1 ~
                paramSet.destBIdx   = 1;3 g9 A1 R2 H  P8 ^
                paramSet.srcCIdx    = 0;
. Q" s  x2 |- R8 d                paramSet.destCIdx   = 0;7 h  J) l. E1 b; e3 K
                paramSet.aCnt       = PING_PONG_ACNT;+ R$ S2 N# f: x  J4 N/ S6 n
                paramSet.bCnt       = PING_PONG_BCNT;
% C8 @3 @3 p  ]" r) b                paramSet.cCnt       = PING_PONG_CCNT;& B9 g3 |. s1 d; q3 l0 f; R
                ( h8 N! b8 o5 z! e, k
                /* For AB-synchronized transfers, BCNTRLD is not used. */  L) y' j1 f& ]; c/ E
                paramSet.bCntReload = PING_PONG_BCNT;
, U, z: t; L8 D# [. G; q6 z- ^1 a" l# _# [  {6 ]
                /* Src in constant mode Dest in INCR modes */5 R, \- I/ ~$ l  I4 a  D. l4 j
                paramSet.opt &= 0xFFFFFFFDu;1 V; w$ F( e" ^1 z) ]/ x$ t$ ^- D
                //paramSet.opt &= 0xFFFFFFFCu;: B; H: }; L2 c& p5 y5 p
                / Z5 E$ z' ?0 ]& K/ |$ h* Z
                /* Program the TCC */
$ }; Z+ O" f8 H! V6 Q( s                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);! H: p. u$ p# W0 N) y

% C. }+ }( k* z; h6 u4 i5 e                /* Enable Intermediate & Final transfer completion interrupt */
5 k- \6 K$ _: Y0 V1 Q                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
6 D- G2 s% E9 u3 J% m: p" P* D                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);: Q' G8 I3 [/ p5 T# [
: q( U, e$ Q5 _" w
                /* AB Sync Transfer Mode */
9 z  [' {; p9 D% M5 G: y                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);* C9 M* q6 C7 X; {8 N: T
                9 e5 S2 N. q: S3 c+ I+ C
                /* Program the source and dest addresses for master DMA channel */
" X' k1 y$ v' x6 H; w& N                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
3 l: e. H; d, s& r( i3 N9 O                paramSet.destAddr   = (uint32_t)(ping_buffer);4 N5 \4 F3 [- l6 U# ?+ A* |- @

: c9 R( c3 W$ \; G* Q                /* Write to the master DMA channel first. */
3 {5 e# N- _/ @& x3 f+ q                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
; t4 J8 O, e7 {) q1 ~8 K) K    }      
3 e+ j9 h: r  a" l- M+ t, b% F. C# ^6 n9 m+ h% E8 K
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
: I5 U7 r/ G4 W        & @1 x3 k2 s1 o# Y
    if(result == EDMA3_DRV_SOK) 1 M* z- v* H# {/ j' [- \, E
    {2 _5 \- a- l0 T5 `9 b6 H5 m
            print2arm("edma3 driver init success.",0);2 e8 C# [1 u1 q+ M3 ?
    } 5 ~% |( {9 k- @9 C$ B# g0 @! L
}
7 f) n; b& N  c& U) H7 E. c8 X# {: T1 N4 m# v: V, k' A; P

& E% v& l6 s7 P( T# I7 s  |, kEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
# [6 L' o7 ]; G+ M5 T
7 t' T8 [8 A+ p# m0 M2 v$ i; Z' U& B9 v" V+ B: G& B# R5 J# d- P
分享到:  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
" y1 q8 k( D( O9 V- H. C: l7 L每次DMA传输完成后都要再次使能传输
& n* I9 d8 u/ l& B8 D  c5 r: b
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-5 23:50 , Processed in 0.041653 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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