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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
  a# ?& b2 p  z' L+ M; s5 q! a#define  PING_PONG_ACNT          1
* b4 p. D# W$ y* v# [#define  PING_PONG_BCNT          8*32*40 * P- V6 F1 J$ w2 j3 ~' k( n9 p7 Q5 I
//#define  PING_PONG_BCNT       1
4 ^* a, C* D( D% ?9 R4 J: j#define  PING_PONG_CCNT          1
. Z# S1 d& K5 C2 M9 Z  x#define  MCASP_BASEADDR          0x01D00000
; s+ p- W+ r# E5 p7 z6 W#define  Mcasp_RXEVENTQUE        (0u)
0 }4 j3 j2 j9 s0 F  p3 A3 u& ?
- }$ }: g  c. c  U2 _* r" _# t/* OPT Field specific defines */0 a8 b0 A, H% y: @$ F
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)" T# J" @, z% E; g
#define OPT_TCC_MASK                        (0x0003F000u)
& b% R% S. Q$ Z9 [#define OPT_TCC_SHIFT                       (0x0000000Cu)) `- D3 @7 a( v2 M
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
: B5 F/ L# i7 D$ U# o6 t#define OPT_TCINTEN_SHIFT                   (0x00000014u)
: E& V8 Q3 `$ j/ d1 u! I. Q, M
+ ^9 e, W3 Q" t, ]3 Hchar ping_buffer[PING_PONG_BCNT];: s' {! c7 c& P  u0 X! o
char pong_buffer[PING_PONG_BCNT];: U# _, ^+ ]% s& r3 |/ W
) H! L0 D4 i- R3 @: t8 N; A

6 z  z) C# i) j1 w9 e8 O! }# P* G0 V, V* n7 k

6 s7 h/ b& G" |$ Sstatic void ys_edma3_init()3 c$ c9 a* S" ~) i3 C) o- t
{" B6 O- [: j6 h9 h) }5 Y
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};' ~; Q* q: D+ z$ t1 U
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
% S, u( ?2 _' j$ i7 N4 [) ]$ v' q        EDMA3_DRV_Handle hEdma;. u/ b& k3 W) I( M7 N; G# ]
    uint32_t chId   = 0;4 Y8 k; V1 K! [% P" F, H+ f
    uint32_t tcc    = 0;+ d+ e) J( @' Y( y; |2 o

4 @  K7 u/ `" M3 B' O0 {1 m: |    print2arm("edma3 driver init...",0);
3 A. Z2 `4 N; }' l2 y& y2 j1 x! M4 M' l6 k( L! p/ k
        hEdma = edma3init(0,&result);
$ P# X/ a$ l2 \4 m7 V5 E        if(hEdma)/ t( n" I7 C3 b- X. v5 c6 n1 i# j
        {
) ]3 Y% x1 U* ?0 Z' b                print2arm("edma3init() Passed.",0);' B6 \6 r; {( a' o. R. r
        }
" F8 K; I/ E4 j$ _5 x        else+ w; |  K( o( @; H7 q4 h4 j
        {; F! h* _0 c( u/ u. G  |: |. C
                print2arm("edma3init() Failed.",0);
; d, _$ b  L: A/ M, ^' S4 X) E        }
1 X8 i- U0 y1 ~- Y+ ]        1 V! }/ F9 V6 m; u. y2 N
        if (result == EDMA3_DRV_SOK)
, r6 h* o# z$ q    {  M5 r) ^. X0 ~4 e! P+ U; }# I4 o9 r
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,2 U+ x9 u% J0 |% c, `
                                                       (EDMA3_RM_EventQueue)0,
0 R  Q* t# s2 L+ r                                                            &edma3_isr, NULL);' V: R1 T5 ?4 n- u+ R8 M7 V6 h
    }
) d. c6 O" U; ~' L: t       
. I+ v/ J, N$ ^# r; K/ t        if(result == EDMA3_DRV_SOK)
' i1 C7 P, `& e3 v5 T        {0 W9 ?9 g) c6 w; C3 ?9 {
                paramSet.srcBIdx    = 0;
/ W. A, O5 m3 P7 s" P                paramSet.destBIdx   = 1;" c- s4 n* I  D; _, W* j( d- `7 w1 r! ?
                paramSet.srcCIdx    = 0;+ C" K) e0 F( Y0 w
                paramSet.destCIdx   = 0;8 Y; Y7 O$ B- I2 ~" C4 O
                paramSet.aCnt       = PING_PONG_ACNT;# L" `# t6 j+ I& Y" B
                paramSet.bCnt       = PING_PONG_BCNT;+ @  i5 E. ]4 Q# Y; L! b
                paramSet.cCnt       = PING_PONG_CCNT;4 p3 u4 m$ a8 m+ d
               
5 D$ t$ d) s2 C+ I; v& M                /* For AB-synchronized transfers, BCNTRLD is not used. */
) M  X! i2 D; c/ Q                paramSet.bCntReload = PING_PONG_BCNT;, @- h, {% `% q8 m# y
- n% `6 r7 S; d8 W3 P
                /* Src in constant mode Dest in INCR modes */
' p6 a$ X* J" `7 c( m; {' h- Q- o7 K                paramSet.opt &= 0xFFFFFFFDu;' U8 y$ m' I3 J
                //paramSet.opt &= 0xFFFFFFFCu;
; I* ^* e# `9 G' L5 J                * S( R4 B0 X) t* V& I
                /* Program the TCC */4 M! w' h8 u6 U6 v; h. j
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);. I. a( u+ @; i+ R, X
9 h+ a$ ?7 c% [6 H: Q4 c
                /* Enable Intermediate & Final transfer completion interrupt */
  k1 J5 H9 D; u" T" H0 d, H# K4 M                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
$ I1 v. c- l3 O5 |# C6 U7 @; R                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
7 c/ I4 Z6 J, C6 K: u
2 |6 c: v& o* {: _7 s* S  K0 f" G$ z' T                /* AB Sync Transfer Mode */
5 R7 M2 o5 N0 M& E2 G" T, C8 ?                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
% K1 g4 {2 o- V                : U! \0 q) G& j$ t, X
                /* Program the source and dest addresses for master DMA channel */3 E, x3 D8 U8 l, R% l4 M
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);( p$ m6 l6 {2 H8 y9 z
                paramSet.destAddr   = (uint32_t)(ping_buffer);
3 X7 G" t  k" S" E
+ A; m' J* ?- I5 v                /* Write to the master DMA channel first. */9 E3 W3 C; N# D- Z" P& t
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);& \0 F. |$ I' y% Q/ T, I- B
    }      
! R$ A; G* A# ^" v# r. F8 Z3 r" ~9 ^2 j8 v8 R# o
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);) R1 m( m# e' ?, k% b0 d
       
7 v8 n2 s# t1 @9 Q    if(result == EDMA3_DRV_SOK)
& O+ \& P3 J+ \& y    {
  |+ S6 r4 ~" O% P2 a. O" I9 F            print2arm("edma3 driver init success.",0);. g1 l' A% {' i) N& z0 O7 I
    } 8 v0 s" s5 J/ a( ^
}
  e7 g/ k) Q, J3 q7 N1 @
, C1 r0 {# o9 ^4 K4 Q
# V0 o/ ]2 t% Q: rEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
# U1 y& u8 w# R7 a. J: A
# p; X9 j( v: |* F, y! R0 A, @3 E" v& }* ^& D* H
分享到:  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
! j, O4 Y2 F7 v; B8 e" [) W, Z0 K& r每次DMA传输完成后都要再次使能传输

* P& `7 {' l. N原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-23 14:46 , Processed in 0.045919 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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