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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
) v7 m. m' v5 e* T6 [#define  PING_PONG_ACNT          1
  q( _" Q8 q; {; [#define  PING_PONG_BCNT          8*32*40
9 G& V% \) y! {3 B' l, U+ S5 o//#define  PING_PONG_BCNT       1
6 e( ], `+ Z$ t# L0 d0 \#define  PING_PONG_CCNT          1! G0 j2 @+ c- T3 z6 a" ]
#define  MCASP_BASEADDR          0x01D00000
2 ~9 N# Y, a  w) s5 ]. L. C#define  Mcasp_RXEVENTQUE        (0u)0 q7 w4 I* Z" K5 @$ i3 X4 Y% L' F
" j- \$ H! z, j$ Q' T1 d% n
/* OPT Field specific defines */! J  _. O; k6 z4 I5 [6 T! a
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)+ F6 [5 L# Y3 @6 `" [$ y. I
#define OPT_TCC_MASK                        (0x0003F000u)
7 Z1 p; i, T- C* D9 P3 W#define OPT_TCC_SHIFT                       (0x0000000Cu)
& ^5 O, w) q& q#define OPT_ITCINTEN_SHIFT                  (0x00000015u): m) {4 _8 [( u+ |! x9 |3 t1 P
#define OPT_TCINTEN_SHIFT                   (0x00000014u)/ ]( p! Z1 S2 T5 w& ^8 o

9 A3 z8 N4 u$ s% ]/ Z$ Kchar ping_buffer[PING_PONG_BCNT];$ C! }8 D  [0 s  j/ r
char pong_buffer[PING_PONG_BCNT];
  v+ g( ]; b9 m/ d) l; g, n9 d1 d
- S! C. V' E9 U
4 Q- ?5 y: M5 N$ u0 s2 y, d+ b: c

  y8 R$ w6 B) Xstatic void ys_edma3_init()2 k7 q6 _9 y4 Z
{
: \5 c4 w+ `7 W# l5 h        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};' W9 _: ]5 q1 R) ]% e# u8 f+ w
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;6 I6 V7 `  i# }
        EDMA3_DRV_Handle hEdma;
5 |! U6 C5 {% b, H2 B) k2 n' j: s  V    uint32_t chId   = 0;
8 |7 ~7 Q/ c% r3 t% W    uint32_t tcc    = 0;
; x- a, F" Z( d& L$ |  f5 f. P' ?; v
8 A: Z4 p* B2 L1 d9 f* D8 j) ~    print2arm("edma3 driver init...",0);
" B. P' v5 N6 j6 F9 k. j1 {) G# O: N& f
        hEdma = edma3init(0,&result);
! l3 |- b7 H5 j& u        if(hEdma)
9 v+ B0 |. y# X4 |        {+ `6 z4 X9 U# V5 c5 D% P- j
                print2arm("edma3init() Passed.",0);- r" J0 U4 P5 m  Z
        }/ `/ @( o0 ^& W0 Y9 C  U  b3 S
        else, m$ y: }( e' |8 j/ ~" m
        {( \, r5 j- G& V( p, v
                print2arm("edma3init() Failed.",0);
) I9 ~1 e# X! A+ q0 y+ z        }, }% s1 e9 `7 I$ s* _7 l
          f& C8 z/ W* ]
        if (result == EDMA3_DRV_SOK)2 A  p9 p+ j& C& j
    {8 K/ e7 T5 |5 U  X6 J8 O
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
" }$ C3 G7 T, A                                                       (EDMA3_RM_EventQueue)0,
/ p& Z: A' Y2 l6 J$ G                                                            &edma3_isr, NULL);
( \2 N- t  f3 n% q8 {( i) _    }/ I3 T0 H5 e# S1 i  Q2 z) s1 O" }
        7 t* W2 e) K( I
        if(result == EDMA3_DRV_SOK)
: K0 a# n/ U1 [! o        {
7 p8 }+ d  r! k8 a. ^3 U                paramSet.srcBIdx    = 0;
( w' ^7 u% O$ T& i4 V  t                paramSet.destBIdx   = 1;
& b- K7 _' ~2 b                paramSet.srcCIdx    = 0;
3 ?7 M# D/ C0 r                paramSet.destCIdx   = 0;
4 @- V9 G9 D5 L  S, F9 ^                paramSet.aCnt       = PING_PONG_ACNT;" F  ~- h" I  R3 h
                paramSet.bCnt       = PING_PONG_BCNT;/ w' U' H, ^6 W" H; x/ c
                paramSet.cCnt       = PING_PONG_CCNT;
/ }- z* s& N; j                + `! H+ I% Q% j0 a
                /* For AB-synchronized transfers, BCNTRLD is not used. */
; V2 {% F) |; i4 p- z: X                paramSet.bCntReload = PING_PONG_BCNT;
: ^* |5 w: f7 ^2 B; l$ K6 Z: l
# L$ {  g* p+ g0 n( Y( E  O4 b% ~3 l                /* Src in constant mode Dest in INCR modes */
# D0 M3 A2 r1 J) e% ^$ |9 Q6 s' o                paramSet.opt &= 0xFFFFFFFDu;6 q: _. Y8 J' F& e" y
                //paramSet.opt &= 0xFFFFFFFCu;' Z1 m- a5 i# V3 V& T
               
/ ^4 }3 B4 L5 a* \, u5 s                /* Program the TCC */6 m) U# H" [( F3 Y
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
3 E4 p  n; K; u" C: G/ r: Z- l. B/ u9 l  N0 s2 N$ Z1 j) s6 ^, t' W  V
                /* Enable Intermediate & Final transfer completion interrupt */
% \# N& _/ m% M) w                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);/ K5 g6 S. q. u. E% j
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);: u/ B3 O( a3 c
# O6 E8 Z& e1 Y/ }4 e
                /* AB Sync Transfer Mode *// E+ G2 k5 e9 U% U* K; k2 b4 k% p
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);& n! q6 M% p) o( [* o2 j  f
               
1 s+ o6 P1 N8 @( ?  z0 \2 p: p, @                /* Program the source and dest addresses for master DMA channel */* I. A" Q6 \' P+ o6 Z" Q7 g
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);1 I2 l* V3 I. D) R
                paramSet.destAddr   = (uint32_t)(ping_buffer);4 |) k8 p0 \( k. _, y% N

' Z5 q' k8 I& i: V  l; T! U% K                /* Write to the master DMA channel first. */$ s" H$ x) s+ z) p5 C0 N
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
  J3 J" F" @' N1 D: |    }      
9 h! d8 k8 d* _
: {4 ^6 W, N+ b# `  Q  f9 d; l        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);2 y# y$ U& r+ ^" J# L1 O; i
        $ Y: c* }; o1 T, i7 c$ I0 f; K
    if(result == EDMA3_DRV_SOK) 9 U2 y4 z7 \) h" K
    {
1 l5 H' G- R! ~/ T            print2arm("edma3 driver init success.",0);3 c, S1 T& s# H. @
    } % m7 [* [$ L4 t2 S1 ^
}* U3 T% j. L# s& Q" m) l8 |
0 C% S. M( D% a! i- q9 C
! ?+ \- k: v7 d# |, ^
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
4 K( y. ~& x% R$ F; T( U- V
- i: R6 @, ~4 D7 h! s: ^8 z# i  V' f# s* Y$ d
分享到:  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, F; {8 d3 m! d( h- f* f
每次DMA传输完成后都要再次使能传输

# O: q0 B& W( [; N7 a原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-15 19:38 , Processed in 0.046163 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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