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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:, \, U: I7 v  q
#define  PING_PONG_ACNT          1  q7 |" i4 @8 N2 ^" u& ]
#define  PING_PONG_BCNT          8*32*40
3 B# v; @, ?, P/ g+ `$ H0 z//#define  PING_PONG_BCNT       1 9 H/ Q! `0 O, Q3 v. F
#define  PING_PONG_CCNT          1
' B3 @0 `! X/ E#define  MCASP_BASEADDR          0x01D000004 H( r6 A: P, g* m
#define  Mcasp_RXEVENTQUE        (0u)9 e5 s' N, h7 M0 p( C- Y3 w/ U

2 G3 Y/ j0 R/ P5 L' k- e/* OPT Field specific defines */! ]$ g: }" R. a* s$ C; ^* i
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
) _& b' t) B5 n) ?. b#define OPT_TCC_MASK                        (0x0003F000u); r( l3 Y0 I: J7 J
#define OPT_TCC_SHIFT                       (0x0000000Cu)
6 H  `  m- y# h#define OPT_ITCINTEN_SHIFT                  (0x00000015u)/ [9 z9 S8 V8 h* O+ S
#define OPT_TCINTEN_SHIFT                   (0x00000014u)5 `+ @/ s* f" h
+ r/ T7 Q+ u, X' I  w' n
char ping_buffer[PING_PONG_BCNT];
! x" L( f) U9 ~/ nchar pong_buffer[PING_PONG_BCNT];" i  b" b, U: `( C9 H, Y

3 w$ z3 h* A/ K: ^8 }' S. e4 b' G( ]* R, m: `

- _7 R" {- P& X
4 X4 X, q6 e3 J- Y1 x- Jstatic void ys_edma3_init()/ [8 ]. K# X; S, s0 y% g; R
{
! z/ |7 p2 _1 c' i6 N6 W, c9 E        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};( L: u+ K2 ?5 e8 e+ @* U
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
7 e8 i5 }# M: D. T: W        EDMA3_DRV_Handle hEdma;
, w8 ~" \* w* G* L& s3 Z    uint32_t chId   = 0;
7 X  X  O- m# t$ ~    uint32_t tcc    = 0;( I( B1 G  c7 |
* ^3 N6 M5 ]) Y4 P5 ?% v+ \+ i
    print2arm("edma3 driver init...",0);
* D% u7 W2 F8 V" n5 w
2 M: H" Y9 z+ W/ T: D        hEdma = edma3init(0,&result);( W5 e9 m9 l, r) _2 L$ T; V) j
        if(hEdma)
: l3 }1 n; S" h' R        {" z* H4 ?+ T8 H
                print2arm("edma3init() Passed.",0);
5 N: P# w0 X: E7 Z6 J& P        }& g: M9 B1 S; w6 z/ T
        else
  A8 ?3 i7 R+ I, U! n6 |5 Q' Z+ O        {
# e) W" x( j5 @                print2arm("edma3init() Failed.",0);
& }+ y3 `! r1 X* i/ a# x        }! `, S7 l8 a+ r
       
8 _3 N! j0 ~1 P4 }4 h! w        if (result == EDMA3_DRV_SOK)
$ t; E& y' ^9 Y; M    {3 J2 m* N# ?1 }
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
7 p% W/ r" x" ~' I2 v" V                                                       (EDMA3_RM_EventQueue)0,/ e6 ]0 W4 o: H# D/ i( Q
                                                            &edma3_isr, NULL);- z, s: u& r: s2 k) e# d/ S) @
    }/ m5 H' S- Z* @: I3 \& y) Z* r7 R1 u
        ) g6 w  l) U- k+ P8 d
        if(result == EDMA3_DRV_SOK). U* z' j# c$ {" Z' e" H
        {: ]* A2 \' v% q
                paramSet.srcBIdx    = 0;
8 b, [4 ^+ Z. ^                paramSet.destBIdx   = 1;
9 t7 X( M* g# \% p# M# L                paramSet.srcCIdx    = 0;8 A5 m2 l( d& k! _% N/ f$ B& ]+ M
                paramSet.destCIdx   = 0;7 ~/ F- R5 K& r% U# U' [
                paramSet.aCnt       = PING_PONG_ACNT;' p+ F) A. ^. L! @
                paramSet.bCnt       = PING_PONG_BCNT;. i3 }! Q, d+ ]3 c" |2 K3 n
                paramSet.cCnt       = PING_PONG_CCNT;9 M. M9 O- m! }% e/ Z& Z
                # o# a: b8 o* z4 c0 v1 ?
                /* For AB-synchronized transfers, BCNTRLD is not used. */: p9 P% j" N9 n) z. g6 A6 H
                paramSet.bCntReload = PING_PONG_BCNT;
. N* o, v9 ^3 F- \4 z2 ]
! v/ m% _5 X6 E5 p: p) g" Z5 Q7 O% N                /* Src in constant mode Dest in INCR modes */
" j! m8 C4 _; w7 p4 `                paramSet.opt &= 0xFFFFFFFDu;
0 u* U- k" W% m3 l+ E4 M4 u                //paramSet.opt &= 0xFFFFFFFCu;" C$ z3 p9 h' n9 o/ r# H
               
; _! w& a" e, m, `( n9 C                /* Program the TCC */
  d5 |0 D  `8 u# O7 k$ {1 T9 \' A0 `' F                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);" v5 D' g7 V# \/ D! _+ h

7 Z- K7 u% n& M+ N+ V, a9 \! u                /* Enable Intermediate & Final transfer completion interrupt */& }6 h  }' A4 g3 [
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
0 \7 p2 a2 D8 z4 Y' y$ s                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);' P- u& e0 J. a* q- _  ]' p
7 q/ @: h- `0 v7 S$ }
                /* AB Sync Transfer Mode */! M) X/ E* ]1 y6 D. b! y. C0 {
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);9 J6 Q. w$ _/ i+ f% I& r7 E6 E; n
               
. k5 |4 j7 a/ s+ S                /* Program the source and dest addresses for master DMA channel */
# u7 y6 I4 \( t) K4 f                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
) i' Y3 _8 |( ^- R0 Q' H& L$ k; l" E                paramSet.destAddr   = (uint32_t)(ping_buffer);
* T( X6 Y4 H: f+ n; j$ g
. c# q* [8 v$ @0 M/ h; v                /* Write to the master DMA channel first. */& W+ D* t* Q% f# ]/ i0 l
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
+ p  F3 Y0 q0 L- L    }       3 X; Y- ^( x, T. g8 v% K7 {  R* R
+ l  w6 s4 S- V: M' N' A% m
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);" [/ B2 s* `3 m9 H4 z! b
        8 ?1 n, h( O3 a- H' ]. W  t
    if(result == EDMA3_DRV_SOK) - v6 E7 M6 R" A7 _
    {# S2 @! @& q( a( D$ D" C% W0 X7 J
            print2arm("edma3 driver init success.",0);
" [, `) Q  |# v    } # ~9 n2 }" m7 ^
}6 \0 Y. k, K) u' [" h
" H, e0 i8 s9 F# @( l6 i

$ }& S1 T2 ]; P0 DEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
  z8 i3 O6 r0 v& f; [  N/ J" N& c* v% K( P6 f0 C9 N2 e! f' D
* L) ~# R8 ]4 M; F( f' E4 G
分享到:  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
  C9 X/ C+ m( X- i- o每次DMA传输完成后都要再次使能传输

( l0 ~/ ^" M1 [; `: {, c* }7 u原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 23:37 , Processed in 0.048262 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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