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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
0 }+ e* c6 C1 _  w#define  PING_PONG_ACNT          16 D/ `4 ~7 ~' e0 g- [" k/ b
#define  PING_PONG_BCNT          8*32*40
) K5 e1 ?1 _3 }; e# p: @% m6 \//#define  PING_PONG_BCNT       1 ! \! l0 E" N) W6 k8 G! j% }
#define  PING_PONG_CCNT          1# e4 i0 |& M  m8 F& Z
#define  MCASP_BASEADDR          0x01D000008 Z8 i. K, G6 S) O$ j
#define  Mcasp_RXEVENTQUE        (0u). K* z! J5 @, v5 R- C6 N5 C

6 @. I1 f( @1 Z, Z/* OPT Field specific defines */3 _4 ^, C2 c" s% T2 E
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
  g3 \9 ]9 K$ ?2 D1 f" C$ S#define OPT_TCC_MASK                        (0x0003F000u)
# d1 z8 b2 g8 Q! O0 I#define OPT_TCC_SHIFT                       (0x0000000Cu)1 s" ^; R2 D& b9 ^- V$ U& a
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)7 w; i/ b& J$ C9 q2 u; H0 C% p
#define OPT_TCINTEN_SHIFT                   (0x00000014u)3 t3 L3 [) `# o/ R, A

+ ~- l% M1 i2 @char ping_buffer[PING_PONG_BCNT];
0 Z# q1 C) x) h& L5 i* A/ |3 j. ychar pong_buffer[PING_PONG_BCNT];7 R( ?: B, I+ e% r  f8 g
" F- V' o: S$ ]* A
; a, Z/ Y5 ^9 `' k6 {% m# L
# h% @1 e& o" F: t% F& {
% V, l5 M' d0 A' E" M9 Y
static void ys_edma3_init()
! _5 A5 Q& t2 H  {$ k+ ?6 y{0 u  l' C5 G% n# V$ b" h! R/ j7 X& L
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};2 |, I* X2 W2 X* i9 K+ y( I* ?
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
1 P1 l& @) H5 W        EDMA3_DRV_Handle hEdma;
/ j( ]# C# Q6 A' D: l    uint32_t chId   = 0;! z3 C& W9 g) G. l
    uint32_t tcc    = 0;( v* J- H. S# F: S
- W$ b% _' ^. Z, d' L6 [2 [% _9 g
    print2arm("edma3 driver init...",0);  P& t( t$ @& F/ e& C2 L3 O) J
2 ^7 ^" R7 t7 \0 t! t4 I. }
        hEdma = edma3init(0,&result);8 J* F; u0 ?; {0 y; m6 w1 u
        if(hEdma)' J5 Y; }* K9 e4 q# ?8 S0 \* p
        {
" H7 }( M! ~) T( U6 h                print2arm("edma3init() Passed.",0);3 ^/ x" X! d& q1 J0 l
        }
. v0 w1 _9 U* t% q# i% j2 u        else5 O9 l/ Z) Z. E( i
        {$ N0 ^0 {/ C$ X; P3 }* Q
                print2arm("edma3init() Failed.",0);
& z1 h0 P3 H  k, y7 B        }' |- I: y" t/ _, H8 h
       
. w: K0 }) m  ~0 g        if (result == EDMA3_DRV_SOK)- E$ p- O$ Z* m
    {$ X, V( r+ ?4 l; }
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,$ _" P: u+ I- O- G9 Y
                                                       (EDMA3_RM_EventQueue)0,7 B+ Z3 w0 Z" U. O" z8 F$ G
                                                            &edma3_isr, NULL);
! ~5 _' \# X9 q    }
8 y; {& m; q$ \/ U4 I5 i; ?& f       
& J3 H( K/ f! e, e7 b/ b; d        if(result == EDMA3_DRV_SOK)
9 h3 z; Q3 `( B        {
+ u% i" X1 [, u2 n9 ]                paramSet.srcBIdx    = 0;
2 a3 D/ i) Y9 l' H$ q                paramSet.destBIdx   = 1;
7 g! |# u+ V- \, ^* V( F                paramSet.srcCIdx    = 0;
& X$ q, N4 H) G) n  L                paramSet.destCIdx   = 0;- j  a' d; n; X9 x9 p7 u
                paramSet.aCnt       = PING_PONG_ACNT;
0 Z  L" Q) ?# C                paramSet.bCnt       = PING_PONG_BCNT;, @4 k- I6 B- U' {% V- k
                paramSet.cCnt       = PING_PONG_CCNT;" y3 G" y) n8 f/ i
               
  ?4 g4 g2 D. n; |7 Y  K                /* For AB-synchronized transfers, BCNTRLD is not used. */& r3 `4 y: {& T- z
                paramSet.bCntReload = PING_PONG_BCNT;
! n# S1 u) ]. h6 B7 S4 Y  y, R! u; \  }/ g8 ^- \& ?
                /* Src in constant mode Dest in INCR modes */! H; v- [* C0 o: }
                paramSet.opt &= 0xFFFFFFFDu;( @7 r8 |* A  I7 u! Q3 _
                //paramSet.opt &= 0xFFFFFFFCu;+ T9 t. e7 U1 j
                ; O( F% o  c) w6 T
                /* Program the TCC */
/ b1 A7 b$ h. v  |/ t                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
0 Z) x$ G/ V) w8 A$ r; \/ N3 u! l3 p  D. ]
                /* Enable Intermediate & Final transfer completion interrupt */
( z' @  m( ?& k1 j4 k' O                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);& I5 a6 S7 H4 K4 y
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);/ y9 }( n8 G/ I/ B

. p; J+ N/ s+ P+ j                /* AB Sync Transfer Mode */
5 V% H+ S2 T+ D7 n                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);" F# a8 }2 T" N1 ^) m
               
- z4 E5 @# g" ^. q                /* Program the source and dest addresses for master DMA channel */
8 G6 m6 p$ q8 M5 o! Y  m                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
  N# r- R. r' P7 E' s. V, m9 i9 h4 w                paramSet.destAddr   = (uint32_t)(ping_buffer);
9 h2 H8 Q5 p/ o& G' ]0 _7 p5 b4 M. _" U4 {
                /* Write to the master DMA channel first. */3 W: g7 M: E1 {$ u& p2 M; ]
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);- Y# R4 }& e2 e: v8 Y- A
    }      
% O' t7 w* Q5 k8 S2 Q( [6 M) h% g. w$ V8 z! ~% P4 j4 S
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);5 y  j- W) X. q* `3 L
       
9 l: h* ]6 g: u1 S9 L# U+ a, I: I    if(result == EDMA3_DRV_SOK)
- A7 R' B( n* Y" c, H    {( q) F6 b9 S% T: B' ~2 D
            print2arm("edma3 driver init success.",0);* z  `1 j: a8 N/ O- [. \# b
    }
' f1 P& n) {1 ]5 v% h+ ^0 [}. Q3 O6 }) O% X% m/ H" R% ~5 P- {

# Z+ o3 O& [, C: p' ^$ T
/ ^1 J: e# }* o- t1 @EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
8 c7 c( Y& X4 h+ ]' l* f) g- M- b3 }0 O2 `$ L; M

; f, r: F5 M4 g. ?& _; ~' ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:472 G5 W$ X% l* ?2 `' ^# h
每次DMA传输完成后都要再次使能传输
4 L" s' [+ h# S$ i
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-24 10:47:00 | 只看该作者
每次DMA传输完成后都要再次使能传输
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-7 19:44 , Processed in 0.042438 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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