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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:0 h& y' H3 l& g0 V3 R0 z
#define  PING_PONG_ACNT          1
9 G: \# Y$ c+ F. _% Q- K9 i" n1 V#define  PING_PONG_BCNT          8*32*40   c0 U3 a, C1 N8 @
//#define  PING_PONG_BCNT       1 $ Q" r, N: ]; Z: |/ U
#define  PING_PONG_CCNT          1- |7 l# g0 [# \" H  ^8 {
#define  MCASP_BASEADDR          0x01D00000  n2 J7 x  `" E+ }9 x2 T# Z8 C
#define  Mcasp_RXEVENTQUE        (0u)
& ~( s4 ?* k& i7 x3 ^( E' g) i6 i1 J2 i
/* OPT Field specific defines */
. H0 a; Q  w; j3 [#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
$ e, V( `7 I" O- P#define OPT_TCC_MASK                        (0x0003F000u)/ I3 Q- U4 R) d& S: {1 @/ i
#define OPT_TCC_SHIFT                       (0x0000000Cu)9 U2 r; g# e9 D. ?; W3 Z
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
& U8 e+ x) ^! D7 m# b& m  k) X- ]#define OPT_TCINTEN_SHIFT                   (0x00000014u)
& q2 Z; g+ s  g8 \: D5 b0 c5 _) o. g# m8 H6 x* q
char ping_buffer[PING_PONG_BCNT];
" `! C* D# [8 w* bchar pong_buffer[PING_PONG_BCNT];: ], P( @- D8 |

& E9 h; U( E" C
0 h8 n4 t) y: \6 b  U
+ m0 J+ l% A6 `* d; |$ K8 i5 i
: `& G" w8 V7 h2 Astatic void ys_edma3_init()1 I* X7 n; U$ {
{' Q# z5 i- V+ w) T  z7 r
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};" y) G: ~% g) k/ [
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;# d  }& y6 n. a* ?) s0 H7 y% M. H
        EDMA3_DRV_Handle hEdma;1 A$ n# w+ B$ Y2 r- F8 \
    uint32_t chId   = 0;( Z2 k. E' e. P
    uint32_t tcc    = 0;: j! N, R" `+ z& S2 A$ O! t

* J; i7 f7 W' v5 ]" Q% P    print2arm("edma3 driver init...",0);
, c/ F+ b- [* e& F; J% |! I+ C! G* u, @' X
        hEdma = edma3init(0,&result);
9 `  t( T' ~0 g9 q) ]! r        if(hEdma)6 Y" c% r+ L, g
        {+ ~" C4 a/ K3 _
                print2arm("edma3init() Passed.",0);
$ u/ P! V4 m. I+ G7 M: a5 t0 J        }
* q3 I3 G8 C6 G        else9 \0 I% A( L) z- u. n: x
        {# q! W) ?$ t2 h& i$ {
                print2arm("edma3init() Failed.",0);
; q1 g5 K1 s* w* S- K( N1 B        }  h5 H9 f, s5 c8 y
       
; @5 B% V3 ]. g* h  d        if (result == EDMA3_DRV_SOK)# G5 o2 ]/ J" N0 M+ O! ~
    {" T# x3 E& V/ e+ M/ P0 b
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
0 D* t& d9 D& K1 j% u                                                       (EDMA3_RM_EventQueue)0,9 F3 L" i! X8 T$ P
                                                            &edma3_isr, NULL);
) u( g- m9 j2 a+ M5 O; o7 i9 U    }
9 J+ b3 q* ~5 U) v& e" C6 l        9 B7 T3 f' H; n+ o( ~
        if(result == EDMA3_DRV_SOK)
9 H% M: g; N9 c9 c" ~        {
% \: @/ p  g. f0 I( w' }- Y                paramSet.srcBIdx    = 0;
7 o7 s2 f5 c. R  e. p                paramSet.destBIdx   = 1;4 n7 `' q: \$ q7 p& M$ Z' X
                paramSet.srcCIdx    = 0;/ y3 l% f$ I+ P. A" S+ X" c
                paramSet.destCIdx   = 0;9 l0 ~' m2 m$ z3 }! X6 O
                paramSet.aCnt       = PING_PONG_ACNT;
( w% S4 Y+ n2 E" O' {- R1 f+ R                paramSet.bCnt       = PING_PONG_BCNT;* `9 J0 m. F1 b/ V8 v
                paramSet.cCnt       = PING_PONG_CCNT;
, Y4 _; [; c9 D) E% O                * c$ J7 q4 R0 |7 H' {
                /* For AB-synchronized transfers, BCNTRLD is not used. */
$ c2 |2 x9 o1 f' k8 m4 U8 `                paramSet.bCntReload = PING_PONG_BCNT;
) H/ f6 ?) R+ |3 x& A, A1 x. s* R0 Y6 L# D
                /* Src in constant mode Dest in INCR modes */
% P' w  o) O$ s0 l: U                paramSet.opt &= 0xFFFFFFFDu;
6 Z; M0 y, N1 w* X                //paramSet.opt &= 0xFFFFFFFCu;
9 Y% y  r1 R- X% j               
& J3 z" L9 D/ c7 M: w                /* Program the TCC */( U6 {* B2 }, c# r4 S
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);( m7 z4 E, W8 M. C) n
7 \7 P6 k! o( [; z
                /* Enable Intermediate & Final transfer completion interrupt */! D7 ?1 k! I+ _, U7 f' p' ?
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
' \2 I: X* v5 {2 R/ u8 D  |- f                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);0 n# X" n$ H% v$ P
! E" r2 f* k) _& j: L
                /* AB Sync Transfer Mode */+ q/ C/ }: |+ D" }
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
6 F9 o) `- `; E5 N                9 X; p( E* |* x  J7 M
                /* Program the source and dest addresses for master DMA channel */
4 k! X1 l" {( P6 I                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
: e! X5 S; b4 M                paramSet.destAddr   = (uint32_t)(ping_buffer);
4 n6 e! w8 D; p* g: C
0 z. S3 s  d) ^# ]3 Y                /* Write to the master DMA channel first. */
- C' @/ j* S4 m/ M* ~, V4 R                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
4 P' @1 H' e: Y9 V    }      
8 g) l3 Y" i8 h" y& [' s0 u; K  Z* j, l
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
8 p$ p/ ?) z% }& K8 J. E        - e' P* K# E+ L& x+ t' C" P
    if(result == EDMA3_DRV_SOK)
* D; s* O8 |( i$ n( o! r6 W% ^+ X    {3 n# o/ h+ z+ M$ Z5 F( q1 {  T
            print2arm("edma3 driver init success.",0);
% b5 ^# r3 b" R    } 5 a+ J9 {/ {$ R1 j- F; g
}
4 {2 r, z2 T5 t9 ?6 z4 [1 g4 h/ B
7 G& r( `3 M+ F# U+ R
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
* e' q/ {% [, g9 i3 d5 I6 T+ v  w" l  ~
1 P% _8 L  O6 K& E# ]( p4 t- i* B( V0 [6 x- Z# k
分享到:  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:476 ^; f1 l" ?3 L0 G9 N% T+ n
每次DMA传输完成后都要再次使能传输
+ q" m' v! F* y! M
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-5 16:30 , Processed in 0.040032 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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