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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:5 b" I" J7 j. \
#define  PING_PONG_ACNT          1, F7 x7 x: T2 D  P+ C( Q+ H. ]' J
#define  PING_PONG_BCNT          8*32*40
5 ?- _8 ?* d4 e//#define  PING_PONG_BCNT       1
. m  X" d" R7 F( u. Y; H9 @2 K, f: w4 w#define  PING_PONG_CCNT          1& C3 m0 U7 U9 B9 r7 |
#define  MCASP_BASEADDR          0x01D00000
  v, n2 B0 ~- R' S2 ~" |* l9 C#define  Mcasp_RXEVENTQUE        (0u)
% u  `; q6 @7 m1 r' U0 L
1 W& m# }$ h! L  B0 x" \/* OPT Field specific defines */1 O3 }2 }! K. Q
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)* u0 {  x9 {3 C& y2 S" z" x" D
#define OPT_TCC_MASK                        (0x0003F000u)6 p3 B2 ]8 v$ {) g1 i
#define OPT_TCC_SHIFT                       (0x0000000Cu)
/ }' s( E0 p# }) O* N, F: q1 M#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
: s5 p7 ^6 `9 A  O7 h4 S#define OPT_TCINTEN_SHIFT                   (0x00000014u)' j4 n" d' S, q% `; T. I

( j( Z) ~& r& ~9 d' k! h" j0 c! vchar ping_buffer[PING_PONG_BCNT];+ }; r4 P5 |/ P5 L
char pong_buffer[PING_PONG_BCNT];
# A. z" ~  k8 O2 C; O6 ^9 N( i. d4 J- D  O; z1 ?
9 u, m* c+ E' s/ X9 H$ @

2 i% ?  N6 G" v2 r, s" o) T; q# R' v8 Y: B. {7 U& j8 u7 p* \
static void ys_edma3_init()
4 V6 g' k5 O2 K2 E{: g% j; v# ~, b6 y/ a9 h
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};# b( F# i9 c' g( d
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;- n8 q: B, ?. C) ]% e) u5 Z
        EDMA3_DRV_Handle hEdma;. ^4 `2 Y' Y, }- g0 f
    uint32_t chId   = 0;( x' D3 S8 Q& Q
    uint32_t tcc    = 0;9 {. T! h% O! H$ f0 c5 q
$ J3 c5 {8 x- j' \3 P$ Q
    print2arm("edma3 driver init...",0);
: w' k3 K$ T* a
' a$ c  N- z/ ?& K  e- U3 @        hEdma = edma3init(0,&result);% p9 d* H9 s1 L% H
        if(hEdma)" Y8 z; Y+ C; e' x' J$ k
        {# e3 w+ b- t+ b# X  Y& x0 r
                print2arm("edma3init() Passed.",0);5 C) @& R% u0 a9 v, X8 h) A
        }2 s/ b+ }( n9 T5 u& G
        else
$ H% j2 N- W7 _" n& a3 T        {8 i" V1 D4 z: r; x: S
                print2arm("edma3init() Failed.",0);
5 ?* O5 f) x4 a( a        }0 }$ h9 A8 l- C, b+ ~: d* v
        ! M; B0 o: L9 d- c+ R
        if (result == EDMA3_DRV_SOK)0 }9 D# E% a4 E$ z3 O! F: U. ?" M; \6 ^
    {( r& \# ~) p% ^' J5 ]3 Y; U
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
. R5 {$ X- I9 Q# b                                                       (EDMA3_RM_EventQueue)0,9 _1 ~  v  M8 z" s
                                                            &edma3_isr, NULL);
' a8 g  l; @& s    }
1 b, D- s; S- f        9 u/ q8 [2 M* L, Y
        if(result == EDMA3_DRV_SOK)
5 f  d0 t# ?0 `& h/ |2 [6 u        {% S) @+ {! ~6 H/ y  x# C" M$ m
                paramSet.srcBIdx    = 0;
; z: K$ A( R; y3 P- M$ t4 w6 t                paramSet.destBIdx   = 1;
+ p* {9 y* e- l8 O2 `+ P                paramSet.srcCIdx    = 0;
2 V3 m. I2 K  r                paramSet.destCIdx   = 0;
% o. X; z, n  p" ~6 Q                paramSet.aCnt       = PING_PONG_ACNT;& R) M: b2 W, w
                paramSet.bCnt       = PING_PONG_BCNT;
% {: N" s, q& ~$ [" O* A, J) ]4 i                paramSet.cCnt       = PING_PONG_CCNT;
" e  R' H6 u5 c                / Y- M' F& |  p; w+ K3 @  ?  u/ r
                /* For AB-synchronized transfers, BCNTRLD is not used. */$ }' y3 V$ X, u
                paramSet.bCntReload = PING_PONG_BCNT;7 T# I8 |# }- E

& ]4 Q- k. I* O6 m: g3 P' ?  |5 G6 {                /* Src in constant mode Dest in INCR modes */
% C; F/ C; O& W0 i" P                paramSet.opt &= 0xFFFFFFFDu;: C4 u* s5 F, y- N, V- w
                //paramSet.opt &= 0xFFFFFFFCu;3 k6 H4 T; Z) _- s' |+ E
                . s, ], H* a5 |& `
                /* Program the TCC */1 b/ y  c( \/ R- x3 A9 _+ G" l; y
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);! i# _1 s2 n) q( Z7 T0 c0 _

( U( M0 {. u  O! N8 k. v( n                /* Enable Intermediate & Final transfer completion interrupt */% L; W1 [5 w1 `
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);; }( ]  Z3 U6 y
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
0 I& G1 t8 a- e# C; z) B2 y# Y7 m% S) w
                /* AB Sync Transfer Mode */( N4 p. c# \& B- B5 `" q
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
& x2 _7 D( w2 H: f- D* W               
) H; S' @% z; U                /* Program the source and dest addresses for master DMA channel */
* b9 g$ J9 h4 i3 O                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);8 \! J: O5 ~. v0 I. D
                paramSet.destAddr   = (uint32_t)(ping_buffer);
' q0 g2 ^' |& Y  R  O  ~8 d
" Y5 T* @- S/ D) n7 B" k, P                /* Write to the master DMA channel first. */) f3 [7 J8 O) M% t# Y' z6 j
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
+ J' K/ q( d5 G7 d    }      
2 C* u  ]6 \2 h' y* K* t( K9 I* I% a2 y
1 x# [$ C. V1 g  w        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);7 h8 Z" q, I1 |% \  ~% P
       
  p2 X9 C) r2 ]- s    if(result == EDMA3_DRV_SOK)
; O$ L6 Z1 @; T* d$ K1 W    {
9 @# e8 t% D! H! k! T0 L            print2arm("edma3 driver init success.",0);
+ d* D9 k$ ~" P    } 5 T. |, \- r: f* K- ?
}% n% `* [' ?& J: q! I! I4 @

( v& ?: i! ~+ x( B' i% p) [- M
( I/ R. d( s4 G( C& U) i7 kEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
* E, ?* r: K5 {
  A% v2 s" g. h0 g; R% L
; x4 U/ l3 B5 e7 e; P; d8 W
分享到:  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' d8 B2 J5 K2 F$ S6 i& A! t. Q! p7 Y
每次DMA传输完成后都要再次使能传输

3 q0 X7 ~. F0 J- [3 ]! z原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-22 19:45 , Processed in 0.043698 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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