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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:7 h- M" J! G" t0 S; F, @. U
#define  PING_PONG_ACNT          1: G5 N; A7 Q. ]' |
#define  PING_PONG_BCNT          8*32*40 + A, T. `# `  s. j* j
//#define  PING_PONG_BCNT       1 5 o8 q8 E" i: l: y- {
#define  PING_PONG_CCNT          1
/ r4 k( h4 L6 |" J2 P' t9 k, s! y. i#define  MCASP_BASEADDR          0x01D00000
4 V1 t; h8 ~  q" u+ d0 o#define  Mcasp_RXEVENTQUE        (0u)
# I. K) B  R7 ^+ G3 [* G* \5 i/ _3 G: e! x1 q% \. [
/* OPT Field specific defines */
2 n8 T# X1 g8 o- a4 x6 K: K( U#define OPT_SYNCDIM_SHIFT                   (0x00000002u)) K! K: \/ a, P; l& X6 w6 l- P$ P
#define OPT_TCC_MASK                        (0x0003F000u)
3 I- ?, y( F& q" W, F#define OPT_TCC_SHIFT                       (0x0000000Cu)
- @- y8 w/ x6 Y# G+ P0 E#define OPT_ITCINTEN_SHIFT                  (0x00000015u)6 |- D# Z; s3 \0 N
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
! S( ?% ]& C0 W0 T+ J$ a
- H- k2 {! _$ F+ J5 z8 Q! Nchar ping_buffer[PING_PONG_BCNT];
* ?! [# H4 ^2 wchar pong_buffer[PING_PONG_BCNT];
# P5 j, L$ f9 ]; p, g+ {9 ^- o$ C; B. M
0 f( {( x  h! @- W
  _8 u/ `7 ?. n: z% b

0 p0 n5 x  S' y% l6 Astatic void ys_edma3_init()
! w* K# B0 K! t. S{% L1 o/ L2 o; J
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
  A6 i2 [  O2 W& a" c, Z. g        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
! i, V8 f+ |+ Z$ c$ ]- ?1 S; @        EDMA3_DRV_Handle hEdma;. P5 k5 R( I* ]
    uint32_t chId   = 0;
, U: \7 Y  [  X    uint32_t tcc    = 0;
1 I/ _) k/ k6 o2 E( O
3 b3 b: w. \/ I- j- u5 q7 J    print2arm("edma3 driver init...",0);
2 ]  v4 T- n! C6 x9 [& z9 l1 t
7 i9 |# T. i! B+ O* ]        hEdma = edma3init(0,&result);
' Z6 U# K5 o0 X& y2 _5 m' r        if(hEdma)  Q) k2 N( ~" n- O' K* H
        {+ V$ d# u" L# s$ L  a+ ^8 b4 M+ [
                print2arm("edma3init() Passed.",0);4 d( V8 l# E, r+ w) M1 S& M
        }6 s3 V9 N2 O' l* u, d* z& e& s( u
        else3 e* z0 D$ `; \' ]& n
        {- r+ Z" L+ |, \& \, p, `: i/ S
                print2arm("edma3init() Failed.",0);7 D. l7 ?1 ]) ]! W1 K4 ^) k
        }( @. i& W$ o& o, F
       
* J- O  y( M. j, C. a        if (result == EDMA3_DRV_SOK)
# Y3 n- b8 H8 p9 y& m$ R    {4 Z* X8 P( f) ~5 E
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,; ^# j8 W: y  K1 F
                                                       (EDMA3_RM_EventQueue)0,* }) Y% b+ J# n' C
                                                            &edma3_isr, NULL);3 Z) L! m: |* y! h2 J
    }
, Z, M( M# C$ B' c" p& ]9 y        . \7 Y* R: j# o9 r  a9 r+ n* Z
        if(result == EDMA3_DRV_SOK)( ?; i  C: ^. p3 H9 I& G4 @
        {
, ^) F7 L" x' t+ C! X                paramSet.srcBIdx    = 0;
( O9 F8 l0 h1 ?$ s                paramSet.destBIdx   = 1;
5 v8 F* N' K' i  G# j1 h  Q7 R                paramSet.srcCIdx    = 0;
) Z' \5 L2 I4 J3 a% n+ R% p                paramSet.destCIdx   = 0;' u1 |; N; T/ ~$ V9 ]; `+ d' m
                paramSet.aCnt       = PING_PONG_ACNT;
: V3 S8 b2 [( w: j                paramSet.bCnt       = PING_PONG_BCNT;
( S) v, _/ N5 W& h9 D                paramSet.cCnt       = PING_PONG_CCNT;! I$ S* U, I) v& Y) a9 |" _6 w
                9 q% k) e: t7 W; l( J" Q, u
                /* For AB-synchronized transfers, BCNTRLD is not used. */
) a; A: n2 c$ M; X7 y! I1 \                paramSet.bCntReload = PING_PONG_BCNT;+ @9 ~. ~3 }4 N. ?# k

9 a5 n+ W7 S2 j3 Z* P& R7 D5 `( h                /* Src in constant mode Dest in INCR modes */
+ d' D3 T: v# m, P& [                paramSet.opt &= 0xFFFFFFFDu;" n& `4 X1 \3 k( w
                //paramSet.opt &= 0xFFFFFFFCu;
! S( a7 v: S9 E- U# ]( p1 x                5 M$ ~# D4 L) }: p+ L4 _8 j
                /* Program the TCC */
, z' b  x0 p+ a( x. _8 y                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);# `' B7 q; ]' ~) Z0 q0 h: C9 F0 {
  T. Q  \! s4 {# l
                /* Enable Intermediate & Final transfer completion interrupt */+ T  f$ i) e+ M
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
2 R+ ~& J9 c+ R1 {3 T7 Q                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
- E: z) c+ n# Q0 v: `
: k/ I9 U; \& n: j& p# D. `                /* AB Sync Transfer Mode */
0 y3 s1 o; D4 d2 H2 S" h                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);+ {: F& ~8 Q5 ^' H2 f
               
3 h9 k" @! k$ B, c                /* Program the source and dest addresses for master DMA channel */
0 e) X2 X( r$ m/ f# _: n                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
% b- Y$ x- L4 I) n5 u                paramSet.destAddr   = (uint32_t)(ping_buffer);; M. B" A# _- C' e

* b( L" P8 ?' J& i                /* Write to the master DMA channel first. */& c4 }! o6 m. L; h0 }% \7 L* H
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);" m- R7 g  Q2 e7 q% m( \
    }       * @3 S" A* D$ r3 @6 o: ^& W
% E! s' u, b4 E' g# |6 W5 S
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);% i4 y2 O- Y# _" M9 b6 z  j* F
       
, [: `0 p  R  \# s    if(result == EDMA3_DRV_SOK)
2 C# C. x6 G' h- K3 q    {
5 W, f; O. s. l            print2arm("edma3 driver init success.",0);
9 s% j9 H! X/ O+ x, ?& |    }
; Q" U* J( Q- Z, U. o- ?}/ S' x. I. j% t. l& o- J/ E# B

. T9 `* a# I/ J$ R) ~. B3 Z; `' k2 R$ Y2 H3 e! p
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
: Q5 j( w: T0 l7 h! l% s5 l! K3 q) F# e) U+ u; h0 e3 g
. C+ G& n  ~9 i' V. x5 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$ H; c' W0 C5 P
每次DMA传输完成后都要再次使能传输
( H) _8 ^7 u+ w% [! @& q5 w+ G
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 08:35 , Processed in 0.039328 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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