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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:# g9 C; Q( l- D5 k5 k
#define  PING_PONG_ACNT          1
. l# K. d' b9 \) U; [#define  PING_PONG_BCNT          8*32*40
! M$ w! |+ W# ]( s//#define  PING_PONG_BCNT       1
# k' ]2 f6 x# t  l8 x% @2 H#define  PING_PONG_CCNT          1- D; I# {8 m# I. g  Z1 V1 o% \- ~5 Z& \4 Y4 S
#define  MCASP_BASEADDR          0x01D00000
) y+ m, Y8 r% C* N& X( p#define  Mcasp_RXEVENTQUE        (0u)
# V: Y9 h  I7 f- |" N/ _- s- {
) r5 t* v9 ?- j; U7 f& N/* OPT Field specific defines */
0 `  q1 y1 W+ A- q( n) w5 X9 ^#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
* I( e4 ^& C$ M; {#define OPT_TCC_MASK                        (0x0003F000u)
( ]7 K# H3 E6 x4 ]* P# X#define OPT_TCC_SHIFT                       (0x0000000Cu): R9 e. Z$ h$ B( M. i: \' ^+ j( U
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
% \; P0 o* Q/ j#define OPT_TCINTEN_SHIFT                   (0x00000014u)! D$ ?4 u8 O- a

. {7 B0 G: [' `+ n  c9 ~* tchar ping_buffer[PING_PONG_BCNT];  h0 X7 `- N' ]
char pong_buffer[PING_PONG_BCNT];' G) ~- q( S: s) P2 J5 J8 t

. u8 ]0 n& |8 b- S, _0 j9 b1 v' r9 ]( S, p0 t: _& E; W3 ~

1 a! R( d# t! L& r' K! ]% M. u) G# M, x9 g, z6 H5 j3 L$ i
static void ys_edma3_init(), q1 Z- t2 R- L7 v3 P! p. J
{7 ~7 T- _4 k, _' `! H% d1 V" W$ e
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};1 L+ x0 }3 J: J' h+ S
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
& `8 a$ E' m8 S3 ~. F+ c4 `        EDMA3_DRV_Handle hEdma;$ l! d# e9 C: r/ ]2 G
    uint32_t chId   = 0;
" |0 d) R% j( b7 s8 i3 c- y  \    uint32_t tcc    = 0;  r' N; h9 N! m( |
/ j3 q& _6 r( P% T' o" c& G! i
    print2arm("edma3 driver init...",0);
) f+ h, V% o' o( i
/ B$ r5 |& u1 x9 l. P        hEdma = edma3init(0,&result);
$ P9 H2 ]5 ^3 J! I! {' U% v3 R        if(hEdma)7 @  Y; V- ]1 w, l% w/ Y
        {% t8 Q* }/ M( B0 t8 M4 k
                print2arm("edma3init() Passed.",0);5 g! g: k" ~4 [3 |  c6 f; x
        }
! Q8 s" i3 H- T1 S1 y        else
7 c& `# {" C' j6 F& L        {/ N4 C+ k# Y: c! c# I; x
                print2arm("edma3init() Failed.",0);
: G$ m9 Y: R, v. _        }9 v: Z! _& b6 _5 U. F3 y
        + P8 O! @8 h2 m4 O
        if (result == EDMA3_DRV_SOK)- c, O4 u- f( H2 j. @
    {
3 a1 K$ f8 i6 z  T                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,6 N% k! ^* C6 _- Z5 e' Z
                                                       (EDMA3_RM_EventQueue)0,
3 |+ A  \. I9 Q# o                                                            &edma3_isr, NULL);/ a- q$ |2 `4 a- u1 W/ Q4 j- }! P
    }0 W1 Q4 n+ J# `
        : Z0 ]' d( x9 U" g7 q5 M2 P
        if(result == EDMA3_DRV_SOK)
3 _7 i2 W5 `9 e1 h        {) K) E* u+ k8 |4 o2 k
                paramSet.srcBIdx    = 0;* ?$ M. P0 ]2 ]: E
                paramSet.destBIdx   = 1;3 k: c4 \* {, H0 v+ J, H# _
                paramSet.srcCIdx    = 0;; C* ~$ L( @4 ?$ a) ~% T
                paramSet.destCIdx   = 0;$ E2 q- q$ X6 _
                paramSet.aCnt       = PING_PONG_ACNT;
9 F8 u2 H* x& y/ N7 T9 W                paramSet.bCnt       = PING_PONG_BCNT;. q8 w  P  \4 }# x* v% |/ J- n
                paramSet.cCnt       = PING_PONG_CCNT;& g* M; p9 T, v  [7 C
               
* f4 {; A- c; M  D: d" K8 c                /* For AB-synchronized transfers, BCNTRLD is not used. */. n( o/ l: d7 a+ s
                paramSet.bCntReload = PING_PONG_BCNT;
- [/ R0 H" A/ A
3 Z7 \5 r! T  E/ N: s                /* Src in constant mode Dest in INCR modes */0 e) ^; Q2 h1 j$ H* A
                paramSet.opt &= 0xFFFFFFFDu;. w) v- P5 ?6 t2 G
                //paramSet.opt &= 0xFFFFFFFCu;
8 v; |6 \, z9 M( ^) I; |7 M               
" M) S& s2 B$ ~                /* Program the TCC */
  K* h6 y% N) M. ~; L. d0 u                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);; T6 D5 }+ a7 R+ P* X, a! o) _

% R5 q0 b( L* V, o( v                /* Enable Intermediate & Final transfer completion interrupt */
5 _4 [) U" I0 u) e2 ~  _% M" ]                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
( c& v" ~3 [* \( E2 b- _2 ?                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
& U5 v# D- x! g8 j/ T
" T/ `) C: w6 L+ w# z# l+ i: [                /* AB Sync Transfer Mode */
- X" w  U( t, D# u$ H% ~                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
4 R7 E3 }2 z5 @& r4 G               
1 r$ _- |' H9 ~6 k% O( j5 y1 G                /* Program the source and dest addresses for master DMA channel */
6 r! v4 l! W$ u0 X' J                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
: X$ p3 n, P" G                paramSet.destAddr   = (uint32_t)(ping_buffer);
: M- N5 J7 t5 g5 Y: R) N- s4 `: W3 a9 S2 I" Q
                /* Write to the master DMA channel first. */
4 a7 j! O+ |( \% Z                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);  D2 y8 ?$ D9 ^/ x
    }      
" Z+ j" [7 r, c
9 V7 }4 }: g5 f+ _' ?1 l. _2 Q        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);8 l5 D# y( `( a% d
       
  }* p8 c6 C' e0 c4 T    if(result == EDMA3_DRV_SOK)
5 w4 K% L4 Z8 j4 \" L. x/ X" \    {( k+ }& c# @- ?4 j* R* x
            print2arm("edma3 driver init success.",0);
' q; D" T4 e5 O$ J8 \    } & Z  Z9 r3 t" a9 ]1 }
}7 f0 r% o8 d' s$ C4 f' _' n

* k, x2 Q; d$ d5 N* O
; r% M! y1 G; b- qEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。* T; n- R" m0 [5 U

4 K5 G- L' U) ]4 Q6 c5 m- K( P: K9 T3 A2 `8 N; x
分享到:  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
: O7 H& C' J- U5 t% K每次DMA传输完成后都要再次使能传输
9 T. h1 u5 U/ [2 C9 v$ H$ {0 a9 b- f
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-25 19:04 , Processed in 0.037491 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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