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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
% y% D7 [' P9 G) N3 a5 [#define  PING_PONG_ACNT          1$ Q/ X$ o8 Q7 A9 h+ i
#define  PING_PONG_BCNT          8*32*40   z4 s. ?" a* Q
//#define  PING_PONG_BCNT       1 ! l3 q& E2 H. L9 S, ^
#define  PING_PONG_CCNT          1# c1 M( I: [$ l) s, G  Y) e5 g4 Q
#define  MCASP_BASEADDR          0x01D00000' ^/ H, O' }4 X: G- [# i9 t: H8 K
#define  Mcasp_RXEVENTQUE        (0u)
( z5 Z8 B5 G5 B  X4 `8 a
4 a/ q# P% M/ R5 F) i1 ~# o: A/* OPT Field specific defines */: _+ ?! m8 x3 h, B" f
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
9 H: K$ c% H/ y7 x- r: h, A#define OPT_TCC_MASK                        (0x0003F000u)
" t+ @. H3 ]2 s# \" g: }#define OPT_TCC_SHIFT                       (0x0000000Cu)& a- H* K; B# p1 Q7 X% Q
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)) T  x# E- G) T5 x  s
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
9 o8 J; @7 k" S% ]% `! Q8 ~; K+ P# v* T5 C# z. E" |- H
char ping_buffer[PING_PONG_BCNT];) n- K$ x# R: r- a9 m+ s
char pong_buffer[PING_PONG_BCNT];
# {  d: g9 D1 e' l/ Q3 K" l4 W1 ~* B

4 _- @, _/ u/ X  x  Y
( a* p- A, _$ A  U& {9 c
4 H3 J/ A+ y, U7 W* J4 {static void ys_edma3_init()* P# C8 Q. `, u: L0 P) p& F4 C1 I: [
{/ E" ]4 f/ J# n) i+ t
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
8 Q) z; n$ k) t+ p* f        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
2 Y" W6 }+ A6 [* u0 K- a9 M  ~, u        EDMA3_DRV_Handle hEdma;
2 m- K+ J. E# Y    uint32_t chId   = 0;
0 S( x' J6 v) l* N- w    uint32_t tcc    = 0;
% c1 b! f  O9 N, M2 U, p1 {9 A6 s' H+ |
    print2arm("edma3 driver init...",0);
1 M( E3 T0 \3 ?/ Q3 V% Z2 G. p+ B6 d& v
        hEdma = edma3init(0,&result);3 I6 G7 y, `+ N& a( a# T
        if(hEdma)
+ w' u  |7 U  T9 }        {* Q2 {; C, s$ v; M- p6 f9 p
                print2arm("edma3init() Passed.",0);: s3 v9 F+ X/ |0 q$ e
        }
2 [4 T9 K5 |1 l, I* D; P8 o        else
8 [1 a5 u. l# w' K1 o        {
: v  G  l3 ]3 q+ C# [( \3 s                print2arm("edma3init() Failed.",0);* m) o$ p; V- f2 p0 Q7 k
        }
' }( N8 L/ E& h       
: {, v. G- E+ H: O" W        if (result == EDMA3_DRV_SOK)' a* J! K& m! i" R; u
    {
7 w( h) ]9 A9 W2 N0 Y) ~/ A1 A                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
5 {" w: B5 F; ^& E% m9 C6 `; }                                                       (EDMA3_RM_EventQueue)0,
; Q: r5 }0 P2 S5 ]/ m                                                            &edma3_isr, NULL);( ], o$ Z. w$ N- |# y  T6 T$ t
    }
) j, n& n( C" `! @4 k! d        , V- C; q( r; p: `5 g
        if(result == EDMA3_DRV_SOK)
4 }" ~9 o3 O8 J$ {! I        {' v4 B- L! h  Q7 w+ U7 ~6 y" R/ z
                paramSet.srcBIdx    = 0;; b; k0 r( M8 L; K6 S
                paramSet.destBIdx   = 1;
" X# ^  H+ K. ~" t; C4 K                paramSet.srcCIdx    = 0;' f: A* c# Y& `3 ]; @+ W% o
                paramSet.destCIdx   = 0;
8 t' }/ }" E$ l3 r3 m5 x                paramSet.aCnt       = PING_PONG_ACNT;3 z% h2 u% a  ~8 ]6 O
                paramSet.bCnt       = PING_PONG_BCNT;
5 U4 j, K; P1 H# \% }                paramSet.cCnt       = PING_PONG_CCNT;
; \) V0 g; f, A$ v. I) Z/ d                ) y9 W5 k, h- R% M( I: w4 k* l! f1 I( A( o
                /* For AB-synchronized transfers, BCNTRLD is not used. */% l& R% a/ K0 L' d3 ~
                paramSet.bCntReload = PING_PONG_BCNT;0 B' F# B2 O7 F

  R7 E& s8 T, i, x                /* Src in constant mode Dest in INCR modes */* @2 l8 ?0 h1 [8 ~: Y1 @' Q: y' `
                paramSet.opt &= 0xFFFFFFFDu;
, ?6 c& O! j. K3 a9 k) n  D                //paramSet.opt &= 0xFFFFFFFCu;* N# Q& I) m& J$ R7 ^; r! F
               
0 Y% K3 v+ c4 I: J* e% j  Z$ J                /* Program the TCC */
4 m: \- [3 d4 A                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
- l7 X3 `7 Q( K0 T$ T  c
% I! d3 E; d* n$ T+ W                /* Enable Intermediate & Final transfer completion interrupt */
' J- |7 {* m1 ]                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
; U# g4 L) U! B# F$ Y                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
0 M4 X6 B; Q: _" m. K5 s; V* W, _& X9 r9 h$ K
                /* AB Sync Transfer Mode */
8 f! X+ y" e; H                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);( v; I; b4 N7 d0 ?
               
* v1 D' v" f# ~: O. e" V8 c9 y3 q                /* Program the source and dest addresses for master DMA channel */8 {. v. `  {' j, v( y$ |4 Q
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);3 j- h0 e3 _+ y$ T/ g: G8 b/ {  N
                paramSet.destAddr   = (uint32_t)(ping_buffer);1 J" {$ {6 Y8 E0 w& @- c" l4 ]* D- E/ T

* O: J4 z) f/ b2 p& Y3 n                /* Write to the master DMA channel first. */
9 P2 I4 C- k! H4 W% z. u                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
- `0 e8 s. K4 B  p2 ]3 Q    }       ( T7 S4 g. B/ w

' R! ]  E9 z7 Q3 R        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
* I4 D+ S6 E: D! i5 G1 d9 s: U       
; s8 R+ K( Z, }& D& h7 M    if(result == EDMA3_DRV_SOK) # U( [$ y2 N4 Q: }& M" u9 x/ s
    {
* Q, J0 b" H! A' o* B' o            print2arm("edma3 driver init success.",0);
9 [& H  e& q$ Q! J: o    } 7 M$ o9 ~, O9 F2 q  _
}
" v9 W, @( J8 v8 Y. f
6 p! n+ V. i! e6 l. C0 }# M6 _* K8 L8 K3 |3 [. h3 l. ~, J
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
7 t; U. ^) f$ {/ C
( I  r" Y2 B: Q4 C+ v6 ?+ @/ O
$ V1 ~5 x+ G7 i1 G- J7 U- U
分享到:  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
8 o4 f& J& L' E% |, X每次DMA传输完成后都要再次使能传输
1 o; T% \, i, \! Z3 r( g
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-27 23:29 , Processed in 0.039193 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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