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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
* P7 M3 N& _3 L, H#define  PING_PONG_ACNT          1( B( b: M- N$ Z. ]4 e
#define  PING_PONG_BCNT          8*32*40 , L8 S1 b3 x+ i4 h
//#define  PING_PONG_BCNT       1 : m0 U# V" M* X( v5 D
#define  PING_PONG_CCNT          1; R4 l. W5 r/ d1 e% e( h0 ?) `
#define  MCASP_BASEADDR          0x01D000003 t" p- ~. [3 q, _% ~
#define  Mcasp_RXEVENTQUE        (0u)
4 @7 p  n, A1 l0 d
" f$ a* k! ]: k( _/* OPT Field specific defines */0 a5 K5 D1 D8 r
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
% I- a) A! h9 T#define OPT_TCC_MASK                        (0x0003F000u)
9 Q9 S+ Z, k( i* h+ r. b#define OPT_TCC_SHIFT                       (0x0000000Cu)
- O8 B! W, w. t. L. x+ n" l! [#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
7 B2 q/ q+ E; {3 C7 W; a3 ]7 q0 t#define OPT_TCINTEN_SHIFT                   (0x00000014u)
0 D; u$ i/ z, t) e5 G% P( m7 i% m5 B7 J6 U0 ~0 s
char ping_buffer[PING_PONG_BCNT];
; K/ I, P$ H* @7 Q# \& L0 X* F3 Gchar pong_buffer[PING_PONG_BCNT];
# g5 a" G+ T% ?5 H2 t# s/ U3 r5 L7 E2 ]  t5 `
  W1 ]6 l1 k! r1 z% z' L

5 f# `9 H3 ^+ T3 {& K
, J$ ?! F& C# \9 d( Kstatic void ys_edma3_init()
% `8 S( r* O; J  Q& |9 v{! ?# X# K( ^' {  L9 f
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
. A4 Z+ h. t! M" d3 d7 Q: m/ ~        EDMA3_DRV_Result result = EDMA3_DRV_SOK;0 ~( v1 ~4 w' K: g1 V
        EDMA3_DRV_Handle hEdma;
0 }, H$ Q7 |% B( E- M    uint32_t chId   = 0;% Z/ U, y2 {- ?; }
    uint32_t tcc    = 0;
+ w$ P  e7 q7 u9 r) B- f1 K, H7 l* y; a0 Q  C
    print2arm("edma3 driver init...",0);$ e2 R! y! R  s. Q# j
. f  O2 s! O" L6 j. ^' d0 Y, d
        hEdma = edma3init(0,&result);
  L3 Z; w) C" h3 e. B: T, \2 A& x        if(hEdma)
' `& I1 f2 ^- c, c' M        {' \) n% t/ l/ d0 v+ z7 s
                print2arm("edma3init() Passed.",0);2 _; o2 [" Y1 p  ^& c
        }( y7 j! l& Z* @$ `4 H# q+ T* q
        else. O4 x) u* G1 I& L5 O7 u, N( u
        {5 Y4 x7 J/ P4 W/ {
                print2arm("edma3init() Failed.",0);. f# D4 [0 U1 c8 W
        }
9 _1 v* Q& g* O1 }- \4 w        # q% p# O& H% C+ r5 M. m. Q1 S5 \5 X1 _
        if (result == EDMA3_DRV_SOK)
. Y( g8 ^8 g0 O1 Q1 j7 B    {
/ @8 D+ @6 x0 x  s( C, _+ I# s5 Q( Q3 G0 ~                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,  ?6 }( w7 D8 M* o  C4 A  ~
                                                       (EDMA3_RM_EventQueue)0,
, w: b1 `- u9 M                                                            &edma3_isr, NULL);3 p4 B0 e: C5 X. q& T* b, D
    }
, H# G" W! d  M( q6 W$ ?  }6 R       
. E" _% @. X, H- {  J3 m0 Q' k        if(result == EDMA3_DRV_SOK), s. E: ?2 m, ~( l) g
        {3 @) T* J1 F. S( F$ ?# r$ c
                paramSet.srcBIdx    = 0;
. [0 {! j, a  }: ^9 T/ G& Q                paramSet.destBIdx   = 1;
! ^4 J2 e+ a# G* ?  R; x$ T' q9 S                paramSet.srcCIdx    = 0;3 B5 o1 A; o# P3 Q% f2 \
                paramSet.destCIdx   = 0;
7 z$ l! O0 K! v                paramSet.aCnt       = PING_PONG_ACNT;
0 f7 x8 @9 K# {                paramSet.bCnt       = PING_PONG_BCNT;
8 P: D+ [0 P; `2 Q! S; x+ K                paramSet.cCnt       = PING_PONG_CCNT;6 @& o9 D8 K7 ^; R, T
                ) o1 A1 Q! [  G* |* S  q# S
                /* For AB-synchronized transfers, BCNTRLD is not used. */! D8 }! F& H) E8 y
                paramSet.bCntReload = PING_PONG_BCNT;
1 g  X- [; j  i5 f" s
; |3 q& Q  {  V' I; b& D                /* Src in constant mode Dest in INCR modes */
1 a5 y6 s5 j9 ?* |                paramSet.opt &= 0xFFFFFFFDu;( N" d8 ~5 \; _$ M! m8 k. }7 `
                //paramSet.opt &= 0xFFFFFFFCu;
+ d9 U8 n5 w" K2 C* t               
6 _; I; x, @/ _( Z$ Q2 Y9 A                /* Program the TCC */
( r! Y& X* Y1 }' q                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
' j1 Y5 ?2 G  {) t7 [! {  v  d0 \7 D8 d! ~  p" m8 `, e3 j
                /* Enable Intermediate & Final transfer completion interrupt */
  R/ D2 `+ v/ {+ ^. W+ ^                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
( H  p. L1 S' X2 R; Z                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);7 {: K) q' c$ b$ [9 w, l
9 F9 N; z3 A3 @
                /* AB Sync Transfer Mode */
6 g0 C* I! R/ B% u) U' X" J6 y* l                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
$ [( S/ Q: `# K6 T                  t5 ?5 K- @1 J" N0 H+ V; G
                /* Program the source and dest addresses for master DMA channel */5 G! X$ Q9 o( `- c2 s# p4 E# {
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);7 H+ ~4 Q8 y' P+ O
                paramSet.destAddr   = (uint32_t)(ping_buffer);
2 y8 k) K) h, q9 [% V# V; B" u' F* |4 x- k; P3 t. Z! m3 x% Z' \
                /* Write to the master DMA channel first. */1 ]( i) i. }1 Y8 Q: s( c
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
. O7 I+ o' g. s  `4 _- o: w! l/ d    }       0 W! i3 d: P1 I( g

. [9 N9 L4 D4 I( L1 ^1 J0 [5 y5 X        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
8 a2 u+ C& O; p; _  M        / h- G9 q/ |: R/ l3 j
    if(result == EDMA3_DRV_SOK)
0 s: V( I  b9 f: [  a. ~8 x    {
9 l+ h/ r9 U0 B$ D            print2arm("edma3 driver init success.",0);
! u8 j! O' k" O* H4 v# g6 U% M    } # H( i/ p8 c- `2 u
}
* H2 V: ]- w2 M# r2 w- u4 C/ D1 [7 U: u. P
0 F0 u$ w/ o5 l4 l
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
$ v0 N9 `& i  A+ a. l$ q+ h" ], M6 i) S1 h/ y$ p
3 T# n7 ?# i- G& Y$ T6 k" `% B' F
分享到:  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' n4 ^4 _; P5 c: v, I
每次DMA传输完成后都要再次使能传输

: z9 p( h( U8 ^) M" Q原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 13:03 , Processed in 0.037018 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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