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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:& c& w& T; e' r/ G/ }( ~
#define  PING_PONG_ACNT          14 z! ?+ |8 f* p2 r. h4 M
#define  PING_PONG_BCNT          8*32*40
" \# z5 V3 f+ Y! j- l4 v# z/ ?! W//#define  PING_PONG_BCNT       1
) X5 z) V  ~* h7 k( C#define  PING_PONG_CCNT          1$ b: M$ V  m* k- w& j/ U& L
#define  MCASP_BASEADDR          0x01D00000! T  E% q' B/ s5 I# M
#define  Mcasp_RXEVENTQUE        (0u)  n* f5 k. i( o- m

6 e  G% v5 u. m* J3 Z+ ^/* OPT Field specific defines */* H% L. u: A% ^& ~5 a+ `
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)1 r* _9 B# P4 i  ~* X- a, z& Z
#define OPT_TCC_MASK                        (0x0003F000u)
4 J" h) j+ ?0 x  j3 T# V#define OPT_TCC_SHIFT                       (0x0000000Cu)
3 B* \! D' M. U4 a, L: p1 j; K. a#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
7 k. s  k1 \: o9 c9 {6 E#define OPT_TCINTEN_SHIFT                   (0x00000014u)" c1 Y; [8 @& J9 x! ]+ A1 C1 R

- h% B8 |0 J2 L( ?char ping_buffer[PING_PONG_BCNT];( n1 r1 N1 D6 ]# b7 }0 A
char pong_buffer[PING_PONG_BCNT];
8 ?6 X8 B" k' R0 D
% _( s+ w( O  t! }7 G2 L
& M% R, U. y/ Q# _  a* w
4 K% G6 s4 g$ e) V. B
3 J% {  q$ S3 Sstatic void ys_edma3_init()
* `2 W8 ?  g; v: _* U& M{; y* [- D  }  x
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};7 P+ Y& A5 u# O3 X
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;, r, M1 e, O1 c2 ?, l. G
        EDMA3_DRV_Handle hEdma;- B$ b8 ]5 B+ V5 P% i
    uint32_t chId   = 0;
( U5 X1 u. X5 i    uint32_t tcc    = 0;+ Z. t- B2 J. M+ _

! G3 ^$ e5 J+ Z5 d' z/ s, g" k    print2arm("edma3 driver init...",0);! ~) G6 r* T" F+ o; p* T- Q# C$ C
/ S' s! n5 }# n+ M4 v
        hEdma = edma3init(0,&result);
) j: o7 i+ Y: Y* a        if(hEdma), i9 n0 B' _4 A5 ]1 z
        {5 l$ Y1 i7 r" H4 Q5 e: r5 V: G
                print2arm("edma3init() Passed.",0);4 F* k. t6 }, O
        }) S" @% k* ]. }0 o' E, S
        else
% h: n5 ]/ f4 A. ]        {5 L3 G- a5 _" _$ w6 m. V1 M/ A% F, v
                print2arm("edma3init() Failed.",0);, f) J. G7 A6 k& n, d" \
        }
( @$ Y; T0 C6 {        ; `0 O! }  ~0 i" U
        if (result == EDMA3_DRV_SOK); y; T  y& ~  k" X; C0 \2 ^
    {' ]- `% v/ u" }* H$ P6 ]
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
. g: f- ?  g, b6 K5 d4 H                                                       (EDMA3_RM_EventQueue)0,/ }5 ]: M7 e0 y4 p
                                                            &edma3_isr, NULL);
# |; V( o$ J+ ^    }
: O* i& H5 h$ [) \. Y2 E       
5 O3 ]4 y  S; N% a: {+ _        if(result == EDMA3_DRV_SOK)
; p# X7 {2 u( x. C        {
( n4 I7 F) l0 A' T                paramSet.srcBIdx    = 0;
3 B9 I! l5 I! _) [* G5 P                paramSet.destBIdx   = 1;% s  S& \* |6 P+ Z% D2 z
                paramSet.srcCIdx    = 0;
' X6 d) k& Y. [5 J9 k                paramSet.destCIdx   = 0;9 z8 f' h4 Z/ j) y
                paramSet.aCnt       = PING_PONG_ACNT;, H0 @: U* ^% |# W
                paramSet.bCnt       = PING_PONG_BCNT;
* H! [6 J2 r/ e5 X7 m) P                paramSet.cCnt       = PING_PONG_CCNT;
8 n$ ^8 g2 p! u& E5 @0 D               
+ J1 f  M" ~; l( G( x* p                /* For AB-synchronized transfers, BCNTRLD is not used. */
* c  Z2 K# D5 \+ P& L                paramSet.bCntReload = PING_PONG_BCNT;  B4 P6 Q. s4 o9 T; j& }+ D# \
! k$ P1 O  [7 \
                /* Src in constant mode Dest in INCR modes */0 @( Z9 G) i0 x6 i: O6 H
                paramSet.opt &= 0xFFFFFFFDu;9 \, b5 r0 ?. X* k8 Z$ H( [6 j+ J+ s% A
                //paramSet.opt &= 0xFFFFFFFCu;
5 Z) y* C5 Z. g' @: T9 c* c               
8 \! J; \. q" B( A3 `; d0 C6 t                /* Program the TCC */1 y5 h1 ?6 y# x" j
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
8 _6 y+ @. _3 c) p) O
2 R% ], @/ H; W$ H5 d4 ^                /* Enable Intermediate & Final transfer completion interrupt */
' e& j- B' a5 g/ c' i: h3 n                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
& q: w  a7 [# n3 h' M9 |                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);) g' N- K6 {8 C$ G! q- X" U( C

5 d5 l$ m9 q* R6 l                /* AB Sync Transfer Mode */) F$ @- `: p( f
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
/ w' q2 c# w+ ^' k( E, e                  u4 A' o% s* C4 Y( C7 M
                /* Program the source and dest addresses for master DMA channel */
( D$ I+ O! W6 \& ^                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);! r. Q, s5 ^9 F4 Y  u% c
                paramSet.destAddr   = (uint32_t)(ping_buffer);
# {; Q/ X2 l9 z
$ C7 {) N! x6 J! w0 O' |5 Q                /* Write to the master DMA channel first. */
7 |% _8 H$ E3 m1 F, j7 y, Y                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
' F$ P# n/ M2 Z7 L    }       2 Z6 k: E% |, r( Y, e
' I  Q. B- e" ]% E9 i! |- f6 J: y
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);, y1 W! n$ T9 j; G0 C  m. F4 o
       
+ C1 \  @& Q% i% y    if(result == EDMA3_DRV_SOK) ( x2 ~: p: n8 x' l
    {3 a# k, E( x: H' t
            print2arm("edma3 driver init success.",0);5 q, B; ~# j& a3 V: Q& Q
    } ' y) y* F' T, }. f6 H
}2 u3 p7 u) [+ `- ]4 H% n

# c$ @/ R2 B' [6 Y0 A2 J8 \. ~  n6 F
8 z/ x) b+ D4 C, U4 M" FEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
; v3 Y/ i! l& {5 M* Q
- I3 V* X2 F& b* c% f% H7 H( a
$ \1 G' W5 w0 q" r2 y7 z5 l1 ?3 }
分享到:  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
  M, W7 {6 V1 \! S8 e+ V" l每次DMA传输完成后都要再次使能传输
+ i- B! c5 J) i& [( t  P% V
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-3 00:03 , Processed in 0.041062 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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