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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:7 b+ i' ]" @8 b; J1 F* \
#define  PING_PONG_ACNT          1
2 n* K! d1 Z" G& {# Q#define  PING_PONG_BCNT          8*32*40 0 F, f: L) H) w: l
//#define  PING_PONG_BCNT       1
# K; z, @, U* `/ G#define  PING_PONG_CCNT          11 y" \; q/ W& |9 {+ T- p2 o  R
#define  MCASP_BASEADDR          0x01D00000' H1 J5 f0 u  X2 o
#define  Mcasp_RXEVENTQUE        (0u)' c; B" a' a+ j( }

5 F8 h4 }9 [% @4 d$ Z/* OPT Field specific defines */$ Y/ U8 v/ _8 Y3 q2 z
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
; L% A- R3 _6 \) T3 D0 s#define OPT_TCC_MASK                        (0x0003F000u)! m$ U! T! b3 w7 \& `8 [
#define OPT_TCC_SHIFT                       (0x0000000Cu)
& l. P  J2 J! f, w& y#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
" j0 ]  E. \4 F: c& E0 S1 C3 P#define OPT_TCINTEN_SHIFT                   (0x00000014u)
2 G# o6 i; }5 x
5 X. M" m# Q8 A! L* o1 \0 ^char ping_buffer[PING_PONG_BCNT];
2 o# f6 z' |# f- p. T- _. _char pong_buffer[PING_PONG_BCNT];4 r8 q; A* I3 m0 @5 P; n' J  v
1 Z5 L1 x, J1 q* e/ u

; G6 E5 S, V2 ]0 Y! [& V/ v% ?: H1 J8 Z2 x( R$ m! ?; K- B) I4 D
/ E; P/ V+ C6 H$ N5 z& q
static void ys_edma3_init()
7 k9 w, H$ \8 T8 x$ a{
' C) O  x; [7 ?        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};) U% c7 r0 m3 R; _! f/ G  O- D- Q
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
$ I) J$ [6 V  I        EDMA3_DRV_Handle hEdma;
# k3 O( m2 {: Z9 i  l    uint32_t chId   = 0;
  r" `: C7 I# y    uint32_t tcc    = 0;( I8 n. P& P; _2 {

0 `2 ~* u' t4 P  x) H7 M9 U5 N    print2arm("edma3 driver init...",0);4 k; i" l0 N: F7 o/ A" H

0 U& N+ W+ x, a/ n* W        hEdma = edma3init(0,&result);
: D) x8 _# y4 m8 |; [, W0 V        if(hEdma)
( L& O. W; V" m" ]        {% o* K1 G4 d, m% k8 y
                print2arm("edma3init() Passed.",0);
3 {+ w: b9 S' @& }+ q        }
8 N; b9 b- g0 y' J& H+ w( m        else% W$ @, h* R- s/ [
        {
" i' {- Z2 B1 c" U                print2arm("edma3init() Failed.",0);
" e5 J5 }7 S' C! Z% S1 S4 `& D        }3 p1 c; P% V2 e! J1 v4 ]
       
, a& \8 @9 I" E/ ]. j0 B        if (result == EDMA3_DRV_SOK)
" y3 D" E* o. t+ \: n+ d    {' h- o  D0 W1 a8 C6 U6 @( }
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
. o$ I6 D; _  i8 R# q8 j! N" Q                                                       (EDMA3_RM_EventQueue)0,4 ?/ x  W+ ]0 ~* {1 p
                                                            &edma3_isr, NULL);, b' s0 s$ M+ F  g0 Z; }
    }. ?' s; ]7 x! N, L! |
        1 b  X; q8 q' L( S1 ]
        if(result == EDMA3_DRV_SOK)9 c& J* |% L! M) M" s( u
        {
6 k5 q  d8 C' e9 |2 ^                paramSet.srcBIdx    = 0;1 F5 e2 u# E8 s) \
                paramSet.destBIdx   = 1;' n6 M9 P3 q: @, G* z' X
                paramSet.srcCIdx    = 0;
, W% x9 k  ?0 R                paramSet.destCIdx   = 0;
$ c! B0 c. o# j: D. X                paramSet.aCnt       = PING_PONG_ACNT;% `+ }7 Z% i+ w$ _
                paramSet.bCnt       = PING_PONG_BCNT;
+ ^1 c2 n3 R' L8 D                paramSet.cCnt       = PING_PONG_CCNT;" a( e1 _" ^, d! \( h$ D, d
               
! x+ m# e$ q8 f0 r5 o                /* For AB-synchronized transfers, BCNTRLD is not used. */9 i  K1 |. u" X& _+ j
                paramSet.bCntReload = PING_PONG_BCNT;
3 _" ~9 w0 r5 m% T" E
7 ?1 ~* k5 e" v2 w+ n' U                /* Src in constant mode Dest in INCR modes */3 y' k$ t, D. ~
                paramSet.opt &= 0xFFFFFFFDu;& N2 N$ Y; L/ F; U4 k
                //paramSet.opt &= 0xFFFFFFFCu;/ ]+ k9 N: a# x5 J  m% N1 ]: M
               
% Y: x& l  D0 K" d) n/ A' H2 a                /* Program the TCC */4 n2 h6 x$ H4 V
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);4 d0 y0 w# @& D* D7 w9 K3 ?
, D7 d( |7 L* M' i
                /* Enable Intermediate & Final transfer completion interrupt */2 L! l: L9 p+ V$ e1 P3 i% I
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
* v7 [7 B3 ?$ {1 _                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);- T3 z. J% n: ~2 H7 G; u( y
( r+ \" a. n  u) ]. ~
                /* AB Sync Transfer Mode */
( {3 [  D/ }5 ~5 H' M) n                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
4 d% @5 `: h0 g- I# i               
0 m8 b, m) T& [                /* Program the source and dest addresses for master DMA channel */1 I0 n$ _4 \! |# A
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);4 P- X/ Y& J) O) Z  K6 H; {2 E
                paramSet.destAddr   = (uint32_t)(ping_buffer);9 d8 m6 x9 o& e% j5 e

3 ?; s% y4 G: n  [0 o  `! Z& F* C                /* Write to the master DMA channel first. */
% Q7 j2 y) `) [5 U1 q! Q5 [# e3 X8 E                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
" a- i4 E' h( J, F$ y1 j7 h    }      
1 e$ g# X+ W2 D5 k1 m8 J% v
" t. Z. ^) w8 f. Y        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);6 l& i. A* J2 e+ i% o2 i1 J$ ~
       
/ c- R7 k, q- Y9 A. o    if(result == EDMA3_DRV_SOK) ' |. }$ \/ j6 Y  }
    {8 x5 \& t/ y3 F8 d' |- b# g
            print2arm("edma3 driver init success.",0);! @" \( \- O/ U# l* L8 N
    } 8 c8 K7 ?! ]% e" s6 r& M9 ^$ `
}' m, R1 V, y' {6 {3 Z4 T( D

; Q( k$ V7 u" b7 |) e( C+ T: e. \3 D1 V8 F; {- W
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
1 @+ _8 h. S2 N  E9 P! D7 O. a& B: l: N4 @

3 E0 v/ D! z1 Z1 Z. S
分享到:  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
& B$ A. g2 S5 p6 N6 C- x每次DMA传输完成后都要再次使能传输
( v2 X* j- C( o9 [
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-22 13:41 , Processed in 0.040253 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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